标签: adodb

如何在64位计算机上以32位模式运行VBScript?

我有一个以.vbs结尾的文本文件,我在下面写了:

Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "Microsoft.ACE.OLEDB.12.0"
Conn.Properties("Data Source") = "C:\dummy.accdb"
Conn.Properties("Jet OLEDB:Database Password") = "pass"
Conn.Open
Conn.Close
Set Conn = Nothing
Run Code Online (Sandbox Code Playgroud)
  • 当我在Windows 32位机器上执行它时,它运行并结束,没有任何概念(预期).
  • 当我在Windows 64位计算机上执行此操作时,它会收到错误

    无法找到提供商.它可能没有正确安装.

但它已安装.我认为问题的根源是提供者是32位提供者,据我所知它不存在为64位.

如果我在64位计算机上通过IIS运行VBScript(作为ASP文件),我可以选择它应该以32位模式运行.然后它可以找到提供者.

如何在Windows 64位上找到提供程序?我可以告诉CScript(执行.vbs文本文件)以某种方式在32位模式下运行吗?

provider vbscript 64-bit 32-bit adodb

47
推荐指数
4
解决办法
12万
查看次数

adodb和oledb有什么区别?

adodb和之间有什么区别oledb

这两者之间有什么关系?

哪里ado.net在上下文看台adodboledb

oledb ado.net adodb

35
推荐指数
2
解决办法
4万
查看次数

在Excel-VBA中访问SQL数据库

我正在从MSDN复制VBA代码片段,向我展示如何从SQL查询中获取结果到Excel工作表(Excel 2007):

Sub GetDataFromADO()

    'Declare variables'
        Set objMyConn = New ADODB.Connection
        Set objMyCmd = New ADODB.Command
        Set objMyRecordset = New ADODB.Recordset

    'Open Connection'
        objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;"
        objMyConn.Open

    'Set and Excecute SQL Command'
        Set objMyCmd.ActiveConnection = objMyConn
        objMyCmd.CommandText = "select * from myTable"
        objMyCmd.CommandType = adCmdText
        objMyCmd.Execute

    'Open Recordset'
        Set objMyRecordset.ActiveConnection = objMyConn
        objMyRecordset.Open objMyCmd

    'Copy Data to Excel'
        ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)

End Sub
Run Code Online (Sandbox Code Playgroud)

我已经添加了Microsoft ActiveX Data Objects 2.1 Library作为参考.这个数据库是可访问的.

现在,当我运行这个子程序时,它有一个错误:

运行时错误3704:关闭对象时不允许操作.

在声明中:

ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

谢谢.

sql excel vba adodb excel-vba

26
推荐指数
2
解决办法
18万
查看次数

ADODBC不能从程序集中加载"ADODB.FieldsToInternalFieldsMarshaler"类型

我正在尝试读取这样的ADOBD.Recordset对象(我的第一次,所以原谅我的"noobness":D):

Presentation.Category categorySvc = new Presentation.Category();
ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128);
foreach (var category in categories.Fields) // here is where I get the exception
{
   // ...
}
Run Code Online (Sandbox Code Playgroud)

ListAll调用工作正常 - 我得到Recordset一些数据,我通过对对象执行QuickWatch确认.但是当代码到达categories.Fields时,我得到以下异常:

无法从程序集"TestCOMCalls,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"加载类型"ADODB.FieldsToInternalFieldsMarshaler".

我用谷歌搜索了这个错误(或者只是通过'ADODB.FieldsToInternalFieldsMarshaler'找不到任何可以帮助我解决问题的东西).

我想知道,我错过了一个参考?除了正常的引用,我已经将这个添加到我的项目中:

ADODB Microsoft ActiveX数据对象2.5库C:\ WINDOWS\assembly\GAC\ADODB\7.0.3300.0__b03f5f7f11d50a3a\ADODB.dll

就像我说的那样,我以前从未这样做过,但通过谷歌搜索,我能够看到一些人这样做(foreach on the object.Fields),它似乎适合他们.

非常感谢任何帮助或方向:)

谢谢!

activex adodb

22
推荐指数
6
解决办法
3万
查看次数

VBScript和Access MDB - 800A0E7A - "无法找到提供程序.可能未正确安装"

我在连接到访问MDB数据库的VBScript时遇到问题.我的平台是Vista64,但其中大部分资源都用于ASP/IIS7.

很简单,我无法连接它.我收到以下错误:800A0E7A - "无法找到提供程序.可能未正确安装"

我的代码是:

Set conn = CreateObject("ADODB.Connection")
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\database.MDB"
conn.Open strConnect
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经运行了%WINDIR%\ System32\odbcad32.exe来尝试在32位模式下配置驱动程序,但它还没有完成.任何建议将不胜感激

作为一个补充,我试图让这个.vbs脚本通过双击运行,并让它做它的事情.此代码未嵌入到另一个lang /脚本中.

oledb vbscript ms-access adodb

14
推荐指数
2
解决办法
8万
查看次数

在VBA中深层复制或克隆ADODB记录集

我一直在寻找一种在VBA中复制或复制记录集的方法.我的意思是,让不正确的数据彼此独立.

我试过了

Set copyRS = origRS.Clone
Set copyRS = origRS
Run Code Online (Sandbox Code Playgroud)

当我使用任何方法时,我无法修改一个记录集而不修改另一个记录集.所以在这个例子中:

  1. 我创建了一个记录集
  2. 我用John命名记录集
  3. 我克隆了记录集
  4. 我修改克隆的那个
  5. 检查结果

码:

Dim origRS As Recordset, copyRS As Recordset
Set origRS = New Recordset
'Create field
origRS.Fields.Append "Name", adChar, 10, adFldUpdatable
origRS.Open
'Add name
origRS.AddNew "Name", "John"
'Clone/copy
Set copyRS = origRS.Clone
'Change record in cloned/copied recordset
copyRS.MoveFirst
copyRS!Name = "James"
'This should give me "JamesJohn"
MsgBox copyRS.Fields(0).Value & origRS.Fields(0)
Run Code Online (Sandbox Code Playgroud)

但不幸的是,对我来说,这会修改两个记录集

我的问题是:

有没有办法从另一个记录集复制记录集,然后彼此独立地修改数据(没有循环)?

我知道你可以通过一个循环来做到这一点,但是没有别的办法吗?

excel vba adodb recordset excel-vba

13
推荐指数
1
解决办法
7465
查看次数

在我的数据库中查找DSN?

我有一个SQL数据库,并希望使用VBA连接到它,以支持一些遗留功能.我正在使用ADODB连接,需要知道我的数据库DSN是什么.我怎么能找到这个?

我正在使用SQL Server 2008,谢谢!:d

sql vba adodb

12
推荐指数
1
解决办法
4万
查看次数

ADODB查询超时

我正在尝试打开一个超时的查询.我试过设置超时属性,但它似乎不想接受它.

使用MS-SQL Server Management窗口(SQL Server 2005)执行查询需要34秒,所以我知道我需要增加超时.

当前代码:

Public Function retRecordSet(StrSQL)
Dim cmd ' as new ADODB.Command
Dim rs 'As New ADODB.Recordset

Set cmd = CreateObject("ADODB.Command")
Set rs = CreateObject("ADODB.Recordset")

cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = StrSQL
cmd.CommandTimeout = 0
Set rs = cmd.Execute

Set retRecordSet = rs
End Function
Run Code Online (Sandbox Code Playgroud)

我也试过设置连接本身的超时CurrentProject.Connection.CommandTimeout = 120,但如果我在此命令后立即查询该值,它仍然保持在30

连接属性:

Provider = Microsoft.Access.OLEDB.10.0; Persist Security Info = False; Data Source = MyServer; Integrated Security = SSPI; Initial Catalog = MyDatabase; Data Provider = SQLOLEDB.1

Data Source …
Run Code Online (Sandbox Code Playgroud)

ms-access vba adodb access-vba ms-access-2010

12
推荐指数
3
解决办法
6万
查看次数

使用ADODB运行多个异步查询 - 回调并不总是触发

我有一个Excel工作簿,它向数据库发出三个查询以填充隐藏工作表上的三个表,然后运行三个"刷新"脚本将这些数据拉到三个可见的演示文稿表(每个查询一个).同步运行它非常慢:刷新的总时间是三个查询中每个查询的时间总和加上每个"刷新"脚本运行的时间总和.

我知道VBA不是多线程的,但我认为可以通过异步触发查询来加快速度(从而允许在执行时完成一些清理工作),并且然后在数据返回时为每个工作表执行填充/刷新工作.

我重写了我的脚本如下(请注意,我必须删除连接字符串,查询字符串等,并使变量通用):

Private WithEvents cnA As ADODB.Connection
Private WithEvents cnB As ADODB.Connection
Private WithEvents cnC As ADODB.Connection

Private Sub StartingPoint()
    'For brevity, only listing set-up of cnA here. You can assume identical
    'set-up for cnB and cnC
    Set cnA = New ADODB.Connection

    Dim connectionString As String: connectionString = "<my conn string>"
    cnA.connectionString = connectionString

    Debug.Print "Firing cnA query: " & Now
    cnA.Open
    cnA.Execute "<select query>", adAsyncExecute  'takes roughly 5 seconds to execute

    Debug.Print "Firing cnB query: " & Now …
Run Code Online (Sandbox Code Playgroud)

excel vba adodb excel-vba excel-2010

11
推荐指数
1
解决办法
8917
查看次数

在将其设置为空之前,是否需要关闭Adodb.recordset对象?

Dim rs as ADODB.Recordset
set rs = ReturnARecordset 'assume ReturnARecordset does just that...

'do something with rs

rs.Close
set rs = Nothing
Run Code Online (Sandbox Code Playgroud)

是否有必要在将其设置为空之前调用rs.Close?

编辑:我们有一个全局连接,我们在应用程序的持续时间内保持打开状态,所有记录集对象都使用相同的连接.我在下面看到两个答案,谈到需要关闭记录集以确保连接不会悬空.对我而言,这听起来像很多愚蠢的谈话,因为连接是用连接对象控制的,而不是记录集对象吗?但如果我在这里遗漏了什么,请告诉我......

vb6 database-connection adodb

10
推荐指数
1
解决办法
1万
查看次数