Que*_* T. 7 ms-access listbox autocomplete recordset
我在Access数据库上工作,我必须使用与SQL Server的数据源连接.
为此,我使用ADODB对象:
-ADODB.Connection
-ADODB.Recordset
代码是最新的,在观察了Ian Kenney之后
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
Dim rs As ADODB.Recordset
cnn.ConnectionString = "driver={SQL Server};provider=SQLOLEDB;server=10.****;uid=****readonly;pwd=****readonly;database=****"
cnn.Open
Set rs = cnn.Execute("SELECT [MATRI], [NOMPRE] FROM SCHEME_DB.TABLE WHERE NOMPRE LIKE '*" & Me.Textbox_recherche.Text & "*'")
Me.Liste_choix.RowSourceType = "Table/List"
Me.Liste_choix.Recordset = rs
rs.Close
cnn.Close
Run Code Online (Sandbox Code Playgroud)
(此代码(代码的一部分)是一种使用TextBox和ListBox在Access中执行自动完成的方法)
当我运行此代码时出现错误91:"错误91:对象变量或未设置块变量".
我不明白如何解决这个问题.
提前致谢.
我解决了我的问题(错误91),有三个问题:创建ADODB.Connection,选择中的*(感谢HansUp)和listbox.recordset的设置(再次感谢HansUp)
我解决了错误:
Private Sub Textbox_recherche_Change()
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
Dim rs As ADODB.Recordset
'A important point to solve the Error 91 is to declare your ADODB.Connection with .Properties like that : (I don't use Windows NT authentification but the SQL Server authentification)
With cnn
.Provider = "Microsoft.Access.OLEDB.10.0"
.Properties("Data Provider").Value = "SQLOLEDB"
.Properties("Data Source").Value = "10.******"
.Properties("User ID").Value = "*****readonly"
.Properties("Password").Value = "*****readonly"
.Open
End With
'The second point is to replace the * in the search for the autocompletion by the %
Set rs = cnn.Execute("SELECT [NOMPRE] FROM ****.***** WHERE NOMPRE LIKE '%" & Me.Textbox_recherche.Text & "%'")
'You have to declare the RowSourceType of your listbox to "Table/Query"
Me.Liste_choix.RowSourceType = "Table/Query"
'And Finally to SET your recordset like that:
Set Me.Liste_choix.Recordset = rs
rs.Close
cnn.Close
Set cnn = Nothing
Set rs = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
您告诉我们代码抛出错误91,"对象变量或未设置块变量".不幸的是,您没有指出哪一行触发了错误.这迫使我们猜测问题所在.
一个问题在这里:
Me.Liste_choix.Recordset = rs
Run Code Online (Sandbox Code Playgroud)
这会尝试将一个对象分配给另一个对象.该=符号足以用于具有简单数据类型的分配...即MyVariable = 2.但是,您必须在Set关键字中包含对象分配.
Set Me.Liste_choix.Recordset = rs
Run Code Online (Sandbox Code Playgroud)
虽然你应该做出改变,但我不确定这是错误的原因91; 我会猜到Access会抱怨"无效使用财产"而不是.
该SELECT陈述是另一个问题,但我再次不确定它是否会导致您报告的错误.该WHERE子句使用Like与具有*通配符字符的模式进行比较.从DAO运行它时,该查询可能会返回您的预期.但是你使用的ADO *只是一个没有任何特殊含义的星号字符.因此,当您从ADO运行查询时,该查询可能不会返回任何行.替换*为%.
作为一般建议,如果您的代码模块尚未包含Option Explicit在其声明部分中,请添加它.然后从VB Editor的主菜单中运行Debug-> Compile.修复编译器抱怨的任何内容.在进一步的故障排除之前,请确保已完成这些操作.
| 归档时间: |
|
| 查看次数: |
13976 次 |
| 最近记录: |