「これはヤバかったな」という遅刻エピソード

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

よろしくお願いします。

A 回答 (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!~と記述したほうが
パッと見たときに分かりやすいと思います。
    • good
    • 2
この回答へのお礼

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

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

お礼日時:2006/08/30 18:03

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
    • good
    • 0

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;

と書きます。

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

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

を忘れています。

この回答への補足

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

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

補足日時:2006/08/30 17:37
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/30 18:04

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



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

この回答への補足

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

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

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

補足日時:2006/08/30 17:16
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/30 18:05

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



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

この回答への補足

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

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

補足日時:2006/08/30 17:14
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/30 18:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A