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

DimdbPathAsStringdbPath="E:\MyData.accdb"DimacAppAsAccess.ApplicationSetacApp=NewAcce... 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',参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突.
展开
 我来答
unsamesky
2013-08-11 · TA获得超过2735个赞
知道小有建树答主
回答量:859
采纳率:100%
帮助的人:433万
展开全部
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
charicao
2013-08-11
知道答主
回答量:2
采纳率:0%
帮助的人:2889
展开全部
Sql = "Select * From [0012X32]"
追问
不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
满运穆兴安
2019-09-29 · TA获得超过3839个赞
知道大有可为答主
回答量:3101
采纳率:25%
帮助的人:201万
展开全部
开始录制宏,进行一次导入,停止录制,然后编辑刚才的代码,获得关键语句来自己使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式