2

実行時エラー3131Syntax error in FROMclause が表示されます。誰が私が間違ったことを教えてもらえますか?

Dim strSQL
If Not (Me.PlantTransactionQuery.Form.Recordset.EOF And Me.PlantTransactionQuery.Form.Recordset.BOF) Then
If MsgBox("Are you sure you want to delete", vbYesNo) = vbYes Then
strSQL = "Delete * FROM PlantTransactionQuery" & _
"WHERE TransactionID=" & Me![TransactionID] & Me.PlantTransactionQuery.Form.Recordset.Fields("TransactionID")
CurrentDb.Execute strSQL
Me.PlantTransactionQuery.Form.Requery
End If
End If
End Sub
4

3 に答える 3

1

PlantTransactionQuerySQL ステートメントの問題の 1 つは、 と の間に区切り文字 (スペースまたは改行) がないことですWHERE。わかりやすいように文字列を短くしました。

strSQL = "Delete * FROM PlantTransactionQuery" & _
"WHERE TransactionID="

文字列を作成した直後に、この行をコードに追加します。

Debug.Print strSQL

次に、イミディエイト ウィンドウ ( Ctrl+ g) に移動して、db エンジンに実行を依頼しているステートメントを調べることができます。問題が明らかでない場合は、ステートメント テキストをコピーし、テスト用に新しい Access クエリの SQL ビューに貼り付けます。

于 2013-05-10T22:33:21.750 に答える
1

本当に他に選択肢がない場合を除き、SQL ステートメントを使用してレコードを削除することはお勧めしません。

サブフォーム自体にボタンを配置できますか? データシート ビューを除くすべてのサブフォームで、ボタンを使用できると思います。次に、通常のコードを実行してレコードを削除します。

DoCmd.RunCommand acCmdDeleteRecord

Edit1: データシート ビューを使用しているため、基本的に 2 つのオプションがあります。

1) データシート ビューでは、行の左端に移​​動すると、レコードを削除するための右クリック メニューが提供されます。

2)他のオプションは、上記のコードを実行するサブフォームにパブリック関数を作成し、ユーザーがメインフォームのボタンをクリックしたときにメインフォームから呼び出すことです。

于 2013-05-10T14:06:49.450 に答える
1

エラーは、SQL 文字列でテーブル名と WHERE 句の間にスペースがないために発生します。現在のステートメント (...PlantTransactionQuery" & _ "WHERE TransactionID="...) は、"Delete * FROM PlantTransactionQueryWHERE TransactionID=" & [parameters]のような SQL 文字列になります。 PlantTransactionQueryWHEREというテーブルを見つけるには、この問題を修正するには、テーブル名と引用符の間 (...PlantTransactionQueryWHERE " & _) または WHERE 句 (" WHERE...) の前にスペースを追加します。

于 2014-07-22T16:56:28.973 に答える