如何在Access中留下SQL注释,当查询被扔到SQL Server时?

问题描述 投票:0回答:1

我们有一个应用程序,是在Access表格访问SQL Server。我们想在查询的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方法的第三个参数,但这根本行不通。

任何解决方案?

谅谅

sql-server comments access
1个回答
1
投票

它的工作原理是通过查询(和 只是 与),但不像你试过的那样。

在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

当然,你可以把所有这些开销移到一个返回记录集的辅助函数中。

还需要注意的是,Pass-Through查询是只读的,所以这对表单的作用可能有限。


0
投票

如何声明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版本的记录集。

© www.soinside.com 2019 - 2024. All rights reserved.