1

以前は SQL 開発者でしたが、残念ながら私の新しい仕事は Access 2010 のみでの作業です。さまざまな更新ステートメントを実行する vba マクロを作成しようとしています。アクセスでクエリを作成しましたが、vba でクエリを呼び出そうとしています。1 つのアクセス クエリでこれを実行しようとしましたが、実行時エラー (UPDATE ステートメントの構文エラー) が発生しました。クエリはアクセスで正常に実行されますが、vba 関数はランタイム エラーで失敗します。

以下は私のvba関数です:

Public Function TestUpdate1()
Dim cmdT As ADODB.Command
Dim cnn As ADODB.Connection
Dim prmT As ADODB.Parameter

Set cnn = Application.CurrentProject.Connection
Set cmdT = New ADODB.Command
Set cmdT.ActiveConnection = cnn
cmdT.CommandText = "Update Table 1"
cmdT.CommandType = adCmdText

'Set prmT = cmdT.Parameters("Acc_Date")
'prmT.Value = #12/31/2012#
cmdT.Execute

'Set cmdT = Nothing
'
'If Err <> 0 Then
' cmdT.ActiveConnection.RollbackTrans
'Else
' cmdT.ActiveConnection.CommitTrans
'End If
End Function

関数をデバッグすると、cmdt.Execute 行でエラーが発生します。

実行中の SQL クエリ (テーブル 1 の更新) は次のとおりです。

UPDATE Table_1 SET Product = IIf(Contract Like "*budget*amt*","BUDGET Annual",
IIf(Contract Like "*CLASSIC*AMT*","CLASSIC Annual",
IIf(Contract Like "*essential*AMT*","ESSENTIAL Annual",
IIf(Contract Like "*P*PLUS*AMT*","Premier Plus Annual",
IIf(Contract Like "*SELECT*AMT*","SELECT Annual",
IIf(Contract Like "*prestige*AMT*","PRESTIGE Annual",
IIf(Contract Like "*GAP*","GAP Productl",
IIf(Contract Like "*SINGLE*TRIP*","SINGLE TRIP",
IIf(Contract Like "*premier*","PREMIER Annual",
IIf(Contract Like "*standard*","STANDARD Annual",
IIf(Contract Like "*EVAC*","European VAC","???"))))))))))), End_Date =  Depart_Date+Days;

上記についてご協力いただけると幸いです。

どうもありがとう

4

2 に答える 2

0

このコードはSQLステートメントを実行しようとしています:表1を更新

cmdT.CommandText = "Update Table 1"
cmdT.CommandType = adCmdText
cmdT.Execute

Update Table 1という名前のクエリを実行するには、次のコードが必要です。

Docmd.OpenQuery "Update Table 1" 

更新されようとしている行数に関する警告が必要ない場合は、

With DoCmd
     .SetWarnings False
     .OpenQuery "Update Table 1"
     .SetWarnings True
End With  

これは、アクセスプロジェクトとADODBを使用してパラメーター化されたクエリを実行するために使用するコードです。

Dim cmdl As ADODB.Command
Dim StrCon As New ADODB.Connection
Dim rsRecSet As New ADODB.Recordset

StrCon.Open CurrentProject.Connection

'Set CONNECTION timeout property
StrCon.CommandTimeout = 0

'Create a new command object to process the stored proc
Set cmdl = New ADODB.Command

With cmdl
    .ActiveConnection = StrCon
    'set COMMAND timeout property - query can time out on either the connection OR the command
    .CommandTimeout = 0
    .CommandText = "spCrossTabRun"
    .CommandType = adCmdStoredProc
    .Parameters.Refresh
    .Parameters(1).value = "MyValue1"
    .Parameters(2).value = "MyValue2"
    .Parameters(3).value = "MyValue3"
    Set rsRecSet = .Execute()
End With
于 2013-02-14T15:29:44.603 に答える