- ベストアンサー
AccessのDlookup関数のエラー
【Access2003】 dlookup関数について教えてください。 やろうとしていることは、ある商品について任意の日付の時点での数量を表示したく、 練習として、 DLookup("[数量]", "t_商品情報", "[品番] = '"& "1001" & "' and [日付] = #" & "2007/12/17" & "#") と記述したときには正常な値が表示されました。 その後、「品番」と「日付」をフォーム上のテキストボックスで任意の値を入力したいと思い、下記のように書き直しました。 DLookup("[数量]", "t_商品情報", "[品番] = '"& "[Forms]![フォーム1]![txt品番]" & "' and [日付] = #" & "[Forms]![フォーム1]![txt日付]" & "#") フォームのテキストボックスにそれぞれ値を入力したところ、「日付の構文エラー」となってしまいました。 勉強不足なのでしょうか、原因がわからず困っております。 お詳しい方のアドバイスをお待ちしております。宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#は必要です 値をとりたいもの >[Forms]![フォーム1]![txt品番] 等は""の外に出さないとそういう文字列を指定したことになってしまいますよ DLookup("[数量]", "t_商品情報", "[品番] = '"& [Forms]![フォーム1]![txt品番] & "' and [日付] = #" & [Forms]![フォーム1]![txt日付] & "#")
その他の回答 (2)
- yatoaa
- ベストアンサー率30% (110/362)
# が不要なのでは。(2つとも) [txt日付] はそもそもdate属性なのでは?
以下の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#
お礼
ご丁寧にありがとうございます。 No.3の方のご回答を拝見して解決してしまったのですが、これも時間が出来たときに試してみます。 こういう風にエラーの原因を探る方法があるのですね。 勉強になりました。
お礼
ありがとうございました!! きちんと表示できました。単純に置き換えて記述してしまったので…。 本当に助かりました。