Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


231 / 2272 ツリー ←次へ | 前へ→

【12461】フォームの検索をするプログラムのエラー まき 14/1/10(金) 14:33 質問[未読]
【12462】Re:フォームの検索をするプログラムのエラー hatena 14/1/10(金) 14:48 回答[未読]
【12463】Re:フォームの検索をするプログラムのエラー まき 14/1/10(金) 15:09 お礼[未読]

【12461】フォームの検索をするプログラムのエラー
質問  まき  - 14/1/10(金) 14:33 -

引用なし
パスワード
   フォームの検索
既存のフォームを検索するために
フォーム上のコンボ87というコントロールを作り、そこから選ぶと該当のフォームが出る設定にしたいです。
コンボ87の値集合ソースが下記の通りになっているとします

値集合ソース:

SELECT Str(Val(Val([日付]) & Format([IDコード],"0000"))) AS 注文日, クエリA.IDコード, クエリA.日付, 部署マスタ.部署, Sum([数量]*[単価]) AS 金額の合計
FROM (クエリA INNER JOIN 部署マスタ ON クエリA.部署コード = 部署マスタ.部署コード) INNER JOIN 商品マスタ ON クエリA.商品コード = 商品マスタ.商品コード
GROUP BY Str(Val(Val([日付]) & Format([IDコード],"0000"))), クエリA.IDコード, クエリA.日付, 部署マスタ.部署
ORDER BY Str(Val(Val([日付]) & Format([IDコード],"0000")));

コンボ87の更新後処理イベントに下記のようなコードを書いています

Private Sub コンボ87_AfterUpdate()
  Dim rs As Object

  Set rs = Me.Recordset.Clone
  rs.FindFirst "[注文日] = " & Str(Nz(Me![コンボ87], 0))
  If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

すると下記のようなエラーが出てイベントが止まってしまいます

実行時エラー3070
'注文日'を有効なフィールド名、または式として認識できません

※IDコードを先頭にするとプログラムは動きますが、実はIDコードは年度ごとに一新されるため同じコードが何年分も複数であります(2010年の1、2011の1というように)そして先頭の1番である2010年のフォームが検索されてしまいます。
なのでどうしても注文日というフィールドを作ってそれで検索しないといけないのです

おかしいところをご指摘ください
よろしくお願いします

【12462】Re:フォームの検索をするプログラムのエ...
回答  hatena  - 14/1/10(金) 14:48 -

引用なし
パスワード
   >実行時エラー3070
>'注文日'を有効なフィールド名、または式として認識できません
>

コンボボックスの値集合ソースには、注文日がありますが、フォームのレコードソースに、注文日 フィールドがないのではないですか。
フォームを対象に検索するのですから、フォームのレコードソースのフィールド名を指定する必要があります。

>※IDコードを先頭にするとプログラムは動きますが、実はIDコードは年度ごとに一新されるため同じコードが何年分も複数であります(2010年の1、2011の1というように)そして先頭の1番である2010年のフォームが検索されてしまいます。
>なのでどうしても注文日というフィールドを作ってそれで検索しないといけないのです

そもそも論を言えば、
元テーブルに主キーがあればそれのフィールドを検索対象にすればいいのですがね。
演算でフィールドを合成しないとユニークにならないようなテーブル設計なら、本来はそれを見直すべきですね。

【12463】Re:フォームの検索をするプログラムのエ...
お礼  まき  - 14/1/10(金) 15:09 -

引用なし
パスワード
   ▼hatena さん:
ご回答ありがとうございます

>コンボボックスの値集合ソースには、注文日がありますが、フォームのレコードソースに、注文日 フィールドがないのではないですか。
>フォームを対象に検索するのですから、フォームのレコードソースのフィールド名を指定する必要があります。

確かにありませんでした 汗

>そもそも論を言えば、
>元テーブルに主キーがあればそれのフィールドを検索対象にすればいいのですがね。
>演算でフィールドを合成しないとユニークにならないようなテーブル設計なら、本来はそれを見直すべきですね。

あっ!!主キーあります
それを検索対象にするべきだったんですね。
なんですか・・・思案の外でした。
そもそもどこかのサイトからコピーしてきたコードをそのまま使ったので全然理解できてませんでした。

勉強になりました、そして、教えていただいた通りにしたら
ちゃんと動きました。ありがとうございました。

231 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free