Microsoft Access 掲示板

Error#: 3134 INSERT INTO ステートメントの構文エラーです。 / 6

20 コメント
views
4 フォロー
6
hatena 2022/06/15 (水) 12:08:53 修正

VBA内でのSQL文、めんどくさいですよね。
& でつなげなければいけない
データ型によって、#'で囲まなければならない
未入力だったばあい Null に変換したりする必要がある
など・・・

最初のSQLの場合は、1件のレコードを追加するだけですので、自分なら、recordset.AddNewを使いますね。

そうすると下記のようなコードですみます。

    Dim rs As Dao.Recordset

    Set rs = CurrentDb.OpenRecordset("T_依頼")
    rs.AddNew
    rs!依頼日 = Me.txt依頼日.Value
    rs!依頼者 = Me.cmb依頼者.Value
    rs!W_No = Me.txtW_No.Value
    rs!W_Noロット = Me.txtW_Noロット.Value
    rs!品名 = Me.txt品名.Value
    rs!希望処置 = Me.cmb希望処置.Value
    rs!補足説明 = Me.txt補足説明.Value
    rs.Update
    rs.Close

どうでしょうか。こちらの方がはるかにシンプルで読みやすいと思いませんか。

さらに、テキストボックス名をフィールド名と同じにしておけば、下記のようにいちいちフィールド名やテキストボックス名を記述する必要もなくなります。

    Dim rs As DAO.Recordset, fld As DAO.Field
    Set rs = CurrentDb.OpenRecordset("T_売上")
    rs.AddNew
    For Each fld In rs.Fields
        fld.Value = Me(fld.Name).Value
    Next
    rs.Update
    rs.Close

2つめのSQL文は下記のようになります。

テキストボックス名は、
フィールド名の後に1~10の数字を付加したものにしておいて、

    Set rs = CurrentDb.OpenRecordset("T_依頼詳細")
    Dim i As Long
    For i = 1 To 10
      If Not IsNull(Me("依頼理由" & i).Value) Then
          rs.AddNew
          For Each fld In rs.Fields
              fld.Value = Me(fld.Name & i).Value
          Next
          rs.Update
      End If
    Next i
    rs.Close
通報 ...