Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Access 2007)
フォームのコンボボックスからクエリで抽出
投稿日時: 18/01/07 20:27:16
投稿者: EMU-GK

フォームに、『日付』と『荷主名』があります。
 
・フォーム名 集計作成メニュー
・日付    txt_Ymd  (整数型)
・荷主名   cmb_Ninusi (テキスト型)
 
荷主名はコンボボックスで、値集合ソースを
SELECT 荷主名, 主キー
FROM 荷主マスター
としています。
 
このフォームにコマンドボタンを設置して、更新クエリを実行したいところです。
クエリ内容は、テーブルに設置したYES/NO型の操作です。
現在、クエリのSQL文に、次のように書いています。
 
UPDATE T_受注データ
SET 出力済 = -1
WHERE 日付 = Nz(forms!F_集計作成メニュー!txt_Ymd) AND 荷主名 = 'Nz(forms!F_集計作成メニュー!cmb_Ninushi.column(0))'
 
荷主名を直接入力すると目的通りのことができるのですが、上記では、
”0件のレコードが更新されます。”
となり、構文エラーは出ないのですが、荷主名を読み取れていないようです。
試しにcolumnの値を変えてみたり、cmb_Ninusiのみにしてみたのですが、同じでした。
 
フォームのコンボボックスから値を引っ張るには、どうすればよいでしょうか?
よろしくお願いします。

回答
投稿日時: 18/01/07 20:39:44
投稿者: hatena
投稿者のウェブサイトに移動

EMU-GK さんの引用:
UPDATE T_受注データ
SET 出力済 = -1
WHERE 日付 = Nz(forms!F_集計作成メニュー!txt_Ymd) AND 荷主名 = 'Nz(forms!F_集計作成メニュー!cmb_Ninushi.column(0))'

 
' が不要です。
 
WHERE 日付 = Nz(forms!F_集計作成メニュー!txt_Ymd) AND 荷主名 = Nz(forms!F_集計作成メニュー!cmb_Ninushi.column(0))
 
 
'で囲むと文字列になりますので、「Nz(forms!F_集計作成メニュー!cmb_Ninushi.column(0))」という文字列を検索していることになります。
 
試しに、荷主名 に
Nz(forms!F_集計作成メニュー!cmb_Ninushi.column(0))
と入力して検索するとそのレコードが抽出されるはずです。

投稿日時: 18/01/07 21:57:09
投稿者: EMU-GK

hatena さんの引用:

' が不要です。
〜〜〜〜〜〜〜〜〜〜
試しに、荷主名 に
Nz(forms!F_集計作成メニュー!cmb_Ninushi.column(0))
と入力して検索するとそのレコードが抽出されるはずです。

 
hatenaさん、ご返信ありがとうございます。
ご指摘通りやってみたのですが、
”式に未定義関数Nz(forms!F_集計作成メニュー!cmb_Ninushi.column(0))があります”
となり、実行できませんでした。
 
何か別の手段はないものでしょうか?

回答
投稿日時: 18/01/08 10:46:48
投稿者: hatena
投稿者のウェブサイトに移動

EMU-GK さんの引用:
ご指摘通りやってみたのですが、
”式に未定義関数Nz(forms!F_集計作成メニュー!cmb_Ninushi.column(0))があります”
となり、実行できませんでした。

 
サンプルを作成して、実験してみました。
クエリでは、column は使用できないようですね。
 
cmb_Ninushi の連結列を 1 にして([荷主名]と連結させる)、クエリは下記のようにしてください。
 
UPDATE T_受注データ 
SET 出力済 = -1 
WHERE 日付 = Nz(forms!F_集計作成メニュー!txt_Ymd) AND 荷主名 = Nz(forms!F_集計作成メニュー!cmb_Ninushi) 

 
ただし、基本的にテーブルの設計が間違ってますね。
トランザクションテーブルの外部キーはマスターテーブルの主キーにしないとだめです。
 
荷主マスター
※荷主コード
 荷主名
 
T_受注データ
※受注データNo
 荷主コード
 日付
 出力済
 ・・・
 ・・・
 
こうして、cmb_Ninushi コンボボックスは、下記にように設定します。
 
値集合ソース SELECT 荷主コード, 荷主名 FROM 荷主マスター;
連結列 1
列数 2
列幅 0cm
 
これで、コンボボックスの表示は、荷主名ですが、格納れている値は、荷主コードになります。
 
更新クエリは、下記のようになります。
 
UPDATE T_受注データ 
SET 出力済 = -1 
WHERE 日付 = Nz(forms!F_集計作成メニュー!txt_Ymd) AND 荷主コード = Nz(forms!F_集計作成メニュー!cmb_Ninushi) 

投稿日時: 18/01/09 08:48:15
投稿者: EMU-GK

hatena さんの引用:

サンプルを作成して、実験してみました。
クエリでは、column は使用できないようですね。
〜〜〜〜〜〜〜〜〜〜
ただし、基本的にテーブルの設計が間違ってますね。
トランザクションテーブルの外部キーはマスターテーブルの主キーにしないとだめです。
〜〜〜〜〜〜〜〜〜〜
更新クエリは、下記のようになります。
 
UPDATE T_受注データ 
SET 出力済 = -1 
WHERE 日付 = Nz(forms!F_集計作成メニュー!txt_Ymd) AND 荷主コード = Nz(forms!F_集計作成メニュー!cmb_Ninushi) 

 
hatenaさん
わざわざ実験までして下さり、本当にありがとうございます。
おかげさまで実行できました。
 
ただ、うまく説明できないんですが、1つの荷主に対して複数の荷主コードが存在します。
例ですが、5つの荷主に10のコードがあるのです。
それを荷主ごとにまとめたいというのも狙いの1つでした。
ですので、荷主マスターテーブルは、
 
荷主コード(主キー), 荷主名, ・・・
 
としていて、コンボボックスの値集合ソースで
SELECT 荷主名, 荷主コード
と、順番を入れ替えてみたのですが、ダメだったようですね><
 
もしかしたら、連結列を2にすれば解決したのかもしれませんが、
今回は最初のSQL文をVBAに書き、DoCmdを使うことで解決できました。
 
これだけお手数をおかけしたにも関わらず、申し訳なく思いますが、
今後の参考になったことは確かです。
本当にありがとうございました。