• ベストアンサー

AccessのDlookup関数のエラー

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

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

#は必要です 値をとりたいもの >[Forms]![フォーム1]![txt品番] 等は""の外に出さないとそういう文字列を指定したことになってしまいますよ DLookup("[数量]", "t_商品情報", "[品番] = '"& [Forms]![フォーム1]![txt品番] & "' and [日付] = #" & [Forms]![フォーム1]![txt日付] & "#")

sui-dream
質問者

お礼

ありがとうございました!! きちんと表示できました。単純に置き換えて記述してしまったので…。 本当に助かりました。

その他の回答 (2)

  • yatoaa
  • ベストアンサー率30% (110/362)
回答No.2

# が不要なのでは。(2つとも) [txt日付] はそもそもdate属性なのでは?

noname#140971
noname#140971
回答No.1

以下のDBLookup関数を標準モジュールに登録して試してみて下さい。 そうすれば、エラーの原因は一目瞭然かと思います。 Public Function DBLookup(ByVal strField As String, _             ByVal strTable As String, _             Optional ByVal strWhere As String = "", _             Optional ByVal ReturnValue = "") As Variant On Error GoTo Err_DBLookup   Dim DataValue   Dim strQuerySQL As String   Dim rst       As ADODB.Recordset   Set rst = New ADODB.Recordset   strQuerySQL = "SELECT " & strField & " FROM " & strTable   If Len(strWhere) > 0 Then     strQuerySQL = strQuerySQL & " WHERE " & strWhere   End If   MsgBox strQuerySQL   With rst          .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       .MoveFirst       DataValue = .Fields(0)     End If   End With Exit_DBLookup: On Error Resume Next   rst.Close   Set rst = Nothing   DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)   Exit Function Err_DBLookup:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _      "・Err.Description=" & Err.Description & Chr$(13) & _      "・SQL Text=" & strQuerySQL, _      vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBLookup End Function <テスト1> DBLookup("[数量]", "t_商品情報", "[日付]=#" & "[Forms]![フォーム1]![txt日付]" & "#") SELECT 文の実行時にエラーが発生しました。(DBLookup) ・Err.Description=クエリ式 '[日付]=#[Forms]![フォーム1]![txt日付]#'の日付の構文エラーです。 ・SQL Text=SELECT ID FROM 日付 WHERE 日付=#[Forms]![フォーム1]![txt日付]# <テスト2> DBLookup("[数量]", "t_商品情報", "[日付]=#" & [Forms]![フォーム1]![txt日付] & "#") この場合、次のような SELECT文が作成されることが判ります。 SELECT [数量] FROM t_商品情報 WHERE [日付]=#2007/01/01#

sui-dream
質問者

お礼

ご丁寧にありがとうございます。 No.3の方のご回答を拝見して解決してしまったのですが、これも時間が出来たときに試してみます。 こういう風にエラーの原因を探る方法があるのですね。 勉強になりました。

関連するQ&A

  • Access2000 DLookup関数の使い方

    色々試してみたのですがわからないので質問させていただきます。 フォーム/サブフォームを作っています。 サブフォームにある商品コード(コンボボックス)を入力すると、同じサブフォームにある単位、単価に商品台帳テーブルの値(単位、単価)を持ってくるようにしたつもりなのですが・・・。 商品コードの更新処理後に以下のコードを記述したのですが、うまく動きません(エラーは出ない)。 Me![単価] = DLookup("[単価]","商品台帳","[商品コード] = [Forms]![フォーム]![サブフォーム]![商品コード]") どこが悪いか教えていただけないでしょうか?

  • Access DLookUp関数について

    DLookup関数を使用して、フォーム上にテーブルの値を返したいと思い、 試行錯誤をしたのですが、思うように値が返されません。。。 どうかお力添え下さいますようお願い致します。 「得意先&出荷先」テーブルに「得意先コード」「名称」項目を設け、 「詳細入力」フォームの「得意先コード」に値を入力をすると、 「得意先名称」項目に、テーブルの「名称」項目の値を返す動作を設定したいのです。 私は、下記のように書きましたが、「#Type!」と表示され、思うような動作をしません。 =DLookUp("[名称]","[得意先&出荷先]","[得意先コード] = '" & [Forms]![不具合詳細入力フォーム]![得意先名称] & "'") どこがおかしいのでしょうか?? またDLookUp以外でも、もし上記のような動作を実現させる方法がありましたら、ぜひご教授ください! 宜しくお願いいたします。

  • DLookUp関数を使ったACCESSの令和表示2

    [やりたいこと] 同じテキストボックスで「西暦」と「曜日」をマウスのクリック動作で変更表示させ、、「和暦(令和02年)」は別テキストボックスで関数を使って表示させたい。 「=DLookUp("和暦","T_和暦マスタ","開始年月日<= #"&txt日付&"#and 終了年月日>=#"&txt日付&"#")」使って表示させたい。 [やってみたこと] ・既存テキストボックスの名前変更:名前「txt日付」 ・テキストボックスの追加:名前「txt和暦日付」 ・データタブ:コントロールソース  「=DLookUp("和暦","T_和暦マスタ","開始年月日<= #"&txt日付&"#and 終了年月日>=#"&txt日付&"#")」※参照先はテーブル「T_和暦マスタ」 「結果」追加のテキストボックスに令和表示「令和02年」はされますが、既存テキストボックスが「西暦」に固定されクリックしても曜日の表示もできません。 [現在の設定] ・テキストボックス:(名前:年月日曜日)コントロールソース「=Date()」 ・イベントのクリック時に「以下の記述」を設定 Private Sub テキスト11_Click() With Me.ActiveControl Select Case .Tag Case 1 .Tag = 2 .Format = "gggee\年mm\月dd\日" Case 2 .Tag = 3 .Format = "aaaa" Case Else .Tag = 1 .Format = "yyyy/mm/dd" End Select End With End Sub [補足情報] [令和対応紹介 ウェブサイト] 新元号は「令和」|マイクロソフトのパッチに頼らずにAccessで新元号を表示する方法 https://www.ait-labo.com/excel_access/2805/ 以上ですが、宜しくお願いします。

  • DLookUp関数を使ったACCESSの令和表示

    [やりたい事と背景] ACCESS2007で和暦を令和表示させたい。 現在、新元号の対処方法「ACCESS2007の為」としてテキストボックスのプロパティー(書式)に「”令和○年”」と記載し、データタブのレコードソースに「=Date()」としてしています。年に一回とは言え自動で対処できないものかと考えて居りました。昨日ですがWEBにて対処方法が記載されたサイト「ページ」を見つけました。早速、試してみましたところ「指定した式に不適切な日付の値が含まれています。」とのアラートが出て設定完了に至りませんでした。私には問題が「式」なのか「式」ならどこに問題があるのかすら分かりません。アドバイスをお願いできますでしょうか。 [令和対応紹介 ウェブサイト] 新元号は「令和」|マイクロソフトのパッチに頼らずにAccessで新元号を表示する方法 https://www.ait-labo.com/excel_access/2805/ [ウェブでの紹介と対応方法] 1,テーブル内のフィールドは次の3つとシンプルです。「IDは必要ないのでしょうか?(私はID無しで作りました)」 ・開始年月日(日付/時刻型) ・終了年月日(日付/時刻型) ・和暦(短いテキスト) 自身の対応:西暦・和暦対応マスタを作る。名前:履歴マスタ「私は T_履歴マスタとしました。(修正時に探しやすい為)」 2,和暦への変換はDLookupで取得 フォームには、日付を表示するテキストボックス(txt日付)と和暦日付を表示させるテキストボックス(txt和暦日付)を用意します。 「和暦日付付用のフィールドのコントロールソースには次のような設定を行います(コピペして終了させ様とするとエラーアラートがでる)」 =DLookUp(“和暦”,”和暦マスタ(T_履歴マスタに変更)”,”開始年月日 <= #” & txt日付 & “# and 終了年月日 >= #” & txt日付 & “#”) & Format(txt日付,”mm\年dd\日”) 以上ですが、宜しくお願いします。

  • アクセス Dlookup関数の表示が更新されない

    access2000です。 データ入力用のフォームでDlookupを使い、あるテキストボックスに商品番号を入力すると、隣のテキストボックスに、商品番号からテーブルを検索して該当する商品名を表示するようにしました。 商品番号を入力するテキストボックスには更新後処理でリクエリするマクロを設定しています。 ところが、番号を入力してenterを押し次のテキストボックスにカーソルが移動しても商品名が出るはずのテキストボックスに何も表示されません。 しかし、クリックして商品名のテキストボックスをカーソルを移動した瞬間にちゃんと表示されるのです。 今までに何度かこの方法でうまくいっているので、原因がつかめません。超初心者の質問ですがよろしくお願いいたします。

  • Access2010 DLookup 関数で!

    店舗を管理するデータベースをAccess2010で、 テキストボックスを二つ作り 1.にs店舗no ・2.にs店舗名を作り 店舗NO・店舗名のどちらかに入力すれば検索する「イベントプロシージャ」を書きました。 [イミディエイト]ウィンドウを開きながら構文しましたが、[イミディエイト]ウィンドウ では、うまく作動しますが、イベントロシージャで実際に組みますと「コンパイルエラー:構文エラー」 と表示されます。どこが間違っているのかわかりません。 何方か教えて頂けませんでしょうか? 宜しくお願い致します。 Private Sub s店舗no_LostFocus() If Not IsNull(s店舗no) Then 'DLookup("店舗名","t店舗","[店舗no]= forms![ft店舗seach]![s店舗no]") DLookup("[店舗名]","[t店舗]","[店舗no]="& Forms![ft店舗seach]![s店舗no])   End If End Sub [イミディエイト]ウィンドウ ? DLookup("[店舗名]","[t店舗]","[店舗no]="& Forms![ft店舗seach8]![s店舗no]) 梅が丘店 相模原鵜野森店 ?DLookup("店舗名","t店舗","[店舗no]= forms![ft店舗seach8]![s店舗no]") 梅が丘店 相模原鵜野森店

  • Access DLookupについて

    お世話になります。 ローカルクエリがあり、その抽出された内容を取得したいの ですがどのようにすればよいでしょうか。 クエリのフィールドは「拠点名」「端末数」の2つのみで、当該クエリは フォーム上のテキストボックス内の拠点名を条件としてます。  クエリの「拠点名」の条件として、 Forms![テスト]![拠点名] 直接クエリを開くと、ちゃんとその拠点名で抽出され、端末数も 表示されてます(必ず1レコードのみ抽出されます)。 で、この抽出結果をVBAで取得したいのですが。。 調べてみたところDLookup関数を使えば取得できるようなのですが、 指定の仕方がいまいち分からずにいます。 たとえば、フォーム上に「端末数」というテキストボックスを作成し、 そのレコードソースの箇所に「= DLookup("端末数","ローカルクエリ","[拠点名] = '" & Forms![テスト]![拠点名] & "'")」と指定するものなのでしょうか。 それとも、VBAで Forms![テスト]![端末数] = DLookup("端末数","ローカルクエリ","[拠点名] = '" & Forms![テスト]![拠点名] & "'")と指定するのでしょうか。 両ケースともに Forms![テスト]![端末数]にはNullが入ってしまい、端末数を 取得できません。 ちゃんとフォーム上の拠点名が参照できてないのか、それとも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関数で複数条件の記述

    とても困っているので、どなたか教えて下さい! 今AccessでDLookup関数を使ってフィールドの値を取り出そうとしているのですが、 色んなエラーメッセージが出て先に進めません。 ★値を取り出そうとしているテーブル★ ■顧客台帳  ・顧客ID(オートナンバ)  ・顧客氏名(テキスト型)  ・生年月日(日付・時刻型)      以下略 ここから DLookup("顧客ID", "01顧客管理台帳", "顧客氏名 = " & Chr(34) & Me.Txt顧客氏名 & Chr(34) And "生年月日 = " & Me.Txt生年月日) 補足:Me.Txt顧客氏名(書式なし)    Me.Txt生年月日(日付(S)定型入力9999/99/99)    は、事前に入力されているものとします。 という式を使って、入力した顧客氏名と生年月日に一致する顧客IDを取り出したいのですが、 「型が違います」というエラーが出てしまいます。 条件式に[ ]等をつけてみても、「指定した式で参照されている'|'フィールドが見つかりません」 という様なエラーが出てしまいます。 条件の部分が間違っていると思うのですが、この式、またはやり方の問題点がお分かりになる方がおられましたら、ご指摘の方よろしくお願いいたします。

  • 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でなくても、何か他に方法がありましたらお教えください。 宜しくお願いします。

専門家に質問してみよう