ACE连接字符串从Excel 2010到自身

时间:2015-07-10 17:11:00

标签: sql excel-vba excel-2010 vba excel

我正在尝试在VBA中使用SQL来更新Excel中现有表中的数据(与vba代码相同的文件)。这是用SQL查询和更新编写的,目的是在推出后不久将源数据移动到数据库,但是现在还有原因。我不断收到错误“操作必须使用可更新的查询。”某些来源在扩展属性中显示ReadOnly而有些不显示;都试过了。 StatusData 是Excel文件中的命名范围。使用以下连接字符串使用命名范围的SELECT语句正常工作:

  

DBFullName = ThisWorkbook.Path& “\”& ThisWorkbook.Name

     

Cnct =“Provider = Microsoft.ACE.OLEDB.12.0; Data Source ='”& DBFullName& “”;“ &安培; _       “扩展属性='Excel 12.0; HDR =是; IMEX = 1';”

查询连接的更改包括使用“Excel 12.0宏”扩展属性和ReadOnly = 0,这些属性已逐步增加。破碎的代码如下:

Cnct = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & DBFullName & "';" & _
  "Extended Properties='Excel 12.0 Macro;ReadOnly=0;HDR=Yes;IMEX=1';"
Set Cn = New ADODB.Connection
Cn.Open ConnectionString:=Cnct
strSQL = "UPDATE StatusData SET Notes='ttt' WHERE [Program Category]='something' AND [Program Name]='something' AND [LN]='1' AND [SN]='101';"
Cn.Execute strSQL, RecordsAffected, adExecuteNoRecords

1 个答案:

答案 0 :(得分:0)

我在使用IMEX时遇到了问题,所以最后我为此目的停止使用它,这个连接字符串从未给我带来使用ADO / ACE连接回工作簿的问题(通常用于SQL GroupBy),但你可能会在建立连接之前需要对数据进行一些调整(我将整个表放入一个数组并循环,然后根据需要进行更改,然后转储回到工作表),这很简单,因为它已经在同一个工作簿中了:

Dim conn    As Object
Dim sPath   As String

sPath = "C:\offlinestorage\temp1.xlsx"
Set conn = CreateObject("ADODB.Connection")
With conn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = Format("Data Source=" & sPath & ";Extended Properties='Excel 12.0 XML;HDR=Yes';")
    .Open
End With