Доступ DAO через запрос — Доступ добавляет точку с запятой в SQL

#ms-access #odbc #ms-access-2010

Вопрос:

У меня есть следующая простая функция для выполнения сквозного запроса SQL с помощью ODBC:

 Sub RunSQL(strSQL As String, DSN As String)

Dim db As DAO.Database
Dim qd As DAO.QueryDef
Dim rs As DAO.Recordset

Set db = CurrentDb
On Error Resume Next
db.QueryDefs.Delete "temp"
On Error GoTo 0
Set qd = db.CreateQueryDef("temp")
qd.Connect = "ODBC;DSN=" amp; DSN
qd.SQL = strSQL
qd.ODBCTimeout = 999
qd.ReturnsRecords = True
On Error GoTo Handler
Set rs = qd.OpenRecordset
Debug.Print rst!IALITM

db.QueryDefs.Delete "temp"
Exit Sub
Handler:
    Dim dbeError As Error
    For Each dbeError In DBEngine.Errors
        Debug.Print "(" amp; dbeError.Number amp; "): " amp; dbeError.Description
        Next
End Sub
 

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я устанавливаю SQL, access автоматически добавляет к нему точку с запятой, как если бы использовал синтаксис Access SQL — источнику данных ODBC это не нравится и возвращает ошибку. Есть ли какой-либо способ остановить доступ к добавлению»; » или удалить его впоследствии?

Комментарии:

1. Я не могу воспроизвести вашу проблему с помощью драйвера ODBC 17 для SQL Server. Трассировка ODBC показывает, что Access отправляет запрос без добавления точки с запятой в конце: "SELECT * from dbo.team 0" . Какой драйвер ODBC вы используете и какое фактическое сообщение об ошибке он возвращает?

2. @GordThompson как ни странно, когда я попробовал это сегодня, проблема не возникла. Ранее я получал ошибку «токен ; не ожидается», и если бы я debug.print изменил qd.SQL, там была бы точка с запятой — очень странно.