【问题标题】:VBA Error with Recordset, .open doesn't workRecordset 出现 VBA 错误,.open 不起作用
【发布时间】:2014-12-18 23:28:48
【问题描述】:

在 With 语句中,“.Open”行出现错误。

我试图确保正确定义所有引用。还有什么可能导致问题? 感谢您的专业知识。

Option Explicit



Sub ConnectTODB2()
'early binding

 Dim CustomerTEST As ADODB.Connection
 Dim rs As ADODB.Recordset
 Dim sqlText As String
 Dim ConStrAccess As String

 Set CustomerTEST = New ADODB.Connection
 ConStrAccess = "Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data           Source=C:\Users\YacubDavid\Desktop\CIC SOD TOOL 2011 GBW.mdb;Mode=ReadWrite;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False"



  CustomerTEST.Open ConStrAccess

  sqlText = "select * FROM 50 GBW People;"
  Set rs = New ADODB.Recordset

  rs.Open sqlText, CustomerTEST, adOpenForwardOnly, adLockReadOnly, adCmdText



 'Worksheets.Add
 'Range("A2").CopyFromRecordset rs




  rs.Close
  CustomerTEST.Close
  Set CustomerTEST = Nothing

结束子

【问题讨论】:

  • 将有助于包含实际的错误消息,但猜测:Set .ActiveConnection = CustomerTEST
  • 你能发布你的连接字符串吗?如果这不正确,您将永远无法成功打开数据库连接。
  • 感谢您的回复!我应该补充一点,我试图从 excel 连接到访问数据库(2010)。错误消息还说这是一个运行时错误 - 无效的 SQL 指令。需要 DELETE、INSERT、SELECT、PROCEDURE 或 UPDATE。

标签: excel vba connection-string adodb recordset


【解决方案1】:

12/20 更新:将 [] 放在表名周围。另一种选择是以下方法:

Option Explicit

Sub ConnectTODB()
'early binding

Dim CustomerTEST As ADODB.Connection
Dim rs As ADODB.Recordset
Dim r As Range
Dim ConStrAccess    As String
Dim sqlText         As String

Set CustomerTEST = New ADODB.Connection
ConStrAccess = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                         "Data Source=C:\Users\YacubDavid\Desktop\xyz SOD TOOL 20x1 abc.mdb;" & _
                         "Jet OLEDB:Engine Type=5;" & _
                         "Persist Security Info=False;"
CustomerTEST.Open ConStrAccess

sqlText = "select * from [50 GBW People];"
Set rs = New ADODB.Recordset
rs.Open sqlText, CustomerTEST, adOpenForwardOnly, adLockReadOnly, adCmdText

'Worksheets.Add
'Range("A2").CopyFromRecordset rs

rs.Close
CustomerTEST.Close
Set CustomerTEST = Nothing

End Sub

【讨论】:

  • 感谢您的回复!我应该补充一点,我试图从 excel 连接到访问数据库(2010)。错误消息还说这是一个运行时错误 - 无效的 SQL 指令。需要 DELETE、INSERT、SELECT、PROCEDURE 或 UPDATE。
  • 这个错误是使用您的原始代码还是我提供的代码?您需要查看 SQL 语法,因为这很糟糕。请发布您的实际 SQL
  • 再次感谢您的回复。我准确地输入了你的文字。现在我得到了错误:rs.Open sqlText,CustomerTEST,adOpenForwardOnly,adLockReadOnly,adCmdText。错误消息表明我在 FROM 命令中有语法错误。接下来我将发布实际代码。
  • 您需要在表名周围加上括号,因为它包含空格。每当您引用名称包含空格或以数字开头的表或字段或对象时,您都需要括号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2020-11-29
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多