永发信息网

VBA Excel里 用ADO访问ACCESS数据库的问题

答案:2  悬赏:0  手机版
解决时间 2021-03-07 13:22
Dim dbPath As String
dbPath = "E:\MyData.accdb"
Dim acApp As Access.Application
Set acApp = New Access.Application
acApp.OpenCurrentDatabase (dbPath)
Dim cn As ADODB.Connection
Set cn = acApp.CurrentProject.Connection

Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset

Dim Sql As String
Sql = "Select * From 0012X32"

rst.Open Sql, cn '****运行到这儿,然后提示错误......
rst.MoveFirst
rst.Move (1)
MsgBox rst.Fields(1).Value

acApp.CloseCurrentDatabase

E:\MyData.accdb里边有个0012X32的表, 但在调试时 总提示错误:
运行时错误'3001',参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突.
最佳答案
rst.Open Sql, cn.ConnectionString 我的数据库语言不是很好,但看了你的代码,也觉得很乱,你的代码至少有好几种方法可以修改,上面是最简单的一种,实际上你的数据库在acapp.OpenCurrentDatabase的时候已经打开了,接下来根本就不需要再次使用cn进行连接。
所以第二种改法是:
acApp.OpenCurrentDatabase (dbPath)
'Dim cn As ADODB.Connection   '不需要再次连接
'Set cn = acApp.CurrentProject.Connection   '不需要再次连接
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
Dim Sql As String
Sql = "Select * From 0012X32"
rst.Open Sql, acApp.ADOConnectString   '我只需要在这里调用连接的数据就可以了,而这个连接数据存储在acApp.ADOConnectString里面。
rst.MoveFirst 
下面是RecordSet的OPEN的用法:
Open 方法 (ADO Recordset)
打开游标。
语法
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
参数
Source 可选。Variant,计算有效的 Command 对象、SQL 语句、表名、存储过程调用、URL 或包含持久存储 Recordset 的文件名或 Stream 对象。
ActiveConnection 可选。Variant,计算有效的 Connection 对象变量名,或包含 ConnectionString 参数的 String。
CursorType 可选。CursorTypeEnum 值,确定在打开 Recordset 时提供者应使用的游标类型。默认值为 adOpenForwardOnly。
LockType 可选。LockTypeEnum 值,确定在打开 Recordset 时提供者应使用的锁定(并发)类型。默认值为 adLockReadOnly。
Options 可选。Long 值,指示提供者计算 Source 参数的方式(如果该参数表示除 Command 对象之外的某些内容),或者指示 Recordset 应该从以前保存过的文件中恢复。可以是一个或多个 CommandTypeEnum 或 ExecuteOptionEnum 值,这些值可以用位 AND 操作符组合。
注意   如果从包含持久 Recordset 的 Stream 中打开 Recordset,那么使用 adAsyncFetchNonBlocking 的 ExecuteOptionEnum 值将不起作用;提取操作将同步进行并发生阻塞。adExecuteNoRecords 或 adExecuteStream 的 ExecuteOpenEnum 值不应与 Open 一起使用。因为ADO语言,直接提供了连接数据库的方法,所以我们可以直接这样来连接数据库:(算作本题的第三种改法吧)
Dim cn As New ADODB.Connection    '直接创建对数据库连接的实例对象cn
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath  '连接数据库
Dim rst As New ADODB.Recordset
Dim Sql As String
Sql = "Select * From 0012X32"
rst.Open Sql, cn
rst.MoveFirst
rst.Move (1)
MsgBox rst.Fields(1).Value
全部回答
例如;远程sqlserver 连接字符串为: provider=sqloledb.1;password=密码;persist security info=true;user id=用户名;initial catalog=数据库名称data source=远程主机ip
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中国人常说的五福是指品德高尚还是子孙满堂
人从心里冒火,直想喝冰水,是什么原因?
2011年海峡两岸共庆辛亥革命100周年。以下对
新寨石在哪里啊,我有事要去这个地方
华为p9屏幕下方英文onyx和huawel有啥区别
内向的人多么,我内向,想死阿。
方寸山怎么加点,我属性是加5敏捷的
狗生小狗后吃什么
9.6的5/6与一个数的62.5%相等,求这个数是多少
五莲农商银行莫家庄子分理处在什么地方啊,我
大嘴裂牙最灵活
广州三本的学校
托福考100分什么水平
相宜本草百合高保湿洁面乳怎么样
4s店贷款买车注意什么
推荐资讯
为什么补牙期间不能去健身房健身
有没有昆虫的英文?
魏大塆林场在哪里啊,我有事要去这个地方
现在中国警察的破案率大概多少?
EXCEL怎么做卡方检验
北京所有寺庙和道观的名字?要速度
【Tom doesn't like studying Maths,so he of
葵丑日生在己酉月什么意思
下列关于代谢的叙述正确的是:A. 叶绿体中的
科亚启智能门锁怎么去啊,有知道地址的么
英雄联盟里一共有多少个皮肤谁知道?
电影脸和电视脸是怎么回事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?