Ошибка 3134 в VBA-сквозном QueryDef для SQL Server - PullRequest
0 голосов
/ 31 января 2020

Как мне обойти MS Access Error 3134 в сквозном запросе VBA к SQL Серверу?

Dim strQuery As String, strPlutus As String
Dim qDef As QueryDef
Dim db As DAO.Database

strPlutus = "qryPT_toPlutus"
Set db = CurrentDb
Set qDef = db.CreateQueryDef(strPlutus)

    strQuery = "SELECT " & vbCrLf
    strQuery = strQuery & "top 100 " & vbCrLf
    strQuery = strQuery & "Carrier_UID " & vbCrLf
    strQuery = strQuery & ", CarrierName " & vbCrLf
    strQuery = strQuery & "from vw_ODBC_Carriers " & vbCrLf
    strQuery = strQuery & "where TableKey=141 " & vbCrLf
    strQuery = strQuery & "and Carrier_UID <> 1;" & vbCrLf

    qDef.Connect = "ODBC;DSN=OAK;Description=OAK;UID=xxxxxx;Trusted_Connection=Yes;DATABASE=OAK"

    qDef.SQL = strQuery
    qDef.ODBCTimeout = 600
    qDef.Close

    db.Execute "INSERT INTO tblCarriers " & strPlutus

1 Ответ

1 голос
/ 01 февраля 2020

Ваш сквозной запрос в порядке, проблема в следующем:

db.Execute "INSERT INTO tblCarriers " & strPlutus

, что

db.Execute "INSERT INTO tblCarriers qryPT_toPlutus"

, что, очевидно, является синтаксической ошибкой и должно быть

db.Execute "INSERT INTO tblCarriers SELECT * FROM " & strPlutus

Примечание # 1: SELECT TOP 100 должно иметь предложение ORDER BY (но, вероятно, только для тестирования).

Примечание # 2: qDef.Close ничего не делает и может быть удалено , Во всяком случае, используйте Set qDef = Nothing, но поскольку это локальная переменная, это тоже избыточно.

...