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',参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突. 展开
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',参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突. 展开
3个回答
展开全部
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询