- ベストアンサー
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.のくくり方がおかしいとは思うのですが どのように修正すればよろしいでしょうか? よろしくお願いします。
- みんなの回答 (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!~と記述したほうが パッと見たときに分かりやすいと思います。
その他の回答 (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
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; と書きます。 ※イミディエイトウインドウでテストしたものです。 つまり、 日付・時刻----#で囲む。 文字列--------'で囲む。 を忘れています。
お礼
結果的には#5さんの回答で解決しましたが、 有意義な情報をいただき本当にありがとうございました。 感謝しております。
補足
ご回答、ありがとうございます。 strSQL = "SELECT 日付,ブロック_cd,時刻 FROM tbl_ジャーナル入力" strSQL = strSQL & " WHERE 日付 = # Me.売上日 #" ↑で実行したら 「クエリ式'日付 = # Me.日付 # の日付の構文エラーです。」 とエラーメッセージがかえります。 まだくくり方がおかしいでしょうか?
- PrintScree
- ベストアンサー率25% (538/2091)
Access VBAって、Me. 使えなかったはずでは… VisualBasicなら、Me.売上日という書き方は出来ますが、Accessでは、Forms!フォーム名!売上日 となるはずです。
お礼
おかげで解決しました。 早急なご回答、ありがとうございました。 感謝しております。
補足
ご回答、ありがとうございます。 Me.は使えるようです。 デバッグモードで1ステップずつ実行している際、Me.~にカーソルを当てるとフォームで入力した値が表示されます。 他の多くのmdbでも同じように使用しているので、確かだと思います。 他に何か問題は考えられますでしょうか?
- ArukuMail
- ベストアンサー率22% (115/510)
WHERE 日付 = " & Me.売上日 & "" と strSQL = strSQL & " AND の間に なんかわすれてない? AND とかORのくくり
お礼
おかげで解決しました。 今回は早急な回答をいただき、ありがとうございました。 感謝しております。
補足
ご回答、ありがとうございます。 strSQL = "SELECT 日付,ブロック_cd,時刻 FROM テーブルA" strSQL = strSQL & " WHERE 日付 = " & Me.売上日 & "" ↑実はAND以下を削っても同じ結果です。 よって、Me.のくくり方(文字列かいなかによってくくり方が違ったはず)の問題かと思っているのですが……。
お礼
ご回答、ありがとうございます。 できました! また、今後開発を進めていく上で参考になるコメントもいただき本当にありがとうございました。