sql-server - 使用 ActualTech odbc 驱动程序连接到 sql server - Mac 上的 VBA Office 2011

标签 sql-server excel vba macos

我正在使用 MS Office 2011 在 Mac OS X Yosemite 上工作。我正在尝试将我的 Excel 工作簿连接到 sql 数据库。这必须通过 VBA 完成,因为稍后我想读取以及将数据写入数据库。
我找不到与该数据库建立连接的方法。我下载了actualtech odbc驱动程序并设置了我的dsn(虽然不确定我是否做得对,但在主页上找不到如何使用sql-server)。
以下代码是我能找到的全部。我收到错误:

strSRV = "server_name"
strDB = "database_name"
sqlLogin = "TEST" 'has to be changed
sqlPW = "TEST_PW" 'has to be changed

strConn = "ODBC;DSN=" & strSRV & ";UID=" & sqlLogin & ";PWD=" & sqlPW & ";Database=gi_kunden"
                   
With Sheets("Firma").ListObjects
    sqlCommand = "Select * From tbl_firma"
    .Add(SourceType:=0, Source:=strConn, LinkSource:=True, Destination:=ActiveWorkbook.Sheets("Firma").Range("A2")).QueryTable 'Get an error here
    .CommandText = Array(sqlCommand)
End With

With Sheets("Person").ListObjects
    sqlCommand = "Select * From tbl_person"
    .Add(SourceType:=0, Source:=strConn, LinkSource:=True, Destination:=ActiveWorkbook.Sheets("Person").Range("A2")).QueryTable 'Get an error here
    .CommandText = Array(sqlCommand)
End With
还尝试了以下代码:
strConn = "Provider=SQLNCLI10;" & _
          "Server=" & strSRV & ";" & _
          "Database=" & strDB & ";" & _
          "UID=" & sqlLogin & ";" & _
          "PWD=" & sqlPW & ";"

最佳答案

我终于让它工作了............ :)

我从 VBA code to fetch data from Mysql DB in Mac Excel 2011 更改了代码并将其调整为以下内容:

Sub SqlConnection()
    Dim sqlstring As String
    Dim connstring As String
    Dim sLogin As String
    sLogin = "Uid=$;Pwd=$;"
    sqlstringfirma = "select * from gi_kunden.tbl_firma"
    sqlstringperson = "select * from gi_kunden.tbl_person"
    connstring = "ODBC;DSN=KundeDB;" & sLogin

    ActiveWorkbook.Sheets("Firma").Select
    ActiveSheet.Range("A1:T2000").Clear

    Dim qt As QueryTable
    For Each qt In ActiveSheet.QueryTables
        qt.Delete
    Next qt
    With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"), Sql:=sqlstringfirma)
        .BackgroundQuery = False
        .Refresh
    End With

    ActiveWorkbook.Sheets("Person").Select
    ActiveSheet.Range("A1:T2000").Clear

    For Each qt In ActiveSheet.QueryTables
        qt.Delete
    Next qt
    With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"), Sql:=sqlstringperson)
        .BackgroundQuery = False
        .Refresh
    End With
End Sub

这似乎很好用......经过数小时的冲浪和谷歌搜索^^(哈利路亚!!)

不管怎么说,还是要谢谢你 :)

关于sql-server - 使用 ActualTech odbc 驱动程序连接到 sql server - Mac 上的 VBA Office 2011,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33998229/

相关文章:

sql - 动态枢轴sql

sql - 如何将条件传递给 SQL 中的 MINI 语句

excel - 如何获取列中的所有值并更改它们的值

excel - excel中日期时间相减

VBA:VLookUp 多个结果

sql-server - localhost和(LocalDb)/MSSQLLocalDB的sql区别

sql-server - SQL Server 2008合并语句检查并插入记录是否不存在

excel - 是否有任何免费软件工具可用于将 MS Excel 文件转换为 MS Access DB 文件?

shell - 从 Excel Vba 调用 Unix 脚本

vba - 在 VBA 中对多个键进行排序;运行时错误 450 : Wrong number of arguments or invalid property assignment