在Access 2003/2007中打开记录集
我已经使用Access代码已经有多年了,它让我感到非常疯狂。在Access 2003/2007中打开记录集
我只是不记得任何东西,我想要做的就是在代码中打开一个记录集,并且我没有在网上找到任何东西,或者我已经尝试过的任何代码组合。
它的短:
Dim rsSystem As Recordset
Dim sSQL As String
sSQL = "SELECT * FROM Table"
Set rsSystem = CurrentDB.OpenRecordset(sSQL)
什么在神圣的地狱我缺少什么?
在此先感谢。
例子在这里,打开一个“记录”的所有排列: http://www.vbexplorer.com/VBExplorer/vb_feature/june2000/Database_Beginner_ADO_DAO.asp
最简单的方法是使用DAO当前数据库上。我的VBA是有点生疏,但...
Dim db as DAO.Database
Dim rs as DAO.Recordset
Set db = CurrentDB
Set rs = DB.OpenRecordset("table or query name")
对于ADO:
Dim rs As New ADODB.Recordset
rs.Open "tblPeople", CurrentProject.Connection, adOpenDynamic
决定是否要使用ADO或DAO?这里是一个DAO(更多原生Access/Jet)示例
dim wrk as DAO.Workspace
dim db as DAO.Database
set wrk = DBEngine.Workspaces(0)
set db = wrk.OpenDatabase(CurrentDb.Name)
Dim rsSystem as DAO.Recordset
Dim sSQL As String
sSQL = "SELECT * FROM Table"
Set rsSystem = db.OpenRecordSet(sSQL, dbOpenDynaset)
exitRoutine:
If Not (db Is Nothing) Then
db.Close
Set db = Nothing
End If
Set wrk = Nothing
不确定你想用这个记录集做什么。
当我尝试添加它时,我没有在上下文列表中看到DAO,我确定它只是我需要添加到MDB的参考,但对于我的生活,我无法在Access 2010 IDE中的任何位置找到参考 – Tom 2011-05-17 18:14:09
Dim rsSystem As Recordset
ADO和DAO对象模型都包含Recordset对象。你不能交换它们。
既然你没有指定你想要的,你可能是一个ADO记录集......它将解决OpenRecordset方法的类型不匹配错误。
Set rsSystem = CurrentDB.OpenRecordset(sSQL)
该方法返回一个DAO记录,所以首先声明rsSytem本身。
Dim rsSystem As DAO.Recordset
是的,谢谢。上面@罗伯特的解决方案最适合我。所有这些Access的东西现在都开始回到我身上了。 – Tom 2011-05-17 18:22:40
如果我对上面的评论有所了解,那么你决定和ADO一起去做,而这只是被误导了。它确实反映了MS在10年前推广的内容,但他们错误地这样做,并且从此停止将DAO推广到用于使用Jet/ACE/ODBC数据访问的ADO。 – 2011-05-19 15:55:05
如果声明只是一个Recordset
不指定,如果它是DAO或ADO,Access将决定自己是否会DAO或ADO,这取决于你的参考文献的顺序:
打开代码窗口,转到工具 - >参考,然后看看那里的列表。
它看起来像:
你看,在这个例子中,对DAO引用( “Microsoft DAO 3.6对象库”)和 ADO(“Microsoft ActiveX数据对象2.5库“)。
如果您声明了您的Recordset而未指定类型,Access将选择这些引用中的第一个(即位于列表顶部的第一个引用)并创建此类型的Recordset。
所以在这个例子中,它将是一个DAO.Recordset
。
现在回到你的问题:
你声明你的Recordset而不指定类型。
所以如果你的 Access数据库中的第一个引用是ADO,Access将创建一个ADODB.Recordset
。
然后你用一个DAO方法打开它,它需要一个DAO.Recordset
,这就是你得到这个错误的原因。
有两种方法来解决问题:
- 确保您的Access数据库只有一个引用到ADO 或 DAO(但不能同时),那么你并不需要指定记录集的类型。
- 如果您确实需要这两个引用,请始终将您的记录集声明为
DAO.Recordset
或ADODB.Recordset
以确保它确实是您的代码所期望的类型。
感谢您的详细解释。 – Tom 2011-05-17 18:29:31
“表”是SQL中的保留字。如果必须将表格命名为“table”,则将其放在方括号中:"SELECT * FROM [Table]"
。
我得到OpenRecordset方法的类型不匹配错误。我使用上面显示的代码,没有DAO或ADODB限定符。 – Tom 2011-05-17 17:57:24
如果您在代码窗口中,则从菜单栏打开** Tools/References **可以进入** Add References **对话框。 – 2011-05-17 18:14:54
@Robert - 啊,谢谢 – Tom 2011-05-17 18:21:53