1

こんにちは、良い日、誰か助けてくれませんか? メインフォームとサブフォームを取得し、2 つのテーブルを結合するためのクエリを作成し、そのクエリを使用してバインドされていないフィールドを挿入しようとしました。 [追加] ボタンをクリックすると次のようなエラーが表示されます: 実行時エラー '3134': ステートメントへの挿入で構文エラーが発生しました。

以下で使用したコード:

Private Sub Add_Click() 
CurrentDb.Execute "INSERT INTO PlantTransactionQuery(TransactionID,Plant Number,Categories,Description,Location,TransactionDate,Opening_Hours,Closing_Hours,Hours Worked,Fuel,Fuel Cons Fuel/Hours,Hour Meter Replaced,Comments)" & _
"VALUES(" & Me.txt13 & ",'" & Me.txt1 & "','" & Me.txt2 & "','" & Me.txt3 & "','" & Me.txt4 & "','" & Me.txt5 & "','" & Me.txt6 & "','" & Me.txt7 & "','" & Me.txt8 & "','" & Me.txt9 & "','" & Me.txt10 & "'," & Me.txt11 & "," & Me.txt12 & ")"
PlantTransactionsubform.Form.Requery 
End Sub

クエリに挿入できるかどうかはわかりません。また、予約名の括弧に入れる必要がある名前もわかりません。同じページのボタン onclick のサブフォームに 2 つのテーブルを追加する方法について何か助けをいただければ幸いです。前もって感謝します

4

1 に答える 1

0

[]テーブル名またはフィールド名を角括弧で囲む必要があります。

  • スペースまたは「変な文字」が含まれている、または

  • Access の予約語です。

代わりにこれを試してください:

CurrentDb.Execute "INSERT INTO PlantTransactionQuery (TransactionID,[Plant Number],Categories,Description,Location,TransactionDate,Opening_Hours,Closing_Hours,[Hours Worked],Fuel,[Fuel Cons Fuel/Hours],[Hour Meter Replaced],Comments) " & _
"VALUES (" & Me.txt13 & ",'" & Me.txt1 & "','" & Me.txt2 & "','" & Me.txt3 & "','" & Me.txt4 & "','" & Me.txt5 & "','" & Me.txt6 & "','" & Me.txt7 & "','" & Me.txt8 & "','" & Me.txt9 & "','" & Me.txt10 & "'," & Me.txt11 & "," & Me.txt12 & ")"

編集

次のように行ごとに分割すると、SQL ステートメントを視覚的に確認しやすくなります。

CurrentDb.Execute _
        "INSERT INTO [PlantTransactionQuery] (" & _
                "[TransactionID], " & _
                "[Plant Number], " & _
                "[Categories], " & _
                "[Description], " & _
                "[Location], " & _
                "[TransactionDate], " & _
                "[Opening_Hours], " & _
                "[Closing_Hours], " & _
                "[Hours Worked], " & _
                "[Fuel], " & _
                "[Fuel Cons Fuel/Hours], " & _
                "[Hour Meter Replaced], " & _
                "[Comments] " & _
            ") VALUES (" & _
                Me.txt13 & ", " & _
                "'" & Me.txt1 & "', " & _
                "'" & Me.txt2 & "', " & _
                "'" & Me.txt3 & "', " & _
                "'" & Me.txt4 & "', " & _
                "#" & Me.txt5 & "#, " & _
                "'" & Me.txt6 & "', " & _
                "'" & Me.txt7 & "', " & _
                "'" & Me.txt8 & "', " & _
                "'" & Me.txt9 & "', " & _
                "'" & Me.txt10 & "', " & _
                Me.txt11 & ", " & _
                Me.txt12 & " " & _
            ")"

3061 エラー メッセージ "パラメーターが少なすぎます..." は、フィールド (列) 名のスペルが間違っている場合、または予約語であるフィールド名が角かっこで囲まれていない場合に発生する可能性があります。上記のクエリを編集したので、安全のために、すべてのテーブルと列の名前が括弧で囲まれています。

また、文字列を引用しいて、数値を引用していないことを確認してください。そこの間違いも、前述のエラーにつながる可能性があります。

[TransactionDate] については、一貫性を保つためにテキスト ボックスのバインドを解除する必要があります。そのフィールドの値は#、一重引用符ではなくハッシュ マーク ( ) で囲まれていることに注意してください。テキストボックスに「日付」入力マスクを追加するか、次のようなものを使用できます...

Format(CDate(Me.txt5), "yyyy-mm-dd")

...日付をフォーマットします。

最後に、そのような SQL 文字列を作成すると、SQL インジェクション.Executeの問題が発生する可能性があることに注意してください。そのため、それを次のようなものに置き換えることも検討してください。

Dim rst as DAO.Recordset
Set rst = CurrentDB.OpenRecordset("[PlantTransactionQuery]", dbOpenTable)
rst.AddNew
rst![TransactionID] = CLng(Me.txt13)
rst![Plant Number] = Me.txt1
rst![Categories] = Me.txt2
...
rst![Comments] = Me.txt12
rst.Update
于 2013-05-08T10:45:13.553 に答える