Как оставить SQL комментариев в Access при отправке запросов на SQL Сервер? - PullRequest
0 голосов
/ 16 июня 2020

у нас есть приложение, которое в формах доступа обращается к SQL серверу. Мы хотим сохранить комментарий SQL в коде SQL наших запросов, но этот код выдает исключение (3075):

Dim strSQL As String
Dim dbs As DAO.Database
Set dbs = CurrentDb
strSQL = "SELECT /* 123456 */ NAA_CODE_NATURE_PK, NAA_LIBELLE_NATURE FROM RGZ_NATURES_AFFAIRE ORDER BY NAA_LIBELLE_NATURE"
Set rs = dbs.OpenRecordset(strSQL, dbOpenSnapshot)

Мы пробовали с dbExecDirect, dbSQLPassThrough и, наконец, dbExecDirect + dbSQLPassThrough в качестве третьего аргумента метода OpenRecordset, но он вообще не работает ...

Любое решение?

Спасибо

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Он работает с сквозным запросом (и только с ним), но не так, как вы пробовали.

Вы не можете использовать комментарии в Access SQL, только грубые обходные пути .

Лучший способ - использовать объект querydef, в котором вы устанавливаете строку подключения.

Sub TestSqlComment()

    Dim DB As DAO.Database
    Dim QD As DAO.QueryDef
    Dim RS As DAO.Recordset
    Dim strSQL As String

    Set DB = CurrentDb
    Set QD = DB.CreateQueryDef("")
    ' Set connect string of Pass-Through query to the connect string of an existing linked table
    QD.Connect = DB.TableDefs("RGZ_NATURES_AFFAIRE").Connect

    strSQL = "SELECT /* 123456 */ NAA_CODE_NATURE_PK, NAA_LIBELLE_NATURE FROM RGZ_NATURES_AFFAIRE ORDER BY NAA_LIBELLE_NATURE"
    QD.Sql = strSQL 
    Set RS = QD.OpenRecordset(dbOpenSnapshot)
    Debug.Print RS(0)
    RS.Close

End Sub

Конечно, вы можете переместить все эти накладные расходы во вспомогательную функцию, которая возвращает набор записей.

Следует также отметить, что сквозные запросы доступны только для чтения, так что это может иметь ограниченное использование для формы.

0 голосов
/ 16 июня 2020

Как вы объявляете rs? Это должен быть DAO.Recordset, как и ваше объявление DAO.Database. Полный код будет таким:

Dim strSQL As String
Dim dbs As DAO.Database
DIM rs As DAO.Recordset ' adding this line
Set dbs = CurrentDb
strSQL = "SELECT /* 123456 */ NAA_CODE_NATURE_PK, NAA_LIBELLE_NATURE FROM RGZ_NATURES_AFFAIRE ORDER BY NAA_LIBELLE_NATURE"
Set rs = dbs.OpenRecordset(strSQL, dbOpenSnapshot)

Ошибка может быть вызвана тем, что Access пытается использовать версию набора записей ADO.

...