• ベストアンサー

ACCESSでDLookupがうまく使えません。

アクセス初心者です。 行き詰っているので、どうか教えてください。 医療事務をしていますがアクセスで管理できないものかと作り始めました。 tbl薬剤等製品のテーブルに 製品名:クスリA 製品番号:ABC123 販売元:あいう社 などがあります。 frm接種記録のフォーム作り、 フォーム上で製品番号から、tbl薬剤等製品の販売元を抽出してテキストボックスに代入したいのですが、 DLookup("[販売元]","tbl薬剤等製品","[製品番号] = Forms![frm接種記録]![製品番号]") としたのですが、うまくいきません。 どうしたら良いのでしょうか?

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

  • ベストアンサー
  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.6

補足拝見しました。 >frm接種記録を開き、製品番号をABC123と選択した状態でテスト >? Forms![frm接種記録]![製品番号] >で実行すると、クスリA が表示されます。 ↑ここがまず問題で、ABC123と選択したらABC123と表示されないとおかしいですよね?また、 >コンボボックス:製品番号の >値集合タイプは、テーブル/クエリ >値集合ソースは、SELECT tbl薬剤等製品.製品名, tbl薬剤等製品.製品番号 FROM tbl薬剤等製品 ORDER BY [製品番号]; >になっています。 ↑このソースで製品番号が表示されるということは、「列幅」が「0;10」のように、先頭が0になっていて、 「連結列」が「1」になっていると思われますが、いかがですか?もしそうなら、 「連結列」を「2」にすれば、コンボボックスの値としては製造番号を持ってくるようになります。 製品名を使っていないなら、「値集合ソース」を、 SELECT tbl薬剤等製品.製品番号 FROM tbl薬剤等製品 ORDER BY [製品番号]; にして、「列幅」を「10」のようにして、「連結列」を「1」にしてもいいですね。 要するに、 表示している列(列数と列幅で決まります)と連結列(コンボボックスの値とする列)が一致していない のが原因だと思います。 頑張ってください(^o^)丿

kanames
質問者

お礼

解決しました。 tbl薬剤等製品の製品番号にインデックスを付けていなかったのが原因でした。 frm接種記録の[製品番号]コンボボックスの値がおかしかったようで、tbl薬剤等製品の製品番号にインデックスを付けたあとにコンボボックスを作り直してみたら 値集合ソースが、 SELECT tbl薬剤等製品.製品名, tbl薬剤等製品.製品番号 FROM tbl薬剤等製品 ORDER BY [製品番号]; ↓ SELECT tbl薬剤等製品.製品番号 FROM tbl薬剤等製品; となり、tbl薬剤等製品.製品名, の部分が消えてました。 この状態で、 DLookup("[販売元]","tbl薬剤等製品","[製品番号] ='"& Forms![frm接種記録]![製品番号] &"'") と実行したら、うまくできました。 インデックスを付けることは恐らく当たり前のことなのでしょうが、何分初心者なものでお許し下さい。 お騒がせしました。 回答をしてくださった方、ありがとうございます。

その他の回答 (5)

  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.5

>DLookupの行が赤字になり、コンパイルエラーが出てしまいます。 どうすれば良いのでしょうか? Dlookupは関数なので値をどこかに入れないといけません。 XXXX = DLookup("[販売元]","tbl薬剤等製品",strCiteria) としなければだめです。 >"[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'"ではNullになってしまいます。 Private Sub 製品番号_Change()  MsgBox [製品番号] End Sub にして、値がセットされているか確認してみては?

kanames
質問者

お礼

解決しました。 tbl薬剤等製品の製品番号にインデックスを付けていなかったのが原因でした。 frm接種記録の[製品番号]コンボボックスの値がおかしかったようで、tbl薬剤等製品の製品番号にインデックスを付けたあとにコンボボックスを作り直してみたら 値集合ソースが、 SELECT tbl薬剤等製品.製品名, tbl薬剤等製品.製品番号 FROM tbl薬剤等製品 ORDER BY [製品番号]; ↓ SELECT tbl薬剤等製品.製品番号 FROM tbl薬剤等製品; となり、tbl薬剤等製品.製品名, の部分が消えてました。 この状態で、 DLookup("[販売元]","tbl薬剤等製品","[製品番号] ='"& Forms![frm接種記録]![製品番号] &"'") と実行したら、うまくできました。 インデックスを付けることは恐らく当たり前のことなのでしょうが、何分初心者なものでお許し下さい。 お騒がせしました。 回答をしてくださった方、ありがとうございます。

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.4

蛇足します。 文字列定数を表すには、「"」と「"」または「'」と「'」で値を囲みます。 例えば「ABC123」を検索する場合だったら、 "[製品番号] = 'ABC123'" と書くわけです。文字列を「'」と「'」で囲んで記述するわけですね。 今、Forms![frm接種記録]![製品番号] の中身は「ABC123」なので、それを「'」と「'」で囲む必要があるわけです。 ちなみに、製品番号が数値フィールドの場合は、囲む必要がないので "[製品番号] = " & Forms![frm接種記録]![製品番号] となります。 参考になれば幸いです。 頑張ってくださいヽ(^。^)ノ

kanames
質問者

お礼

解決しました。 tbl薬剤等製品の製品番号にインデックスを付けていなかったのが原因でした。 frm接種記録の[製品番号]コンボボックスの値がおかしかったようで、tbl薬剤等製品の製品番号にインデックスを付けたあとにコンボボックスを作り直してみたら 値集合ソースが、 SELECT tbl薬剤等製品.製品名, tbl薬剤等製品.製品番号 FROM tbl薬剤等製品 ORDER BY [製品番号]; ↓ SELECT tbl薬剤等製品.製品番号 FROM tbl薬剤等製品; となり、tbl薬剤等製品.製品名, の部分が消えてました。 この状態で、 DLookup("[販売元]","tbl薬剤等製品","[製品番号] ='"& Forms![frm接種記録]![製品番号] &"'") と実行したら、うまくできました。 インデックスを付けることは恐らく当たり前のことなのでしょうが、何分初心者なものでお許し下さい。 お騒がせしました。 回答をしてくださった方、ありがとうございます。

kanames
質問者

補足

度々ありがとうございます。 "[製品番号] = 'ABC123'" にするとできるのですが、 "[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'" ではNullになってしまいます。 どうしてでしょうか・・・?(><;) ちなみに、frm接種記録の[製品番号]はコンボボックスで、 コンボボックス:製品番号の 値集合タイプは、テーブル/クエリ 値集合ソースは、SELECT tbl薬剤等製品.製品名, tbl薬剤等製品.製品番号 FROM tbl薬剤等製品 ORDER BY [製品番号]; になっています。 うまくいかない理由にこれも関係あるのでしょうか?

  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.3

条件が長くなると醜くなるので、文字列の変数にすることも出来ますよ。 Dim strCiteria as string strCiteria = "[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'" DLookup("[販売元]","tbl薬剤等製品",strCiteria)

kanames
質問者

補足

回答ありがとうございます。 Private Sub 製品番号_Change() Dim strCiteria As String strCiteria = "[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'" DLookup("[販売元]","tbl薬剤等製品",strCiteria) End Sub という感じではダメですよね? DLookupの行が赤字になり、コンパイルエラーが出てしまいます。 どうすれば良いのでしょうか?

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

DLookup("[販売元]","tbl薬剤等製品","[製品番号] ='"& Forms![frm接種記録]![製品番号] &"'") ですね。 表示するのがfrm接種記録上ならForms![frm接種記録]!は省略またはMe!に置き換えできます。

kanames
質問者

お礼

解決しました。 tbl薬剤等製品の製品番号にインデックスを付けていなかったのが原因でした。 frm接種記録の[製品番号]コンボボックスの値がおかしかったようで、tbl薬剤等製品の製品番号にインデックスを付けたあとにコンボボックスを作り直してみたら 値集合ソースが、 SELECT tbl薬剤等製品.製品名, tbl薬剤等製品.製品番号 FROM tbl薬剤等製品 ORDER BY [製品番号]; ↓ SELECT tbl薬剤等製品.製品番号 FROM tbl薬剤等製品; となり、tbl薬剤等製品.製品名, の部分が消えてました。 この状態で、 DLookup("[販売元]","tbl薬剤等製品","[製品番号] ='"& Forms![frm接種記録]![製品番号] &"'") と実行したら、うまくできました。 インデックスを付けることは恐らく当たり前のことなのでしょうが、何分初心者なものでお許し下さい。 お騒がせしました。 回答をしてくださった方、ありがとうございます。

kanames
質問者

補足

回答ありがとうございます。 ご指摘通りにやってみましたが、うまくいきません。 違う箇所が悪いのでしょうか?(><;) ■イミディエイトでテスト (frm接種記録を開き、製品番号をABC123と選択した状態でテスト) ? Forms![frm接種記録]![製品番号] で実行すると、クスリA が表示されます。 ? DLookup("[販売元]","tbl薬剤等製品","[製品番号] = 'ABC123'") で実行すると、あいう社 が表示されます。 ↑ここまではOKでしたが、 ? DLookup("[販売元]","tbl薬剤等製品","[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'") として実行すると、 null と言う結果になってしまいます。 どうしたら良いのでしょうか?

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.1

DLookup("[販売元]","tbl薬剤等製品","[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'") これで大丈夫かな。 頑張ってくださいヽ(^。^)ノ

kanames
質問者

補足

回答ありがとうございます。 ご指摘通りにやってみましたが、うまくいきません。 違う箇所が悪いのでしょうか?(><;) ■イミディエイトでテスト (frm接種記録を開き、製品番号をABC123と選択した状態でテスト) ? Forms![frm接種記録]![製品番号] で実行すると、クスリA が表示されます。 ? DLookup("[販売元]","tbl薬剤等製品","[製品番号] = 'ABC123'") で実行すると、あいう社 が表示されます。 ↑ここまではOKでしたが、 ? DLookup("[販売元]","tbl薬剤等製品","[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'") として実行すると、 null と言う結果になってしまいます。 どうしたら良いのでしょうか?

関連するQ&A

  • 【ACCESS】フォーム上で検索して複数代入するには?

    ACCESS2003、初心者です。 医療事務のデータベースを作っています。 tbl薬剤等製品のテーブルに 製品番号、製品名、販売元、製造番号 などがあります。 フォーム上でコンボボックス(製品番号)から、tbl薬剤等製品の製品名、製造元、販売元、製造番号を抽出してテキストボックスに代入したいのです。 下記のようなコードで代入できたのですが、これだと処理が重い気がします。スマートなコードじゃないですよね? Private Sub 製品番号_Change() [製品名].Value = DLookup("[製品名]", "tbl薬剤等製品", "[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'") [製造元].Value = DLookup("[製造元]", "tbl薬剤等製品", "[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'") [販売元].Value = DLookup("[販売元]", "tbl薬剤等製品", "[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'") [製造番号].Value = DLookup("[製造番号]", "tbl薬剤等製品", "[製品番号] = '" & Forms![frm接種記録]![製品番号] & "'") End Sub もっと簡単に代入できるコードの書き方はありますでしょうか?

  • アクセスのDLOOKUPについて

    DLOOKUPについて質問です。入力フォームにて製品番号を入れると製品名が出るようにして入力を楽にしたつもりでした。その方法はコントロールソースに=DLooKUP("品名","部番一覧表","部番='"&[部番]&"'")と入力しました。これは他の相談室の過去ログから拾いました。が、しかしテーブルの品名が空欄なんです。入力フォームにはちゃんと出ているのにどうしてテーブルに反映されないのでしょうか?スーパー初心者で何とかここまでたどり着きました。どうか教えてください、宜しくお願いします。

  • Access2000のDLOOKUPについて

    Access2000にて収支管理のDBを作成中です。 フォームのDLOOKUPの設定についてお聞きしたいのですが、 テーブル 「00_Account code」に 「Account code」と「Account code テキスト」があります。 これを 「01_収支テーブル入力_フォーム」にて「Account code」入力時に「00_Account code」テーブルから「Account code テキスト」抽出しようと思い下記のような式を入れています。 =DLookUp("[Account code テキスト]","[00_Account code]","[Account code] =[Forms]![01_収支テーブル入力_フォーム]![Account code] ") しかしフォームにて[Account code]を入力してエンターをしても表示されず、一度フォームを閉じてから再度開くと表示されるという現象におちいっています。 これを入力→エンター時に表示させる方法はありますでしょうか? 何かの設定かと思うのですが・・・ぶつかっています。 どなたかお教え願えると助かります。よろしくお願いいたします。

  • AccessのDlookup関数のエラー

    【Access2003】 dlookup関数について教えてください。 やろうとしていることは、ある商品について任意の日付の時点での数量を表示したく、 練習として、 DLookup("[数量]", "t_商品情報", "[品番] = '"& "1001" & "' and [日付] = #" & "2007/12/17" & "#") と記述したときには正常な値が表示されました。 その後、「品番」と「日付」をフォーム上のテキストボックスで任意の値を入力したいと思い、下記のように書き直しました。 DLookup("[数量]", "t_商品情報", "[品番] = '"& "[Forms]![フォーム1]![txt品番]" & "' and [日付] = #" & "[Forms]![フォーム1]![txt日付]" & "#") フォームのテキストボックスにそれぞれ値を入力したところ、「日付の構文エラー」となってしまいました。 勉強不足なのでしょうか、原因がわからず困っております。 お詳しい方のアドバイスをお待ちしております。宜しくお願い致します。

  • アクセス DLookUpについて

    職員番号入力後、自動で部署コードを入力できるようにしたいのですが、このアクセスのフォームで、正常に動くフォームと動かないフォームがあり困っております。どこが悪いか御教示お願いできませんでしょうか。 -------------------------------------------------------- 使用テーブル T_職員名簿 : ID、氏名漢字、氏名カナ、部署コード、部署名 イベントプロシ―ジャ内容 Private Sub 職員番号_AfterUpdate() Me.[部署コード] = DLookup("部署コード", "T_職員名簿", "職員番号= " & Me![職員番号] & "") End Sub エラー内容 イベントプロパティに指定した式更新後処理でエラーが発生しました。 --------------------------------------------------------

  • 【ACCESS】リストボックスに抽出してからテキストボックスに代入するには?

    ACCESS2003、初心者です。 医療事務のデータベースを作っています。 予約フォーム(frm予防接種予約)を作っていますが、次の(1),(2)の作業がうまくできなくて困っています。 (1)リストボックスへの抽出(検索ボタンを押すまではリストボックスの中は空の状態) frm予防接種予約のフォームで非連結テキストボックスに生年月日を入力して、検索ボタンを押す ↓ tbl患者個人票テーブルの生年月日と一致するレコード(氏名や住所)をリストボックスに表示させたい。 (2)表示されたリストボックスの中のレコードをクリックすると、そのレコードが氏名や住所に代入される。 一連の作業をfrm予防接種予約フォーム上で行いたいのですが、どのようにしたら良いのでしょうか?

  • Access DLOOKUPについて

    Access DLOOKUPについて こんにちは。Access2010でのDlookupについてお教えください。 ■注文テーブル オーダーID,商品コード,数量,お店番号 001,A01,1,お店1号 001,A02,5,お店1号 002,B01,3,お店2号 002,B02,3,お店2号 ※同一オーダーIDで商品コードが重複する事は無 ■確認用注文テーブル 商品コード,数量,お店番号 A01ですよ,1お店1号 B02です,3,お店2号 ※なんと、オーダーIDがありません。さらに商品コードに変な文字列も入っています。 ■やりたい事 フォームに「判定」というテキストボックスを配置しました。 コントロールソースで以下の条件にあっているなら○、あっていないなら×と表示したいです。 ○注文テーブル.商品コードと確認用注文テーブル.商品コードを比較。 注文テーブル.商品コードのデータが確認用注文テーブル.商品コードに含まれていること。 ○注文テーブル.数量と確認用注文テーブル.数量がイコールであること。 ○注文テーブル.お店番号と確認用注文テーブル.お店番号がイコールであること。 これらを満たしていれば、○、満たしていなければ×と表示したいです。 Dlookupでなくても、何か他に方法がありましたらお教えください。 宜しくお願いします。

  • 【Access97】DLookupについて

     Access97を使って今、データベースを作成していますが、行き詰まってしまいました。  まず大まかな構成を書くと… <テーブル> 【○○班データ】テーブル ・「データナンバー」フィールド ・「部材名」フィールド ・「部材ナンバー」フィールド ・「部材コード」フィールド 【部材マスター】テーブル ・「部材名」フィールド ・「部材ナンバー」フィールド ・「部材コード」フィールド <クエリー> 【○○班データクエリー】 「○○班データ」テーブルを元に選択クエリーを作成(全てのフィールド) <フォーム> 上記のクエリーを元に作成。 ここからが質問内容になるのですが、「部材名」をコンボボックスで入力したら、Dlookup関数をテキストボックスのコントロールソースに記述して「部材ナンバー」と「部材コード」が表示されるようにはできました。 ですが、フォームで表示された「部材ナンバー」や「部材コード」がクエリーやテーブルには反映(入力)されておらず、どうしたらいいか手詰まりになっています。 もし、対処法を御存知の方がいらっしゃったら、是非とも御教示をお願いします。 念の為にテキストボックスのコントロールソースで記述したDLookup関数を書いておきます。 「部材ナンバー」の呼び出し =DLookUp("[部材ナンバー]","[部材マスター]","[部材名]='" & [部材名] & "'") 「部材コード」の呼び出し =DLookUp("[部材コード]","[部材マスター]","[部材名]='" & [部材名] & "'")

  • Access DLOOKUP使用して重複入力を可能にする方法

    Accessのフォームで個人データを入力するよう、色々設定している最中ですが、 重複データを残したいのに、 エラー等出て、どうも上手くいきません・・・>< Accessに詳しい方、どうか教えてください!!!!!!! <現在の設定> ---テーブル「個人リスト」--- ・個人ID(オートナンバー) ・姓 ・名 ・生年月日 ・前回の記録 フォームにてじゃんじゃか入力中に、以前に入力した同一の姓・名・生年月日の人を、 下記設定でわかるようにしました。 (ちなみにこれはある方から教えていただいたものです) ---フォーム「個人リストフォーム」--- (更新前処理:生年月日にて) work1 = DLookup("個人ID", "個人リスト", "生年月日 = #" & Forms!個人リストフォーム!生年月日 & "#" & " AND 姓 = '" & Forms!個人リストフォーム!姓 & "' AND 名 = '" & Forms!個人リストフォーム!名 & "'") If IsNull(work1) Then '重複データが無い場合は NULLが返ります else  msgbox("個人ID=" & work1 & "に同じ人がいます")  end if これで、同一の人がいたらメッセージで以前入力時の個人IDが出ます。 *私のしたいこと* (1)同一の人は新個人IDを取って入力したい。 (2)上記メッセージが出たら、その場で前回のデータ(フォーム)を閲覧できるようにしたい。   ※現在、閲覧しようとするとエラーが出ます。   エラー「インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。      重複の値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください」   ※一度エラーが出ると、入力した姓・名・生年月日を書き換えようとしても、同じエラーが出て書き換えできない。。 (3)できることなら、以前の入力個人IDを「前回の記録」に反映させるようにしたい。   例)前回の記録 [ID858、ID1085] ※何度でも・・・ (4)できることなら!(2)前回のデータ(フォーム)が別画面でぱっと出るようにしたい!  こんな無謀?な希望をかなえてくれる方、是非是非ご伝授ください! よろしくお願いいたします!

  • アクセス 名前のつけ方について。

    アクセスのテーブル、クエリ、フォーム…とオブジェクトがありますが、例えばテーブルだったら「T_・・・」とか「Tbl_・・・」フォームだったら「F_・・・」とか「frm_・・・」クエリも「qry_・・・」とか「sp_・・・」あれは何を基準に皆さん名前をつけているのでしょうか?他にどんな頭だしがありますか?ご存知の方いましたら教えてください。宜しくお願いします。

専門家に質問してみよう