• ベストアンサー

dlookup関数が使えない

ただいま、フォーム上のあるテキストボックスのコントロールソースに以下のような式を入れています。 「=DLookUp("[M00マスター]![個人名]","[M00マスター]","[M00マスター]![個人ID]=[K00オーナーテーブル]![個人ID]")」 このフォームは、K00オーナーテーブルがコントロールソースとなっています。 しかし、このテキストボックスには、エラーと出て、しかも、ずっと点滅し続けています。 この原因がお分かりになるかた、いませんでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>テキストボックスのrecordソースがその式であれば、 >式が判断した値が自動で表示されるのが当たり前のような気がしますが・・・ 私もそのように思いますよ。実際に、(リレーショナルの有無に関わらず)普通はそうです。なぜ、そうならないのか?そこが不思議だということです。

superwonderful
質問者

お礼

ご回答ありがとうございます。 その「そこが不思議です」の原因がわかりました! where区の値をDLookupで入れますが、その参照する値が、フォームのテキストボックスのコントロール名ではなく、そのフォームのレコードソースの値になっていました。これを、修正したらうまく出来ました。 修正前:「=dblookup("[フラグ名]","[M00フラグマスター]","[フラグID]=" & [テーブル名]![個人会社フラグID])」 修正後:「=dblookup("[フラグ名]","[M00フラグマスター]","[フラグID]=" & [txb個人会社フラグID])」 私が間違った式を入れたからでした。おさがわせしてすみませんでした。 これで、マスターとテーブルとの間にリンクをはらなくても、数値を入れただけでマスターの名称を画面に表示できるので、リレーションの設定を限りなく少なくして、ファイルの容量が大きくならないようにしたいと思います。 どうもありがとうございます。

その他の回答 (2)

回答No.2

>フォームのそのテキストボックスをRequeryしなければ値が変わりません。 >これは、通常の動作なのでしょうか? ウーン! Requeryしなければ値が変わらないような関係になぜするのか? 問題は、そこだと思います。

superwonderful
質問者

補足

つまり、それはリレーションをはってないということですか? 参照するテーブルの主キーと、フォームのレコードソースのテーブルにある外部キーとの間にリレーションをはらないと、自動的に切り替わらないのですか? 私はアクセスのことは良くわかりませんが、テキストボックスのrecordソースがその式であれば、式が判断した値が自動で表示されるのが当たり前のような気がしますが・・・うーん

回答No.1

=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])

superwonderful
質問者

補足

ご回答ありがとうございます。仰るとおり、値の取得をテキストボックスを参照すると出来ましたが、しかし、フォームのそのテキストボックスをRequeryしなければ、値が変わりません。これは、通常の動作なのでしょうか? よろしくお願いします。