我有一个MS Access 2007表:
列是DB,Module,CommentID和Comment
我有一个SQL查询,它返回MS Access Query Design中的正确记录.
我在立即窗口中确认了Ms Access Query Design和VBA模块"Module1"中的sql是相同的.
我把这个函数称为如下:
?LookupComment(currentproject.Name,Application.VBE.ActiveCodePane.CodeModule,"1")
Run Code Online (Sandbox Code Playgroud)
随后在函数中的strSQL在立即窗口中确认为
Select * from tblComments where DB='db1.accdb' AND Module='Module1' AND CommentID='1'
Run Code Online (Sandbox Code Playgroud)
如果我用"tblComments"替换"strSQ",函数返回正常.
但我在使用strSQL的rst.open上遇到错误
方法'打开'对象'_Recordset'失败
Public Function LookupComment(theDB, theModule, theCommentID As String) As String
Dim cn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim strSQL As String
Set cn = CurrentProject.Connection
Set rst = New ADODB.Recordset
strSQL = "Select * from tblComments where DB='" & theDB & "' AND " _
& "Module='" & theModule & "' AND CommentID='" & theCommentID & "'"
rst.Open strSQL, cn, adOpenDynamic, adLockReadOnly
' rst.Open "tblComments", cn, adOpenDynamic, adLockReadOnly
If rst.EOF = False Or rst.BOF = False Then
rst.MoveFirst
LookupComment = rst!Comment
End If
Set rst = Nothing
Set cn = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
思考?
TIA
使用此更改测试您的功能:
strSQL = "Select * from tblComments where DB='" & theDB & "' AND " _
& "[Module]='" & theModule & "' AND CommentID='" & theCommentID & "'"
Run Code Online (Sandbox Code Playgroud)
我Module
用方括号包围,因为它是一个Jet保留字.请参阅Access中的问题名称和保留字.
具有该未括号的名称的SELECT语句会导致ADO记录集.Open
方法失败.正如您所报告的那样,当相同的SELECT语句用于在查询设计器中打开的查询时,它会成功.无论是否Module
用括号括起来,Igor的DAO记录集建议对我都有用; 我不明白为什么它失败了.
很难准确预测何时使用保留字,因为db对象名称会咬你.避免完全使用它们更安全.如果您无法避免它们,请将这些名称括在查询的方括号中,以减少混淆数据库引擎的可能性.
您可以下载Allen Browne的免费数据库问题检查器实用程序,并使用它来检查数据库中的保留字.它还会警告您数据库的其他潜在问题.
归档时间: |
|
查看次数: |
36254 次 |
最近记录: |