みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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.のくくり方がおかしいとは思うのですが
どのように修正すればよろしいでしょうか?

よろしくお願いします。

投稿日時 - 2006-08-30 16:55:22

QNo.2372597

すぐに回答ほしいです

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

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!~と記述したほうが
パッと見たときに分かりやすいと思います。

投稿日時 - 2006-08-30 17:47:38

お礼

ご回答、ありがとうございます。

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

投稿日時 - 2006-08-30 18:03:32

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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

投稿日時 - 2006-08-30 17:31:05

ANo.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;

と書きます。

※イミディエイトウインドウでテストしたものです。
つまり、

日付・時刻----#で囲む。
文字列--------'で囲む。

を忘れています。

投稿日時 - 2006-08-30 17:25:57

補足

ご回答、ありがとうございます。

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

投稿日時 - 2006-08-30 17:37:21

お礼

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

投稿日時 - 2006-08-30 18:04:32

ANo.2

Access VBAって、Me. 使えなかったはずでは…

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

投稿日時 - 2006-08-30 17:04:17

補足

ご回答、ありがとうございます。

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

他に何か問題は考えられますでしょうか?

投稿日時 - 2006-08-30 17:16:17

お礼

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

投稿日時 - 2006-08-30 18:05:07

ANo.1

WHERE 日付 = " & Me.売上日 & ""

strSQL = strSQL & " AND
の間に
なんかわすれてない?
AND とかORのくくり

投稿日時 - 2006-08-30 16:59:23

補足

ご回答、ありがとうございます。

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

投稿日時 - 2006-08-30 17:14:40

お礼

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

投稿日時 - 2006-08-30 18:05:41

あなたにオススメの質問