• ベストアンサー

Access VBA SQL文で教えてください

strSQL = "SELECT 日付,ブロック_cd,時刻 FROM テーブルA" strSQL = strSQL & " WHERE 日付 = " & Me.売上日 & "" strSQL = strSQL & " AND ブロック_cd = & Me.cmb_ブロック & " strSQL = strSQL & " AND 時刻 = & Me.時刻 & " WHERE句以下を削除するとレコードを読み込んできます。 よって、WHERE句がおかしいようです。 テーブルA: 日付:日付/時刻型(yyyy/mm/dd) ブロック_cd:数値型 時刻:日付/時刻型(hh:nn) me.売上日:日付形式(yyyy/mm/dd) me.cmb_ブロック:コンボボックスの値(数値) me.時刻:時刻形式(hh:nn) おそらく、me.のくくり方がおかしいとは思うのですが どのように修正すればよろしいでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.5

strSQL = "SELECT 日付,ブロック_cd,時刻 FROM テーブルA" strSQL = strSQL & " WHERE 日付 = " & Me.売上日 & "" strSQL = strSQL & " AND ブロック_cd = & Me.cmb_ブロック & " strSQL = strSQL & " AND 時刻 = & Me.時刻 & " Debug.Print strSQL とすればイミディエイトウィンドウで strSQL の内容が確認できますよ!! SQL文中に変数の内容を渡す場合はダブルクォーテーションの外に出す データ型によって値を括らなければならない 数値  そのまま 文字  ' (シングルクォーテーション)で括る 日付  # で括る なので、フォームのモジュールで自身のコントロールを参照していると仮定して strSQL = "SELECT 日付,ブロック_cd,時刻 FROM テーブルA" strSQL = strSQL & " WHERE 日付 = #" & Me.売上日 & "#" strSQL = strSQL & " AND ブロック_cd = " & Me.cmb_ブロック strSQL = strSQL & " AND 時刻 =#" & Me.時刻 & "#" では? なお、Me.~ ですとプロパティの一覧も出てきて便利なのですが フォームのコントロールの場合には、Me!~と記述したほうが パッと見たときに分かりやすいと思います。

motsu2006
質問者

お礼

ご回答、ありがとうございます。 できました! また、今後開発を進めていく上で参考になるコメントもいただき本当にありがとうございました。

その他の回答 (4)

noname#22222
noname#22222
回答No.4

s_husky です。 まず、DBLookup関数を利用してSQL文をテストしたらいいです。 イミディエイトウインドウで出来ます。 Public Function DBLookup(ByVal strQuerySQL As String) As String On Error GoTo Err_DBLookup   Dim I   As Integer   Dim N   As Integer   Dim Datas As String   Dim dbs  As DAO.Database   Dim rst  As DAO.Recordset      Set dbs = CurrentDb   Set rst = dbs.OpenRecordset(strQuerySQL)   With rst     Do Until .EOF       N = .Fields.Count - 1       For I = 0 To N         Datas = Datas & .Fields(I) & ";"       Next I       .MoveNext     Loop   End With Exit_DBLookup: On Error Resume Next   rst.Close   dbs.Close   DBLookup = Datas   Exit Function Err_DBLookup:   MsgBox Err.Description   Resume Exit_DBLookup End Function

noname#22222
noname#22222
回答No.3

1  A1 2006/08/01 10:00 2  A2 2006/08/01 11:00 3  A3 2006/08/01 12:00 このようなテーブルからデータを取得するには、 ? DBLookup("SELECT * FROM Table1 WHERE 日付=#2006/08/01# AND 時刻=#10:00#") 1;A1;2006/08/01;10:00:00; と書きます。 ※イミディエイトウインドウでテストしたものです。 つまり、 日付・時刻----#で囲む。 文字列--------'で囲む。 を忘れています。

motsu2006
質問者

お礼

結果的には#5さんの回答で解決しましたが、 有意義な情報をいただき本当にありがとうございました。 感謝しております。

motsu2006
質問者

補足

ご回答、ありがとうございます。 strSQL = "SELECT 日付,ブロック_cd,時刻 FROM tbl_ジャーナル入力" strSQL = strSQL & " WHERE 日付 = # Me.売上日 #" ↑で実行したら 「クエリ式'日付 = # Me.日付 # の日付の構文エラーです。」 とエラーメッセージがかえります。 まだくくり方がおかしいでしょうか?

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.2

Access VBAって、Me. 使えなかったはずでは… VisualBasicなら、Me.売上日という書き方は出来ますが、Accessでは、Forms!フォーム名!売上日 となるはずです。

motsu2006
質問者

お礼

おかげで解決しました。 早急なご回答、ありがとうございました。 感謝しております。

motsu2006
質問者

補足

ご回答、ありがとうございます。 Me.は使えるようです。 デバッグモードで1ステップずつ実行している際、Me.~にカーソルを当てるとフォームで入力した値が表示されます。 他の多くのmdbでも同じように使用しているので、確かだと思います。 他に何か問題は考えられますでしょうか?

  • ArukuMail
  • ベストアンサー率22% (115/510)
回答No.1

WHERE 日付 = " & Me.売上日 & "" と strSQL = strSQL & " AND の間に なんかわすれてない? AND とかORのくくり

motsu2006
質問者

お礼

おかげで解決しました。 今回は早急な回答をいただき、ありがとうございました。 感謝しております。

motsu2006
質問者

補足

ご回答、ありがとうございます。 strSQL = "SELECT 日付,ブロック_cd,時刻 FROM テーブルA" strSQL = strSQL & " WHERE 日付 = " & Me.売上日 & "" ↑実はAND以下を削っても同じ結果です。 よって、Me.のくくり方(文字列かいなかによってくくり方が違ったはず)の問題かと思っているのですが……。

関連するQ&A