Microsoft Access 掲示板

views
4 フォロー
6,283 件中 3,201 から 3,240 までを表示しています。
1

「1または0、多または0のリレーションシップ」とはどのようなものでしょうか。
他のデータベースにはそのような機能かあるのでしょうか。

外部結合(OUTER JOIN)のことではないですよね。

2
りんご 2021/09/10 (金) 01:51:03 c564b@0e907

 とりあえずExcelみたいな何かになるけど、請求書を発行するときに、B業務テーブルの要レコードを絞り込み、追加クエリ。A業務テーブルの要レコードを絞り込み、集計クエリからの追加クエリ。みたいな感じで、請求書の明細欄テーブルに追加すれば、いいんじゃない?

1

それぞれメリット、デメリットがありますので、運用実態によるでしょうね。

テーブルは分けておいて、集計するときに、ユニオンクエリでまとめて、それから集計クエリにする。
メリット
 現状のエクセルの表をそのままテーブルにすればよい。
デメリット
 ユニオンクエリはレコード件数が多いと重くなりがち。

テーブルは一つにまとめておく。
メリット
 ユニオンクエリを作る必要がなく、そのまま集計クエリにできる。
デメリット
 片方のテーブルにしか必要のないフィールドもすべて持つ必要がある。

自分としては、
分ける方は、ユニオンクエリで重くなるのはどうしようもないが、
纏める方は、業務によって不必要のフィールドは、クエリや入力フォームを別に作成することでなんとでもなるので、
一つに纏める方がいいかと思います。

9
hiroton 2021/09/08 (水) 08:43:16 b4301@f966d >> 4

いつ

集計条件に該当するデータの入力があったとき(日々のデータ入力のとき)

どのように

VBAで集計条件の有無をチェックしつつSQLを発行して


hirotonならこうするだろうというたとえです。実際には要件に合わせていろいろでるでしょう

繰り返しますが
結局のところデータ構造自体はよくある「請求書」「請求明細」の構造と同じです。運用や作業性に合わせてどのようにシステムを組み込んでいくかという問題になると思います

「請求書を発行する」という目的があるようなので今あるデータを使って請求書を作ってみるといいでしょう。ACCESSで実現するために(データベース的な考え方として)何が必要か見えてきますし、そのうえで「では、新しい請求書を発行するためにはどのようなデータ構造、入力・処理が必要か」というのが見えてきます

8
りんご 2021/09/08 (水) 00:05:54 c564b@0e907 >> 7

 ここまでが準備です。Excel(表計算)みたいな何かを作る企画がスタートします。

1.ACCESSにはピボットテーブルのようなものがありませんが、ある指定した範囲や条件の集計をひとつのレコードもして扱うことはできませんか?

 業者に発注して、Excelみたいな何かを作ってもらうのが、早いと思います。

2.Excelのように縦にずっと入力していくのはACCESS的ではないようです
キーボードからマウスに持ち替えなくていいように

 基本的に、上から下に入力するのが、Accessだと思います。左右と上下に入力するのは、Excelみたいな何かでしょう。基本的に、持ち替え(根回し)を避けられないのがAccessだと思います。何も考えずに超スピードで入力出来るのは、Excel的な何かでしょう。

Excelでは単価計算もしているので数千、数万行になってきたら不安定になってきました。一応テーブル機能を使いましたが追加された行の色が再度開くまで適応されない、とか

 データモデリングがポンコツならば、遅かれ早かれ、不安定でどこかおかしいAccessになると思います。根回しがしっかりしていれば、AccessみたいなExcelがあってもおかしくないと思うのですが。
 

7
りんご 2021/09/07 (火) 23:10:14 c564b@0e907

 始めてみないとわからないと思いますよ?

日付  名コード  数量 と3行あり、それぞれにいれていきます

 テーブル作成、クエリ作成(テーブルのクエリ化)、フォーム作成(クエリのフォーム化)、集合形式から表形式に変更、高さ、上位置、左位置の微調整、単票フォームから帳票フォームに変更まで、頑張りましょう。
 まず、テーブル作成ボタンを見つけて、データ型を選べますか?主キーのON/OFFを出来ますか?
 次に、クエリ作成ボタンを見つけて、何をどうすればいいかわかりますか?テーブルを選んで、フィールドを選ぶだけですが。
 最後に、フォームは、基本操作の解説動画を探して下さい。思い通りに移動させたり、大きくしたり小さくしたり、出来ますか?ワードやエクセルのように、雰囲気では無理です。

VBAで上の日付と名コードセルを自動コピーするようにしていて、数量だけを、資料をもとにいれまくるものです。日付や名コードが変わるときには手動で修正しています。

日付のプロパティ・・・・・既定値Date()
名コードのプロパティ・・・既定値ほにゃらら(数値型、短いテキスト型、既定値を決めて下さい。)

Private Sub 日付_AfterUpdate()
    Me.日付.DefaultValue = “#” & Me.日付 & “#”
End Sub
Private Sub 名コード_AfterUpdate()
    Me.名コード.DefaultValue = Me.名コード
End Sub
Private Sub 数量_KeyDown(KeyCode As Integer, Shift As Integer)
On Error Resume Next
    Select Case KeyCode
       Case vbKeyUp
          DoCmd.GoToRecord , , acPrevious
       Case vbKeyDown
          DoCmd.GoToRecord , , acNext
       Case Else

    End Select
End Sub
6
あーちゃん 2021/09/07 (火) 18:55:47 58219@d5fd2 >> 5

集計条件はいつ、どのように記録するのでしょうか?

4
りんご 2021/09/07 (火) 17:01:46 c564b@0e907 >> 3

品種コードですが、もしかして親テーブルから参照してきているのかしらと、私が早とちりしていました。ごめんなさい。

3

【解決】
リンゴ様

いつもありがとうございます!

教えて頂きましたコードで動作実現できました!!
「品名」に「品種コード」とリレーション・・・表現が間違ってました。
正しくは”両方とも同一テーブルで「品種番号」に入力したら「品名」に自動的に入力されるので・・・”でした。
紛らわしい表現をしてしまいすみませんでした。

早々のご回答ありがとうございました!
また、行き詰ったら宜しくお願いします。

13
チョコラブ 2021/09/07 (火) 15:24:33 f1313@cd996 >> 12

お返事が遅くなってすみません。
ありがとうございます。

使えそうな時があったらぜひチャレンジしてみたいと思います。

5
hiroton 2021/09/07 (火) 14:01:42 4e23a@f966d >> 4

具体例を挙げていただければそれに合わせて回答もできるんですがたとえば

日付名コード数量
2021/9/7りんご3
2021/9/7りんご2
2021/9/7みかん8

のようなデータがあったとして請求書が

日付名コード数量請求書番号
2021/9/7りんご5A001
2021/9/7みかん8A002

となるような場合なら

集計条件を記録するテーブルは

日付名コード請求書番号
2021/9/7りんごA001
2021/9/7みかんA002

になります

2
りんご 2021/09/07 (火) 13:59:32 c564b@0e907 >> 1

サブフォームの「品名」に「品種番号」とリレーションが設定されている

ところで、これはどういう事でしょうか?

4
あーちゃん 2021/09/07 (火) 13:47:24 58219@d5fd2

くわしい解説ありがとうございます
集計条件を記録するテーブルを用意、というのはどういったものですか?
理解できなくてすみません

1
りんご 2021/09/07 (火) 13:46:49 c564b@0e907
Public Sub ほにゃらら()
    Forms![フォーム名]![サブフォームコントロール名].SetFocus
    Forms![フォーム名]![サブフォームコントロール名].Form![コントロール名].SetFocus
End Sub
3
hiroton 2021/09/07 (火) 11:06:24 4e23a@f966d

ACCESSだと、クロス集計クエリで集計した結果と、他のテーブルのレコードを
請求書レポートに並べることになりますが、かんたんに混ぜることはできますか?

前段階でクエリでデータを結合しておく、レポートにレポートを埋め込む仕組み(サブレポート)、VBAによる制御、等柔軟に対応する仕組みはあるので大抵のことはできますが、どの程度なら「かんたん」で済むのかは要件次第でしょう

集計結果に請求書番号を付与することはできないと思いますし
請求書作成時に、大本のレコードすべてに付与することもむずかしいでしょうか?

ルールさえしっかりしていればできないことはないと思います。
ただ、請求書番号が未決定のレコードについて、新規で番号を取ればいいのか、集計で統合される別なレコードですでに決定されていないか、それらで請求書番号に矛盾がないか等の問題と対策が発生します。請求書番号は集計結果ごとの管理にしたほうが楽でしょう。

また、ちょっと難しい言い方になりますが、「印刷時に自動で請求書番号を決定するシステム」は難しいです。
プレビューで請求書番号を仮発行するのか、キャンセルした場合どうするのか、上記問題と合わせてどのような表示順にするのか
そして、これらを実現するための複雑な処理等、様々なことに悩まされることになります。

集計結果を1つのレコードとして扱いたい場合は、一旦EXCELで入力、集計してインポートするのが
一般的でしょうか?

集計条件を記録するテーブルを用意してそこに条件を追加していけばいいです。集計結果自体は計算で求まるので記録する必要はないですし、そのテーブルに「請求書番号」フィールドを設ければ、集計結果の1レコードごとに「請求書番号」を管理することができます。


結局のところデータ構造自体はよくある「請求書」「請求明細」の構造と同じです。運用や作業性に合わせてどのようにシステムを組み込んでいくかという問題になると思います

12
くろ 2021/09/06 (月) 17:49:41

りんご様、mayu様

ご指摘ありがとうございます。まだ頭の整理がキチンとついていないようです。
お恥ずかしい(/ω\)

OLE DBドライバについてもインストール済みで、こちらを報告すべきでした。
やったことメモから適当に引いてご報告してしまいました。

結果的にmayu様よりアドバイスいただいた以下を追加することで、
64bit版Accessの帳票フォーム上にもADO接続の結果を正しく表示することが
出来ました!

rs.CursorLocation = adUseClient

知らないアイテムでしたので調べましたところ、rsの結果をクライアント側で
利用する事を明示するものなのですね。64bit版Accessで結果セットから.Nameアイテムを
利用する際にははしっかり明示する必要があるようです。
mayu様、とても助かりました。ありがとうございます。

ところでADO接続とDAO接続の違いについて、どちらもサーバーから結果セットのみ
取得できるようですので、Access上では親和性の高いDAO接続の方が良さそうですね!
DAOのリンクテーブルでは、テーブルデータを毎度引っ張ってきてローカルでキューされる
と勘違いしておりました。パススルー出来るのですね!

ウチのシステムもDAOにしておいてくれたら移行もすんなりだったのに…とも思いますが
今回の事は私にとってとても勉強になりました。

重ねてお礼申し上げます。ありがとうございました。

2
あーちゃん 2021/09/06 (月) 17:39:43 58219@732d2 >> 1

ありがとうございます
今はピボットテーブルで集計してその値をコピペして請求書を作っています
請求書には別のシートからコピペしたものもあります
ACCESSだと、クロス集計クエリで集計した結果と、他のテーブルのレコードを
請求書レポートに並べることになりますが、かんたんに混ぜることはできますか?

各レコードには請求書番号を付与して、再発行や確認に使う予定です
集計結果に請求書番号を付与することはできないと思いますし
請求書作成時に、大本のレコードすべてに付与することもむずかしいでしょうか?

集計結果を1つのレコードとして扱いたい場合は、一旦EXCELで入力、集計してインポートするのが
一般的でしょうか?

28

【解決】
hatena様

ありがとうございます!
おっしゃっている通りの動作が再現出来ました!
「VBAで値を更新した場合・・・」そうなのですね!?
大変勉強になりました。

今回も本当にありがとうございました!

27

再送ファイルを見てみました。

「F_受注_メイン」フォームのことだと思いましたので、そのフォームを開いて試してみました。
開いた直後は、取引先コードは未入力なので、サブフォームは操作できません。
取引先コードにコードを手入力したら、サブフォームは操作できるようになりました。
コードを削除したら、サブフォームは操作できなくなります。
メインでレコード移動して、移動先が取引先コードが未入力ならサブフォームは操作できない、入力済みなら操作できます。
問題ない動作のようです。

ただし、取引先コードの横にコマンドボタンがあり、そこから別フォームを開いて、取引コードを選択して入力できるようになっていますが、それで入力した場合、サブフォームは操作できるようになりません。
このようにVBAでテキストボックスの値を更新した場合、更新後処理は発生しないためです。
下記のように別フォームを開いた後で、更新後処理を呼び出せば、別フォームで入力したときも正常に動作するようになります。

Private Sub コマンド_取引先検索_Click()

  DoCmd.OpenForm "F_取引先マスタ_抽出_受注", , , , , acDialog
  Call 取引先コード_AfterUpdate
  
End Sub
12
りんご 2021/09/06 (月) 14:54:12 c564b@0e907

解決、おめでとうございます。
>> 7

難しそうです。

 リストボックスは、難しいけれど、便利なので、練習しておくといいですよ。
 連結列、コントロールソースの有無、列数、列幅、コード。
 抽出条件やコードやキークリック時イベントは、初めてのときは、難しいかもしれません。
[Forms]![フォームの名前]![テキストボックスの名前]
Me.リストボックス1.Column(1)
DoCmd.OpenQueryからのMe.リストボックス1.Requery
Msgbox KeyCodeからのKeyCode 32(スペースキー)
 知ってるよ、と問題なければ、やってることは、基本作業の積み上げです。
 元のテーブルを作ったら何も考えずにクエリ化、リストボックスに表示。
 絞り込めたら便利なので、テキストボックスを置いて🔑抽出条件
 選択クエリを作って絞り込み追加クエリに変更、仮テーブルに追加して別のリストボックスに表示。
 選択クエリを作って元テーブルと仮テーブルに線を引いて、更新クエリに変更、更新値に従って更新

最後に、単独主キーや複合主キーの設定は抜けていないと確認とれましたか?単独主キー、複合主キーがなければ、破綻しているので全部水の泡です。

11
チョコラブ 2021/09/06 (月) 14:27:30 1b30c@93fe9 >> 5

クエリに式を作る方法で一つのレコードだけにチェックすることができました。
その発想はなかったのでありがとうございました。

9
りんご 2021/09/06 (月) 13:12:59 c564b@0e907

>> 6

同じようにできますか?

出来たとしてもごちゃごちゃなりそうなのでイマイチですね。

26

大変失礼いたしました・・・。
再送しました。
宜しくお願いします。

8
チョコラブ 2021/09/06 (月) 12:37:50 f1313@ec441 >> 5

アドバイスありがとうございます。
試してみます。

7
チョコラブ 2021/09/06 (月) 12:36:51 f1313@ec441 >> 4

すみません。この方法は私には難しそうです....。

6
チョコラブ 2021/09/06 (月) 12:35:40 f1313@ec441 >> 3

アドバイスありがとうございます
今回、搬入完と検査完の二つを例にしてあげましたが、他にももっとあります。一部搬入完や一部検査完、不適合など全部で6つぐらいあります。それでも同じようにできますか?

進捗報告みたいなプラットフォームなので複雑なんでしょうか。

25

ファイルを見ましたが、
「T_受注」と「T_受注明細」がリンクテーブルの為、フォームを開くことができません。

ローカルテーブルに変更したものを、再度、送付してもらえませんか。

5
hiroton 2021/09/06 (月) 09:25:14 6f66f@f966d

最悪Excelのデータをリンクテーブルで読み込んでいるとかだと主キーがないこともあるんですかね


レコードソースをクエリにして主キーのようなもの: [初期ID] & "_" & [データKEY]フィールドを作って単一のフィールドでチェックできるようにしたらどうでしょう

24

hatena様

ありがとうございます。
ではファイルを送ります。
どうか宜しくお願い致します。

1
hiroton 2021/09/06 (月) 09:19:03 6f66f@f966d

ACCESSにはピボットテーブルのようなものがありませんが、ある指定した範囲や条件の集計をひとつのレコードもして扱うことはできませんか?

クロス集計クエリというものがあります。

上部に日付と名コードを配置して下部に子テーブルとして数量をいれるフィールドを配置するものだと思います

フォームを作成してテキストボックスを配置すると規定値プロパティが使えるので、VBAでこれを制御するのが分かりやすいと思います

このときに、キーボードからマウスに持ち替えなくていいように
任意のタイミングで、任意のキーを押すと、日付フィールドや名コードをアクティブにするのとはできますか?もちろんまた、数量フィールドにも戻りたいです

キー入力時というイベントがあるので、これで任意のキー入力に対して特定のコントロールをアクティブにすることができます。

また、オプションに「Enterキー入力後の動作」があるので、これを変更するとExcelと似たような動作になります。
このオプションはパソコン(インストールされたACCESS)毎の設定をデフォルトから変えることになるので、環境ごとに設定が必要です。

23

リンゴ様

「取引先コード」に入力後、ほかの部分をクリックしても同様です・・・。
色々お力添え頂きありがとうございます。

4
りんご 2021/09/06 (月) 05:27:23 c564b@0e907

ところで、これはお遊びですが
テーブル1『実テーブル』(実データ)🔑初期ID,🔑データKEY,属性,区分
テーブル2『仮テーブル』(基本空っぽ)🔑初期ID,🔑データKEY,属性,区分
 クエリ1『実クエリ』(テーブル1の選択クエリ)
 クエリ2『仮クエリ』(テーブル2の選択クエリ)
追加クエリ『実リストから仮テーブルへ』(テーブル1の追加クエリ)※実リストはそのまま。
 抽出条件:テキストボックス1、テキストボックス2
削除クエリ『仮リストから削除』(テーブル2の削除クエリ)※実リストはそのまま。
 抽出条件:テキストボックス3、テキストボックス4
更新クエリ『実テーブルと仮テーブルを内部結合』(テーブル1の更新クエリ)
 抽出条件:なし,レコードの更新:テキストボックス5

テキストボックス1『初期ID、実リストから追加クエリへ』  (非連結):
テキストボックス2『データKEY、実リストから追加クエリへ』(非連結):
テキストボックス3『初期ID、仮リストから削除クエリへ』  (非連結):
テキストボックス4『データKEY、仮リストから削除クエリへ』(非連結):

コマンドボタン1『更新ボタン』テキストボックス5『新しい更新値』(非連結):
リストボックス1『実リスト』(非連結)     リストボックス2『仮リスト』(非連結)
値集合ソース:クエリ1                                 値集合ソース:クエリ2

初期IDデータKEY属性区分初期IDデータKEY属性 区分
11あああ未定 
12いいい未定
21ううう未定
22えええ未定
31おおお未定
32かかか未定

 例えば、行を選んで半角スペースキーを押すと、選択行の初期IDとデータKEYがテキストボックスに代入、追加クエリが実行されるように。実データが絞り込まれて、仮テーブルに追加されるので、仮リストの再クエリ。

初期IDデータKEY属性区分初期IDデータKEY属性 区分
11あああ未定11あああ未定
12いいい未定21ううう 未定
21ううう未定31おおお 未定
22えええ未定
31おおお未定
32かかか未定

 更新クエリを実行すると、新しい区分値に更新。但し初期IDとデータKEYの組み合わせが同じものに限る。

3
りんご 2021/09/06 (月) 05:13:13 c564b@0e907

 単独主キーですがこんなのもあるみたいですよ。複合主キーに応用する事ができれば。
複数選択リストボックスで選択したレコードの印刷 - hatena chips
画像

 ちなみに、これはどうですか?
 コマンドボタン『ほにゃらら』を押すと、区分が未定のときは検査完、検査完のときは未定になるように。

初期IDデータKEY属性区分
11あああ未定 コマンドボタン『ほにゃらら』
12いいい検査完コマンドボタン『ほにゃらら』
21ううう未定コマンドボタン『ほにゃらら』
22えええ検査完コマンドボタン『ほにゃらら』
31おおお未定コマンドボタン『ほにゃらら』
32かかか検査完コマンドボタン『ほにゃらら』
 オプショングループ『未定🔲検査完』(『🔲未定検査完』)の場合、クエリの中に演算フィールド『ほにゃらら』(区分が未定のときは1、検査完のときは2)を追加。オプショングループのコントロールソースに演算フィールド『ほにゃらら』を設定。オプションボタン『未定』をフォーカスしたら、区分が未定、『検査完』をフォーカスしたら、区分が検査完となるようにVBA。
※レコード編集中のときは、忘れずに確定させる。
2
チョコラブ 2021/09/05 (日) 19:32:21 a1f3a@735b7 >> 1

コメントありがとうございます。そうです。
”レコードを複数選択し、該当フィールドをまとめて更新したい”です。
1レコードずつ更新する仕組みで作られているのですが、利用者からめんどくさいからまとめて更新ができないかという相談があって改修しているのですが、1レコードずつ更新する仕組みも残したまままとめて更新できるように
別に非連結チェックボックスで選択して更新できるような仕組みを作っていたんです。

チェックする仕組みは参考URLで、できたのですが、データ初期IDが同じものだと一緒にチェックされてしまうのをなんとかすれば他はうまくいきそうなんです。

1
りんご 2021/09/05 (日) 18:43:38 c564b@0e907

一つずつ変更していたが、まとめて変更したいというものです。
 要変更レコードを複数絞り込み、該当フィールドを更新したいという事はないでしょうか?
主キーという設定がなく、主キーのような働きになっています。
 担当部署に直ちに確認しましょう。
 主キーや複合主キーは設定しない、それっぽいものが代わり・・・いやいや、、、まじですか?
他部署が作っておりテーブル設計に変更を加えることができず
 相談しましょう。業務ルールで1つずつ変更になっているなら、業務ルール変更の相談が先では?

22

外部からは判断の難しい状況になっているようですね。
実際のファイルを見ないと原因究明は難しいかもしれません。

この掲示板の右カラムの一番下に「ファイル送信フォーム」があります。
そこからファイルを送信することができますので、
うまくいかない現状のファイルを送ってもらえたら、
原因がわかるかもしれません。

2

フォームは連結フォームでしょうか。非連結フォームでしょうか。
連結フォームなら、コマンドボタンのコントロールウィザードでレコード削除のマクロを作成すれば、
カレントレコードを削除できるはずです。

画像1

それでうまくいかないのなら、
フォームの構成、レコードソースのテーブル構成等、詳細な説明をしてください。

4

解決済みとのことですが、レポートの場合は、サブレポートとして埋め込むことになります。

1
りんご 2021/09/04 (土) 19:55:52 c564b@0e907

マクロにも影響するかわからないけれど、エラーメッセージの表示設定はありになっていますか?
アクション クエリのメッセージを非表示にするには - Access - ヘルプの森
画像