- ベストアンサー
dlookup関数が使えない
ただいま、フォーム上のあるテキストボックスのコントロールソースに以下のような式を入れています。 「=DLookUp("[M00マスター]![個人名]","[M00マスター]","[M00マスター]![個人ID]=[K00オーナーテーブル]![個人ID]")」 このフォームは、K00オーナーテーブルがコントロールソースとなっています。 しかし、このテキストボックスには、エラーと出て、しかも、ずっと点滅し続けています。 この原因がお分かりになるかた、いませんでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>テキストボックスのrecordソースがその式であれば、 >式が判断した値が自動で表示されるのが当たり前のような気がしますが・・・ 私もそのように思いますよ。実際に、(リレーショナルの有無に関わらず)普通はそうです。なぜ、そうならないのか?そこが不思議だということです。
その他の回答 (2)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
>フォームのそのテキストボックスをRequeryしなければ値が変わりません。 >これは、通常の動作なのでしょうか? ウーン! Requeryしなければ値が変わらないような関係になぜするのか? 問題は、そこだと思います。
補足
つまり、それはリレーションをはってないということですか? 参照するテーブルの主キーと、フォームのレコードソースのテーブルにある外部キーとの間にリレーションをはらないと、自動的に切り替わらないのですか? 私はアクセスのことは良くわかりませんが、テキストボックスのrecordソースがその式であれば、式が判断した値が自動で表示されるのが当たり前のような気がしますが・・・うーん
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
=DLookUp("[M00マスター]![個人名]","[M00マスター]","[M00マスター]![個人ID]=[K00オーナーテーブル]![個人ID]")」 をSQL文になおすと・・・ SELECT 個人名 FROM M00マスター WHERE 個人ID=[K00オーナーテーブル]![個人ID] つまり、Where節に誤りがあるということです。 SELECT 個人名 FROM M00マスター WHERE 個人ID=1 となるように修正すれば、このエラーは回避できます。 これを、もう一度DLookup()で書けば・・・ =DLookUp("個人名","M00マスター,"個人ID=" & 1) さて、問題は、<<& 1>>の部分をいかにして実現するのか?通常は、フォーム上のテキストコントロールを参照させます。 =DLookUp("ID","A","フィールド2=" & [テキスト1])
補足
ご回答ありがとうございます。仰るとおり、値の取得をテキストボックスを参照すると出来ましたが、しかし、フォームのそのテキストボックスをRequeryしなければ、値が変わりません。これは、通常の動作なのでしょうか? よろしくお願いします。
お礼
ご回答ありがとうございます。 その「そこが不思議です」の原因がわかりました! where区の値をDLookupで入れますが、その参照する値が、フォームのテキストボックスのコントロール名ではなく、そのフォームのレコードソースの値になっていました。これを、修正したらうまく出来ました。 修正前:「=dblookup("[フラグ名]","[M00フラグマスター]","[フラグID]=" & [テーブル名]![個人会社フラグID])」 修正後:「=dblookup("[フラグ名]","[M00フラグマスター]","[フラグID]=" & [txb個人会社フラグID])」 私が間違った式を入れたからでした。おさがわせしてすみませんでした。 これで、マスターとテーブルとの間にリンクをはらなくても、数値を入れただけでマスターの名称を画面に表示できるので、リレーションの設定を限りなく少なくして、ファイルの容量が大きくならないようにしたいと思います。 どうもありがとうございます。