2

VBAの現在のAccessデータベースからすべてのレコードを削除しようとしていますOTP = txtOTP.valueVARIABLE = {NomAdminContrats,TelAdminContrats,TelecAdminContrats, [...]}

これが私のコードです:

Dim query As Recordset 
Set query = CurrentDb.Execute("DELETE * FROM tb_SOMMAIRE WHERE OTP = '" & txtOTP.value & "' AND (VARIABLE = 'NomAdminContrats' or VARIABLE = 'TitreAdminContrats' or VARIABLE = 'UnitAdminContrats' or VARIABLE = 'AdrAdminContrats' or  VARIABLE = 'VilleAdminContrats' or VARIABLE = 'TelAdminContrats' or VARIABLE = 'TelecAdminContrats' or VARIABLE = 'CourrielAdminContrats')")

OpenRecordsetで試行するとエラー3219InvalidOperationが発生し、Executeで試行するとExpected関数が発生しました。私はたくさんのことを試しましたが、このクエリを機能させるにはまだ成功していませんでした。レコードセットに完全なテーブルもありますが、myRecordset.Deleteを使用すると、より簡単/高速になりますか?もしそうなら、どうすればそれを行うことができますか?

編集

CurrentDb.OpenRecordsetの代わりにCurrentDb.Executeを試してみます。エラーは、無効な操作ではなく関数が期待されるようになりました。

4

3 に答える 3

3

あなたはすでに問題を解決しました。おめでとう。条項の別のアプローチWHEREが扱いやすいかどうかを確認してください。

このWHERE句はVARIABLE、値のリストと一致するかどうかをチェックします。複数のOR条件を使用してリストの各メンバーと比較する代わりに、dbエンジンに値のリストが存在するVARIABLEかどうかを尋ねることができます。VARIABLEIN

AND
    (
        [VARIABLE] IN
            (
                'NomAdminContrats',
                'TitreAdminContrats',
                'UnitAdminContrats',
                'AdrAdminContrats',
                'VilleAdminContrats',
                'TelAdminContrats',
                'TelecAdminContrats',
                'CourrielAdminContrats'
            )
    )
于 2012-10-09T14:58:01.223 に答える
3

関数オプションとクエリrecordset.executeを送信する場合を除いて、関数に括弧を使用することは想定されていませんでした。execute

currentDB.Execute ("SQL EXECUTABLE QUERY", Options)

optionsは、 dbDenyWritedbFailOnErrorなど、関数に含めることができるオプションの定数です。実行関数にオプションを含めない場合、MicrosoftはデフォルトのdbInconsistentを使用するため、括弧は使用しないでください。

Set query = CurrentDb.Execute "DELETE * FROM tb_SOMMAIRE..."

変数を使用したときにコードが機能した理由は、変数sqlを使用したときに括弧を使用しなかったためです。

于 2015-11-19T14:04:52.393 に答える
0

ついにそれを機能させることができました。何らかの理由で、クエリに対して別の変数を宣言する必要がありました。

Dim sql as String
sql = "DELETE * FROM tb_SOMMAIRE WHERE OTP = '" & txtOTP.value & "' AND (VARIABLE = 'NomAdminContrats' or VARIABLE = 'TitreAdminContrats' or VARIABLE = 'UnitAdminContrats' or VARIABLE = 'AdrAdminContrats' or  VARIABLE = 'VilleAdminContrats' or VARIABLE = 'TelAdminContrats' or VARIABLE = 'TelecAdminContrats' or VARIABLE = 'CourrielAdminContrats')"
CurrentDb.Execute sql
于 2012-10-09T14:47:23.867 に答える