【问题标题】:How to Connect to an Access Database Using VBScript如何使用 VBScript 连接到 Access 数据库
【发布时间】:2020-02-22 04:32:34
【问题描述】:

我有一个 Access 数据库供客户使用 vbscript 连接和查询数据库(因此他们可以在不实际打开 Access 2000 MDB 的情况下实现自动化)。我不知道如何建立数据库连接。

我尝试了几个脚本,同时使用 DAO 和 OLEDB。下面我粘贴了最接近的,使用 ODBC 文件 DSN(我担心使用系统 DSN 需要在客户端进行额外的工作,我试图保持简单)。

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")

'ERROR OCCURS HERE
objConnection.Open "FileDSN=D:\RLS.dsn;" 

objRecordset.CursorLocation = adUseClient
objRecordset.Open "SELECT County FROM CountyTBL" , objConnection, adOpenStatic, adLockOptimistic

这是 RLS.dsn 的内容(我是使用 Windows 控制面板创建的,所以我确信它是正确的):

[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
UID=admin
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize=2048
FIL=MS Access
DriverId=25
DefaultDir=D:\
DBQ=D:\RLS_be.mdb

我收到的错误消息(这与我尝试的其他 2 个脚本类似)是:

“第 5 行,字符 4 错误:[Microsoft][ODBC 驱动程序管理器] 未找到数据源名称并且未指定默认驱动程序。源:用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序”

【问题讨论】:

  • 你是如何运行文件的? 32 位还是 64 位 CSCRIPT.EXE 或 WSCRIPT.EXE?
  • 嗯,其实我只是将它保存为.vbs 到我的桌面并双击它。
  • 我已经发布了a general Q&A on the subject。您可以查看它,并How do I run a VBScript in 32-bit mode on a 64-bit machine?。很可能,在最后一个之后可以解决您的问题。
  • 谢谢埃里克!我快把自己逼疯了,想知道我是否使用了正确的连接语法,但在 32 位下运行它是否有效!

标签: ms-access vbscript


【解决方案1】:

您可以简单地使用 ADO 连接到文件而无需设置 DSN。这对您的客户来说会更简单。

对于Access 2000、2002-2003 MDB,使用以下连接字符串:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\RLS_be.mdb"

对于Access 2007、2010、2013 ACCDB

"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\RLS_be.accdb"

整体连接代码:

' Build connection string
Dim sConnectionString
sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\RLS_be.mdb"

' Create connection object
Dim objConnection
Set objConnection = CreateObject("ADODB.Connection")

' Open Connection
objConnection.open sConnectionString

' Get recordset from SQL query
Dim objRecordset
Dim sQuery
sQuery = "SELECT County FROM CountyTBL"

Set objRecordset = CreateObject("ADODB.Recordset")
objRecordset.CursorLocation = adUseClient
objRecordset.Open sQuery, objConnection, adOpenStatic, adLockOptimistic

【讨论】:

  • 谢谢!我想我已经尝试了直接 ADO 连接字符串并得到了相同的错误消息。但我会试试你说的,它看起来确实比我的其他脚本简单。如果一切都失败了,我将制作一个 ASP.NET 控制台应用程序来完成它。但这可能有相同的连接字符串问题。 Access 非常令人困惑,因为有太多不同的字符串模板,取决于它是 Access 97、2003、2010、ADO、DAO、OLEDB,我无法判断它是语法错误还是我没有驱动程序或错误的技术。
  • 如果您仍然遇到问题,请发布您的更新代码!
  • 至于连接字符串,或许您可以在连接前简单检查文件扩展名并调整Provider。
  • 我会选择 ADO,而不是 ODBC。如果是这样,您是否在该机器上安装了 [ADO (2.8) 驱动程序] (microsoft.com/en-us/download/details.aspx?id=5793)?
【解决方案2】:

这是另一个使用 MS-Access 2016 数据库的连接字符串的版本。该示例连接到“clients.accdb”数据库并检索“ClientName”等于“Joe Smith”的记录的“ClientID”字段的值,然后遍历 SQL 语句返回的记录。

请注意,SQL 语句中的额外引号用于处理名称可能包含单个引号 (') 的情况,例如 O'Connor。

Dim oConn, oRS

Dim ClientName : ClientName = "Joe Smith"

Set oConn = WSH.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.ACE.OLEDB.16.0; Data Source=C:\test\clients.accdb"
Set oRS = oConn.Execute("Select ClientID From Clients Where ClientName=""" & ClientName & """")

Do While Not(oRS.EOF)

 'Do something with the record.

 oRS.MoveNext
Loop

oRS.Close
oConn.Close

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多