我们有一个应用程序,是在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方法的第三个参数,但这根本行不通。
任何解决方案?
谅谅
它的工作原理是通过查询(和 只是 与),但不像你试过的那样。
在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查询是只读的,所以这对表单的作用可能有限。
如何声明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版本的记录集。