Access総合相談所 30
■ このスレッドは過去ログ倉庫に格納されています
ACCESSに関する質問はこちらへ ▼━ 質問のしかた ━━━━━━━━━━━━━━━━━━━━ ★ 質問内容は具体的に書いてください。 業務上の守秘義務も大事ですが、貴方の所属組織を特定できるほど、特異な業務・システムは滅多にありません。 作りたいものの内容を隠しすぎないようにし、列名、データ値を適当に変更して例示するなどしましょう。 ★ 事前にGoogle等で調べられる範囲は調べてください。 ★ 完全初心者はまず、新規作成テンプレから「NorthWind」を開いて、一通り触ってみてください。ACCESSの概念を理解する もっとも簡単な方法です。 ★ お金の管理でシステム設計ミスが会社経営に重大な支障が予見される場合は、パッケージソフトに誘導する場合があります。 格安なソフトもあるので設計に取りかかってから悩む前に、市場調査も行なってください。 ★ アドバイスを貰ったら、必ず経過・結果の報告をして下さい。 ギブアンドテイクで情報を共有しましょう。 ▼━初心者用質問テンプレ ━━━━━━━━━━━━━━━━━ 【Windows】 7, 8,10 【Access】 365,2013,2016,2019 【作りたいものの業務分野】 販売管理,買掛管理,営業予算管理,営業実績管理,生産管理,財務管理,労務管理,学術研究統計,文字格納を主体としたDB,その他() 【あなたのスキル】 LV1:完全初心者, LV2:ACCESSの基本要素(テーブルやクエリーなど)の役割を知っている LV3:VBAが打てる 【どのオブジェクトに関する質問か】 テーブル,クエリー,フォーム,レポート,サブフォーム(サブレポート),リレーション,VBA 【やりたいこと】 (質問によっては各テーブル名と列名を例示) (クエリーの場合は、左上の「表示」を押し”SQLビュー”に変更して表示される”SQL文”を貼り付けると回答者がわかりやすい) (得たい出力結果や挙動) 【エラーメッセージに関する質問】 ・エラーメッセージの内容 ・windowsは32bit版か64bit版か 前スレ Access総合相談所 29 https://mevius.5ch.net/test/read.cg/bsoft/1569236545/ アカン おっきいのはSQLサーバーかアズール使ってください 2GBは知らなかった。 データファイル分離で使ってて ファイルサイズ自体は4GBくらいになっても問題ないけど 実データサイズが2GB越えられないのかな。 win11でフォーム開くと、コマンドボタンの他にスクロールバーが変わってますね。マウスオーバーで上下矢印が表示されてバーが太くなります。 >>260 どういうのになるんですか? AccessのUIには辟易していたので改善されるならうれしいです レポートでフィールドの文字をきっちりまんなかに表示させて、余計な隙間つくりたくないんですが目分量歯科できませんよね? >>271 右端のプロパティの極小文字とかレイアウト拡大できないとかの前時代的仕様はそのまま? ▼━初心者用質問テンプレ ━━━━━━━━━━━━━━━━━ 【Windows】 10 【Access】2010 Runtime 32bit+Windows10 64bit 【あなたのスキル】 LV3:VBAが打てる 【やりたいこと】 /cmdを使って引数を2つ渡してaccdbを起動したいです。 Y:\hoge.accdb /cmd "ABC,"DEF" だと問題なく起動するのですが、2回実行すると別プロセスで開いてほしいため "C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" "Y:\hoge.accdb" /cmd "ABC,"DEF" のように設定すると、 MicroSoft Accessを起動するためのコマンドラインに、MicroSoft Accessでは認識できないオプションが含まれています。 MicroSoft Accessを終了し、正しいコマンドラインオプションを指定して、再移動してください。 というメッセージが出て、ファイルは起動しますがコマンドライン引数は渡せません。 引数を一つにして "C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" "Y:\hoge.accdb" /cmd "ABC" なら問題なく起動します。 実際には、別アプリが動的に引数をくっつけて起動するので、引数部のデリミタやダブルクォーテーションをコントロールすることはできません。 そもそもエラーが出る理由もよくわかっていないのですが… 正しいやり方があると思うのですが、教えていただけないでしょうか? a b c d a b e f a b g h z y i j zy k l こんな一覧を以下みたいな帳票レイアウトを 標準機能でつくれます? a b ―――- c d e f ――― 小計 違うページ z y ―――- i j k l ―――- 小計 >>275 ACCESSというより、知能テストみたいな情報しかないな。 ようは、カラム名になるべき項目が複数列にわたって、行情報に 入ってるのをなんとかしたいってことでしょ。 ここではクエリーエディターを表示するわけにもいかんので SQLで表現すると、 SELCT [3列目] AS a,[4列目] AS b from table WHERE [1列目]=a AND [2列目]=b 小計をレポート上で表現するか、クエリーに含めるかは考え方による。 上記クエリーをq1とすると SQL * FROM q1 UNION ALL SQL sum([a]) AS sumA,sum[b] AS sumB FROM Q1 みたいな感じ。 違うページ、上記のように中身を変えてもう一本作ることになる。 本当はTransを使いたいところだが、1列目の数値データは3列目、 2列目の数値データは4列目、と変な形なので、無理だと思う。 本来あるべき、データの原型は a c bd ae bf zi yj 勉強し始めなのですが、クエリで複数の都道府県でデータを抽出する問題でわからないことがあります 大阪府と京都府を抽出条件に入力し、並び替えを昇順にすると京都府→大阪府の順に並びます 昇順は五十音順で、あ→んに並び替えなのかと思ったのですが違うのでしょうか? なんていうか、コンピュータが>>277 の様な初心者が考える通りに動いてくれればいいのにって思うよねぇ 調べたら地図上の順番通りに並べ替えする方法が出てきたので、最初からその設定になっているわけではないんですよね? 昇順降順の決まりが謎です… Windows10、Office365です >>277 京→大 文字コードの順番じゃないの? ユニコードか ShiftJIS かドッチかだったと思う >>280 文字コードですか 講師から何も説明なかったのでまったく考えついませんでした ありがとうございます! 50音順なら 京→キョウ 大→ダイ で正しいんちゃうんか? Windowsもこうだろ? 京都人に、わてらが前に来ないのは何事かといけず言われるよ。 気持ちは今でも首都だから。 アルファベットだと何の苦労もなく並び替えられるけど、 漢字は音読み、訓読みあるし。 ちなみに、軽くググったら厚労省の県コード表が見つかったが 概ね北から南の順に並んでるけど 京都府26番、大阪府27番になっとった。 https://www.mhlw.go.jp/topics/2007/07/dl/tp0727-1d.pdf 実データのほかにこういった都道府県マスターを持っておいて クエリーで接続して県コード順に並び替えるのが、いいんじゃないの。 レポートのグループ化すると見出しみたいになるけど 複数フィールドでグループ化って出来ます? 連結した値でグループ化してもいいし 多段グループ化して上位グループヘッダーは非表示(高さゼロ)でも良い クエリって フォームの例えばラジオボタンの状態で 丸々以下の二つのクエリを切り替えて実行することできないの? select 出力カラムA from テーブル名B where 条件式1 and 条件式2 select 出力カラムC from テーブル名D where 条件式3 and 条件式4 ・売上レコードが月に数千ずつ増えていくテーブルで取引先の売上の合計とかある期間の売上合計をだす ・労働時間管理で月間の時間を足す というのはレコードが増えるたびに重くなっていきますか? それぞれのテーブルにはどんどんレコードが増えていき、一番使うのは今月の合計だと思いますが 今月のをみるがために、1度すべてのレコードを抽出条件に適合するか判定するんですよね? 例えば10年前の、とかまで >>286 onchange プロシージャ if me!radio1=1 then me.recordsource="なんたら" else me.recordsource="どうたら" end if >>287 はい。pcのマシンスペックに影響されます。 計算が遅いと感じるのであれば 昔の会計系でよく見られた技法の 集計保存テーブルを持っておくことです。 whereじたいは、計算コストがかからないので対象を絞っておいて、合計計算して 集計テーブルにinsertするというやりかたです。 過去データは集計の対象から外れるので全体的な処理が 軽くなる場合もあります。 ちなみに一般的な販売管理などでは集計保存テーブルをつかうものですか? >>291 売り掛け管理は、明確に締め請求という手順があるので 月間(または締め日期間)の精算額テーブルを持ってますよ。 支払の契約によっては、前月の請求額が必ずしも今月入金にならない業界もあるので 前月残高+今月売り掛-今月入金=今月請求額 という計算を行います。 >>287 "202109"みたいな値を格納した「年月」列を作って、インデックスをつける 「年月」列を使ってwhereなりgroup byする >>294 whereで絞り込む時、yearとかmonthを使っちゃうとインデックスが使われない 不等号で年月を判定するなら日付にインデックスでもいいね >>295 数字で格納するのは日付入力時にVBAで変換して格納するフィールドをつくるってことですか? >>288 フォーム側の機能、レコードソースの切り替えでしか無理か クエリ、つまりSQLでは無理なんだな >>290 293さんの手法でwhereとgroup byで集計 insert 集計保管用テーブル(いわゆる追加クエリー) 集計のし直しは、集計保管用テーブルの対象レコードを見つけてupdate(いわゆる更新クエリー) >>296 そんな事するなら日付を1日固定で日付型使った方がスッキリするよ >>301 yearとmonthだけ入れてdayを1にするということ。 2021年9月なら年月フィールドには2021/9/1で入れる。 intで格納すると日付関数が使えないから面倒だし、うるう年計算でミスするヤツが出てくる。出てきた。 >>302 一応レコードごとの日付は必要なんですよね 勤務日や売上日なので >>303 実データ日付と集計用欄の二つ持つということ。上にも書いてくれてるでしょ! なんなら集計欄を「いろはにほへと」にしてもいいのだよ。 なんの計算か知らんけど20日締めがある場合、21日は次月を示すグループ値が必要なわけだよ。それは202110でもいいし2021/10/1でもいい。 日付は内部的にはシリアル値という数字に変換してるだけなので。 >>304 vbaとかでやらずにすべての1日でいれろ、ということかと勘違いしました でも日付型(>>300 にあるように)ならそのままの日付フィールドではだめなんですか? 実データ日付----データ日付 集計用日付-------整理日付 締め日の範囲とかで集計するとかならともかく同じ年月ならいらんよね VBAしばりプレイ中でフォームの即値しか使えないなら確かにSQLはごちゃごちゃするかな SQLを下のように書くなら実データでいい where 日付 >= #9/1/2021# and 日付 < #10/1/2021# 横槍だが 結局>>287 はどう対処するのが正解なの? 実際ところACCESSやデータベースって販売管理とか請求関係向きではないよね? ここまでの回答 日付にインデックス張って インデックスの効かないyearやmonthを使わない >>310 SQL使っていない販売管理ソフトって今存在するのかな? >>289 の人も書いているように範囲データの抽出(where)だけならインデックスがあるから時間はかからない 単純合計などお茶の子さいさいだ。 10年貯めたら遅くなると思っている子はインデックス様の力を見くびっているぞ ただし在庫数や売掛残金のようにすべての過去データを集計しないと出てこない数値は当然ある だから普通のシステムは月次処理などで前月末残金などを別のレコードに記録を取りそこからの計算で済むようにしている 「向きではない」という感想はこれらのデータを組み合わせた表を画面表示するのが面倒だということだろう Excelなら簡単ですね AccessのFormで実現するなら一時テーブルを作成するぐらいしか手はないだろうが そのためのレポートである。がんばれ 印刷したくないならVBAでExcel出力してもよいぞ。がんばれ formのフィールドの値をクエリの抽出条件に設定して、フォームにレポートプレビューボタンからレポート開いても抽出がうまくいかずレコードなし。やり方まちがってる?? >>311 つまり普通に日付フィールドでやるってこと? >>312 適度に集計して計算結果を保存するテーブルにVBAで転機するっことだよね? バカにされがちなファイルメーカーって 計算フィールド(計算結果が常に保持される)ってのがあってExcel的な関数をいれといて計算するんだけど 結局されと同じことするってことだよね? >>315 >>299 さんも書いてるけど VBAじゃなくてもアクションクエリでできるぞ >>314 日付フィールドにインデックスをつけて、インデックスが効くようにSQLを書けば、 日付フィールドでOK 最近のPCで集計やって気になるほど遅くなることある? >>318 SQL直接書くのって中級者って気もする 俺も初心者なんだけどインデックスきくきかないとかあるんだ >>320 この例だと、せっかく 「[日付] の値」 で目次つくってあるのに、 「Year([日付]) = 2021」 とか 「Month([日付]) = 9」 ってやっちゃうと、 値を変換して比較してるから目次が使えない 「[日付] >= #2021/09/01#」 や 「[日付] < #2021/10/01#」 なら、 目次使えるねって話 >>321 つまり何も考えずに日付フィールドをインデックスつけて それでレポートつくるたびに集計させればいいってこと? >>321 202109を提案の方と違うけど 私も202109のインデックス欄作ってますよ。 全然、強制はしませんが。 不等号より等号のほうが計算コストが小さいんですわ。 さらに考え方変えて、売り掛け買い掛けのように締め日がずれない、必ず1日と末日の区間であるという前提で提案しましょう。 Accessの利用を許可してる会社は、Access使いをパソコンオタクとしか見なしてない会社が大半です。 そこでみんな大好きexcelです。 外部データ接続でaccessファイルの該当テーブルを指定します。 リンクデータは自動でテーブル化しますから そのテーブルをもとにピボットテーブル、行ヘッダーに日付をもってきて、年と月でグループ化します。 新しいデータは基本的にはリンクテーブル部分とピボットのとこで右クリックメニューから「更新」を押すだけです。 excelなら皆が開けるし、オタクがわけわからないことやってる、と陰口たたくこともないでしょう。 (ちなみにうちのパワハラ上司は「何がピボットだ、くだらん」と叫んでますが、これは無視ということで。) Windows10が動作するスペックのPCなら検索速度よりもファイル容量の限界のほうが早く来るだろう よってナマ日付に一票 >>326 解説サイトなんかでも大昔の常識がそのまま採用されてることあるよね 全部メモリにロードされるしよほどじゃないかぎり重くなることはなさそう 計算コストより保守コストや拡張コストが小さい方を選べ >>328 多少重くても数秒だからテーブルとフィールドは少なく、がいいよね よくある納品書ヘッダーと明細の2つのテーブル 明細にも日付があるとSQL書くのがすごく楽になる そもそも今時、1対多とかにする必要あるのかとも思えてくる たかが数字や文字列省略したところで何TBもあるストレージの前では無意味に思える >>332 ああそうか 上限あったな。いったことないから忘れてた 2GBならなおさらどうでもよくない? 上の方の日付のどうこうとか 集計でも毎回全レコードに対してやっても待たされることはなさそうだけど なんなら単価×個数 とかもVBAでフィールドに格納(変更があれば再計算する)したほうが運用しやすい レポートにも経験結果はるだけだからやりやすい >>331 連結したクエリを保存しとけばいいんだけどね Accessだと問題ないけどSQLServerで連結したViewを開いたりするとうわわーってなる >>334 accessはコンパイルする必要ないから、賄い飯ツールフロントエンドとしては よくできてるんじゃない? 10人同時更新の要件あったから、odbcじゃなくadoで引っ張る必要のために、死ぬほどコード書いたけど。 さすがにadpの概念どおりに フォームでレコード移動するたびに全フィールドの割り当て書くのはやめて、テンポラリテーブルを媒介させてる。 請求書をインボイス対応に改造するのが大変そうだ。適格請求書はゴム印で逃げた。 >>331 サイボウズ社のkintoneみたいなNoSQLデータベースでしょ。 常に一覧式か 本来のヘッダー情報 +品名1 単価1 数量1 小計1 品名2 単価2 数量2 小計2 品名3 単価3 数量3 小計3 というカード型だから 少しでもsqlやったことあれば 頭うにょーってなるよ。 一般労働者見てるとリレーショナルDBよりも、 excelで横に1万列とか並んでるほうを好む日本人向きな 設計思想だけど。 >>338 10%対象いくら 消費税額いくら 8%対象いくら 消費税額いくら 軽減税率対象品名に米印など。 振り分けの仕組みに少し頭使う。 そのうち方法論で、ここでも意見別れそうだけど。 >>339 キントーンって高いよね そもそも使いにくいし 売上管理や集計、計算などそのまま使える会社もほぼないだろう >>340 うちは軽減税率ないサービス業だからよかったよ たしかにそれぞれ計算して集計するようにかえるのは大変かもね うちの場合小計項目増やすだけだからね 8%0円 って >>337 この間対応したけど内税外税非課税8%10%混在しててクソ面倒くさかった 請求書関連は四捨五入にしてるけど一般的にはどうなの? 自由らしいけど 基本的には業者間取引で 法人が消費税を担税するわけではないので 損も得もないんだけど 切り捨てのほうが心証はいいかもね。 上のご指摘のとおり「うちは切り捨てです」「うちは四捨五入です」と統一する必要はある。 成り行き上、販売チャネルや本支店間で売上管理システムが別になってしまったときは特に注意が必要。 このスレのように諸口だけaccessで管理してます、とか。 まじで? 消費税誤差+1円とか付けるのだめなの? こっちの請求書なんてハナから見てくれないぞ where句のand,orが複雑になるとわからなくなる。 良い考え方ない? >>349 ()で括れば有線順位変えられるやろ Where (果物=りんご and 価格<=300) or (果物=みかん and 価格<=200) 内容みないとなんとも。 一つのカラムに対してなら IN句がORの変わりになる。 in (select どーたら)はaccessでも使えるんだっけ? クエリデザイナーは条件欄を 横方向に列記すればAND 縦方向に書けばORだから 無理にsql入力しないほうが 見やすいかもしれんし。 あんましごちゃごちゃするなら、小分けのクエリーの保存、参照を繰り返せばいいのよ。 似たようなところで、sqlserverではCTE式ってのを頻繁に使う。 VBAで判定のfunction作るとかは? 試したことないけど >>350 フォームの値を設定してて、空のときは無視するとか betweenのときはどうすりゃよかったっけとか 複雑 >>351 フォームの値がブランクの時かつ複数のフィールドの場合 SQLじゃないと、全パターンクエリデザインはしんどい >>353 >空の時は無視する ってのがよくわからんが。空の時はその値は検索条件にしないってのなら 選択クエリのデザイングリッドで、その値のフィールドの抽出条件に 文字列の場合 Like "*" & me.[(フォームのコントロール名)] & "*" でフォームのコントロールが空欄だったら Like "**"となって全レコードを選択状態に 何か入れたらLike "*なんとか*"となって「なんとか」があるレコードを選択状態に >>358 これだと種類とランクで片方のコンボボックスだけ空白の場合 片方の選択条件で絞れるんですかね。 左側から抽出条件は実行される暗黙のルールがあるんでしたっけ >>359 私も思いつかない、なかなかトリッキーな手法だけど IIf(IsNull(forms![フォーム]![種類]),True,[種類]=forms![フォーム]![種類]) 抽出条件をtrueとしているわけだ。 不等号を使う場面は、日付、番号が想定されるが IIf(IsNull(forms![フォーム]![日付1]),True,[日付]>=forms![フォーム]![日付1]) と置き換えられるだろう。日付1から日付2までなら、 IIf(IsNull(forms![フォーム]![日付2]),True,[日付]<=forms![フォーム]![日付2]) ともう一本作るだけ。 空値ならtrue、空値ではなく値が条件に合うならtrue わかるかな? ノンプログラミング可能な、良いアイディア。 もっとも、フォームの検索エリアにわざわざラベルで「から」「まで」と書いてやっても ユーザーは平気で「12月1日」から「9月1日」までと入力しやがるので 私はこの手法は使わないと思うけど。 VBAで一旦、大小関係を評価して必要に応じてひっくりかえしてから querydef使っちゃう。 >>360 考え方は同じ。IIFの中でtrueを発生させてWHERE句でtrueとマッチ評価をするか コンボ空値ならダミー文字、そうでないならテーブルの値を出力して WHERE句でコンボボックスの値とマッチ評価をするかの違い。 コンボボックスが空値になりえる総当たり戦のパターンを書いている。 (true=true)=true ("文字"="文字")=true >>361 >ユーザーは平気で「12月1日」から「9月1日」までと入力しやがるので こういうのは、オレなら最初の欄に「12月1日」って入力した時点で、次の欄に「12月1日」以降しか入らない制限を掛けるな >>360 >>358 のリンク先のやり方は、クエリ上に絞り込み用の演算フィールドを設けて、フォームのコントロールの値が空欄(Null)ならばTrueの値を設定してる。 つまり空欄なら全レコードでのこのフィールドの値がTrueになり、空欄以外ならその値があるレコードだけがTrueになる。 そこで、抽出条件にTrueを設定すると、空欄なら全レコードが選択、空欄以外ならその値があるレコードだけが選択されるってこと >>360 のリンク先のやり方は、テーブルにあるフィールドの抽出条件として フォームの値を設定する方法で、これだと、いずれか空欄だといずれのレコードも選択されない。 そこで>>358 のリンク先と同様にクエリ上に絞り込み用の演算フィールドを設けているんだが、 空欄の場合にTrueではなく”AA”っていう値を設定しているので、その3種類のあらゆる組み合わせを抽出条件に設定しないといけなくなってる。 どっちが、よりスマートかというと、>>358 の方法だと思うよ。 IIf(IsNull(forms![フォーム]![種類]),True,[種類]=forms![フォーム]![種類]) は IsNull(forms![フォーム]![種類]) or [種類]=forms![フォーム]![種類] とも書けるけどね。 まあ、大差ないかな。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる