|
いろいろな掲示板でいろいろな人の質問を見ていて思うんですが、
フォームとテーブルが全く別個のものであるというのを意識している人が
少ないんですよね。
よく見かけるのが、フィールドとテキストボックスを混同しているものです。
「フォームに××フィールドを配置する」など言ってみたり、
「△△テキストボックスのデータ型は日付型だ」などという表現を
よく見かけますが、いずれも間違いです。
フィールドはテーブル又はクエリの要素であり、
フォームにフィールドという概念が入り込む余地はありません。
またテキストボックスにデータ型はありません。
上記の例について正確な言い回しをすれば、
「フォームに、××フィールドをコントロールソースとするテキストボックス配置する」
「△△テキストボックスのコントロールソースたる▲▲フィールドのデータ型は日付型だ」
となります。
確かに、ウィザードでフォームを作ると、
テキストボックス名はフィールド名と同じになるので、両者を混同することはやむを得ない
とは思いますが、テキストボックス イコール フィールドだと思っていると、
どこかで行き詰まると思います。
なので、少々厳しめにレコードソースやらコントロールソースやらを聞いてみた次第です。
少し脱線しますが、テーブル(クエリ)とフォーム、
あるいはフィールドとテキストボックスの関係ですが、
テーブル(クエリ)とフォームを結び付けるのが「レコードソース」プロパティです。
レコードソースにテーブルを指定してやることで、
当該テーブルのデータをフォームで表示できるようになります。
フィールドとテキストボックスを結び付けるのが「コントロールソース」プロパティです。
レコードソースたるテーブル(クエリ)のフィールドをコントロールソースに指定してやることで、
テキストボックスに当該フィールドの値を表示できるようになります。
さて、本題です。
>> レコードソースにはどんなフィールドがありますか。
これの答えがないですね。
質問の仕方を変えると、Q顧客名1にはどんなフィールドがありますかということです。
>> コード1、コード2、コード3はテキストボックスだと思いますが、
>>それぞれのコントロールソースは何ですか。
これについても、答えがないですね。
それぞれのテキストボックスについて、
プロパティシートの「データ」タブの「コントロールソース」には、何が設定されていますか
ということです。
今回のレスは、ここで終わりにしてもいいんですが、折角コードを示してくれたので、
もう少し先まで進めたいと思います。
> DoCmd.ApplyFilter "", "[Q顧客名1]![顧客番号] = [Forms]![F顧客一覧]![顧客番号入力]"
ApplyFilterって使ったことがないのでわからないのですが、
ApplyFilterは、例えば、クエリをデータシートビューで開いているときに、
メニューからレコード、フィルタと選択して(ちなみに当方はアクセス2003です)
行う動作をマクロで行うものだと思います。
この場合、データシートビューの表示上だけでレコードを絞り込んでいるに過ぎず、
クエリ自体では何らの絞り込みもされていません。
だから、ApplyFilterを使っても、フォームでのレコードの絞り込みはできないと思います。
フォームでレコードの絞り込みを行うには、通常、
フォームの Filter プロパティと FilterOn プロパティを使います。
Filter プロパティでは、条件式を文字列として指定する必要があります。
条件式の基本形は、「フィールド名 = 値」です。
フィールドが数値型の場合は、値は何も囲いません。例えば、「数量 = 123」です。
フィールドがテキスト型の場合は、ダブルコーテーションで囲います。
例えば、「都道府県 = "青森県"」です。
VBAのコード中では、文字列であることを示すダブルコーテーションと区別するために
シングルコーテーションで値を囲います。
例えば、「strWhere = "市町村 = '長野市'"」です。
フィールドが日付時刻型の場合は、シャープで囲います。
例えば、「受注日 = #2014/12/19#」です。
条件式を2つ以上指定したい場合は、条件式を AND 又は OR でつなげた文字列にします。
例えば「数量 = 234 AND 都道府県 = "岩手県"」です。
|
|