我正在尝试从MS-Access 2007中的函数中检索ADODB记录集,但是在我的脸上发出一条非常恼人的错误消息:“参数不是可选的(错误449)”。
我真的无法弄清楚我做错了什么,请帮忙!
此致
的Stefan
功能:
Function Rs(sourceSQL As String) As ADODB.Recordset
' Create New Disconnected Recordset
Dim rsConnection As ADODB.Connection
Dim rsRecordset As ADODB.Recordset
Set rsConnection = New ADODB.Connection
rsConnection.Open CurrentProject.Connection
Set rsRecordset = New ADODB.Recordset
rsRecordset.CursorLocation = adUseClient
rsRecordset.Open sourceSQL, rsConnection
Set Rs = rsRecordset
Set rsRecordset.ActiveConnection = Nothing
End Function
功能调用:
Private Sub Form_Load()
Call Rs("tblDocumentCode")
Debug.Print Rs.txtDocumentCode(0).Value
End Sub
答案 0 :(得分:4)
您使用rs两次,一次作为函数,一次作为记录集的名称:
Private Sub Form_Load()
Set Myrs= Rs("tblDocumentCode")
Debug.Print MyRs(0).Value
End Sub
答案 1 :(得分:0)
假设“txtDocumentCode”是记录集中的一个字段,那么:
Private Sub Form_Load()
Call Rs("tblDocumentCode")
Debug.Print Rs.txtDocumentCode(0).Value
End Sub
......应该改为:
Private Sub Form_Load()
Debug.Print Rs("tblDocumentCode").Fields("txtDocumentCode").Value
End Sub
据我所知,这应该无需将函数返回的记录集分配给变量。
但是让我退后一点,并建议修复这个语法错误引出一个问题:她正在做什么是非常不可取的。每次调用此函数时,您都会打开一个新连接,但Access可以通过一次又一次使用的单个连接更好地工作。 Jet / ACE后端和服务器后端都是如此。初始化连接所需的开销将使您的表单加载速度非常慢。
但更糟糕的是,这不是Access编程 - 这是“缺少绑定表单/控件”编程环境的难民。您应该将ODBC与链接表一起使用,然后您可以将记录源分配给表单,而不必使用ADO记录集。如果你坚持做你正在做的事情,你可能根本就不使用Access,因为你放弃了Access的75%或更多的优势,并且这样做没有性能或并发性好处(给自己买一个问题的世界)。
当然,现在我再次查看它,你正在使用CurrentProject.Connection,我不确定它是如何与ODBC链接表交互的。实际上,我猜这可能是ADP而不是MDB / ACCDB,但这更没意义,因为你不需要在ADP中做任何额外的事情来用ADO记录集填充表单 - 这就是默认值。
所以,一般来说,除了语法错误之外还有一些问题 - 你所做的事情并没有多大意义。