|
第1に、FindFirstメソッドの引数の書き方がまずいですね。
>.FindFirst [指定年度] & [指定コード] = Me!日付コード
まず、Me!に続くのは、フォーム上のコントロールの名前でなければなりません。
日付コードはクエリのフィールド名であって、コントロール名ではありません。
次に、.FindFirstメソッドの引数は、文字列でなければなりません。
上記コードでは、引数に条件式が指定されています。
条件式は、それが評価されると、True又はFalseが返るわけですが、
True又はFalseという値は文字列ではありません。
さらに、.FindFirstメソッドの引数は、条件式を文字列として指定します。
文字列とするのだから、ダブルコーテーションで括られている必要があります。
rs.FindFirst "地区ID = 123"
条件式は、通常、「フィールド名=値」という形をとります。
ただ、値のところの書き方は少しやっかいです。
フィールドが数値型ならば、
例えば「会員ID = 4567」のように何も括りませんが、
テキスト型ならば、例えば「都道府県 = "長野県"」のように
ダブルコーテーションで括り、
日付型ならば、例えば「受注日 = #2012/12/29#」のようにシャープで括ります。
文字列としてダブルコーテーションで括られたものの中で、
さらにダブルコーテーションで括る必要がある場合、
内側のダブルコーテーションは、ダブルコーテーションの二重使いとします。
"市町村 = ""栄村"" "
条件式の値として、コントロールの値を使う場合、
コントロール名を文字列に含ませてはいけません。
コントロール名はダブルコーテーションの外に出す必要があります。
例えば、「誕生日」が日付型のフィールド名、
「txt生年月日」がテキストボックス名だとすると、
"誕生日=#" & txt生年月日.Value & "# "
とします。
なお、コントロールのValueプロパティは、
これを省略する書き方する人が大部分ですが、
私は、特に初級者は、省略してはいけないと思います。
省略しないことにより、オブジェクトとプロパティの関係を
より意識することになりますし、
数か月後にコードを見直したとき、「.Value」が付いていれば、
それが変数ではなく、オブジェクトだということが一目でわかります。
フィールドのデータ型により条件式「フィールド名=値」における値の書き方が
異なるわけですが、問題は、「日付コード」フィールドが何型のフィールドなのかということです。
これは自分で考えてみてください。
ヒントは、&演算子です。
第2に、FindFirstメソッドを実行しただけでは、
その結果はフォームには表示されません。
FindFirstメソッドは、見つかったレコードを
レコードセットにおけるカレントレコードにするだけです。
FindFirstメソッドの結果をフォームに反映させるためには、
フォームのカレントレコードが
レコードセットのカレントレコードとなるようにする、
つまり、フォームとレコードセットを同期させる
という操作が必要になります。
これについては、BookMarkプロパティを調べてみてください。
第3に、蛇足ですが、年とコードから検索したいという場合、
普通は、日付コードのようなフィールドを設けることはしません。
普通は、FindFirstメソッドの引数たる条件式に複数の条件式を入れ込みます。
rs.FindFirst "都道府県 = ""長野県"" AND 受注日 = #2012/12/29# "
|
|