【发布时间】:2020-10-06 00:38:43
【问题描述】:
我的 excel-sheet 与 sql-server 的数据相连。我的客户应该能够将一些列写回 sql server。 excel 文件名是可变的,但工作表名和列始终是静态的。我用按钮和 vba 尝试过,但结果出错:
查询表达式'UPDATE hbs SET lieferinfo_prio_neu = xlsx.liefer_prio_neu FROM [Provider=SQLOLEDB;Data Source=myserver;Database=mydb;UID=myuser;PWD=mypass;].[tbl_haka_base_size] hbs JOIN [ Tabelle3$] xlsx ON xlsx.Artikelnummer'
内部excel-sheetname是'Tabelle3',自定义名称是'Hakabase':
我尝试了这两个名称,但没有任何结果。
我的代码:
Dim excelConn As String
Dim sqlServerConn As String
Dim sqlCommand As String
Dim conn As ADODB.Connection
excelConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& ThisWorkbook.FullName _
& ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1"";"
sqlServerConn = "[Provider=SQLOLEDB;" _
& "Data Source=myserver;" _
& "Database=mydb;" _
& "UID=ymuser;PWD=mypass;]"
sqlCommand = "UPDATE hbs " _
& " SET lieferinfo_prio_neu = xlsx.liefer_prio_neu " _
& " FROM " & sqlServerConn & ".[tbl_haka_base_size] hbs " _
& " JOIN [Tabelle3$] xlsx " _
& " ON xlsx.Artikelnummer=hbs.artikelnummer"
Set conn = New ADODB.Connection
conn.Open excelConn
conn.Execute sqlCommand
我也尝试通过 openrowset 连接到 sqlserver + 加入 excel-data,但服务器不允许这样做:
& " JOIN OPENROWSET('MSDASQL', " _
& " 'Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" _
& ThisWorkbook.FullName & "', 'SELECT * FROM [Tabelle3$]') xlsx" _
找不到可安装的 ISAM
我认为我必须为每个文件创建一个链接服务器并为这些文件启用“InProcess”。这是不可能的,因为文件是可变的。
【问题讨论】:
标签: sql-server excel vba oledb adodb