1

このエラーのトラブルシューティングを 1 週間行っていますが、うまくいきませんでした。

情報を編集して情報を変更し、更新をクリックすると、エラーが表示されます

エラー im 取得 (パラメーターが少なすぎます。予期される 1。実行時エラー '3061')

私のコードは次のとおりです。私のコードにはバグがあると思います。

Private Sub cmdUpdate_Click()
Dim strSql As String
strSql = "UPDATE PlantTransaction " & _
"SET TransactionID=" & Me.txtTranID & _
",[Plant Number]='" & Me.txtPlantNo & "'" & _
",TransactionDate=#" & Me.txtTransDate & "#" & _
",Opening_Hours='" & Me.txtOpeningHRS & "'" & _
",Closing_Hours='" & Me.CloseHrs & "'" & _
",Fuel='" & Me.txtFuel & "'" & _
",[Fuel Cons Fuel/Hours]='" & Me.txtFuelConsFuelHr & "'" & _
",[Hour Meter Replaced]='" & Me.txtHrMtrRep & "'" & _
",Comments='" & Me.txtComments & "'" & _
",[Take on Hour]='" & Me.txtTOH & "'" & _
" WHERE TransactionID=" & Me.PlantTransactionQuery.Form.Recordset.Fields("Tr ansactionID")
Debug.Print strSql ' <- prints to Immediate window
CurrentDb.Execute strSql, dbFailOnError
cmdClear_Click
Me.PlantTransactionQuery.Form.Requery
End Sub

どんな助けでも大歓迎です よろしくお願いします!!!

4

2 に答える 2

1

コードに次の行を含めるのは賢明でした。

Debug.Print strSql ' <- prints to Immediate window

パラメータが見つからないというメッセージが表示されたら、イミディエイト ウィンドウに移動し ( Ctrl+gを使用してそこに移動できます)、SQL ステートメントをコピーします。

次に、クエリ デザイナーで新しい Access クエリを作成し、SQL ビューに切り替えて、コピーしたテキストを貼り付けます。そのクエリを実行しようとすると、Access は、パラメーターであると見なすものの名前を含むパラメーター入力ボックスを表示します。

そのパラメーター名をデータ ソースのフィールド名と比較します。多くの場合、この状況は、クエリにスペルミスのあるフィールド名が含まれているために発生します。を使用した別の可能性は、UPDATE更新しようとしている値の 1 つが引用符で囲まれていないテキストであることです。原因に関係なく、その入力ボックスのパラメーター名は、追跡に役立ちます。UPDATEさらにサポートが必要な場合は、そのステートメントの実際のテキストを表示してください。

于 2013-05-26T18:44:39.063 に答える
1

多くのユーザー入力を含む長い SQL ステートメントを「くっつける」ときはいつでも、次の課題に直面します。

  1. 文字列と日付を正しく区切る

  2. そのようなフィールド内の区切り文字 (通常はテキスト フィールド内の引用符) のエスケープ、および

  3. 必要なコンマをすべて適切な場所に配置する

Recordset を使用して更新を実行することで、これらの煩わしさを回避できます。

Dim rst As DAO.RecordSet
Set rst = CurrentDb.OpenRecordset("PlantTransaction", dbOpenDynaset)
rst.FindFirst "TransactionID=" & Me.PlantTransactionQuery.Form.Recordset.Fields("Tr ansactionID")
If Not rst.NoMatch Then
    rst.Edit
    rst!TransactionID = Me.txtTranID
    rst![Plant Number] = Me.txtPlantNo
    rst!TransactionDate = Me.txtTransDate
    rst!Opening_Hours = Me.txtOpeningHRS
    rst!Closing_Hours = Me.CloseHrs
    rst!Fuel = Me.txtFuel
    rst![Fuel Cons Fuel/Hours] = Me.txtFuelConsFuelHr
    rst![Hour Meter Replaced] = Me.txtHrMtrRep
    rst!Comments = Me.txtComments
    rst![Take on Hour] = Me.txtTOH
    rst.Update
End If
rst.Close
Set rst = Nothing
于 2013-05-26T19:09:14.587 に答える