【问题标题】:Connect to sql server with ActualTech odbc Driver - VBA Office 2011 on Mac使用 ActualTech odbc 驱动程序连接到 sql server - Mac 上的 VBA Office 2011
【发布时间】:2016-03-04 01:36:16
【问题描述】:

我正在使用 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 & ";"

【问题讨论】:

  • 错误信息是什么?
  • 运行时错误'5':无效的过程调用或参数:(
  • odbc.connection 和 odbc.recordset 也不起作用...
  • 我也改变了 strSRV="gi_kunden" 就像在 odbc 管理器中一样......
  • 您好:我首先找到了它不起作用的原因......我下载的 ODBC 驱动程序不包括驱动程序。因此,尽管它们显示在 ODBC 管理器中,但它们从未安装过。现在我至少几乎可以连接到服务器了。似乎我需要向允许从其他地方连接的 SQL 数据库添加一个新用户......如果我应该让它工作,我会更新这个线程......如果有人有一些提示,我会很感激他们 :) 现在谢谢 :)

标签: sql-server excel vba macos


【解决方案1】:

我终于得到了更多的信息。我设法通过 odbc 手动从 sql-database 获取数据,这是我记录它得到的代码:

Sub GetFromSQL()
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$E$3"), , xlYes).Name = _
        "Table1"
    Range("Table1[#All]").Select
    With ActiveSheet.QueryTables.Add(Destination:=Range("Table1[[#Headers],[ID]]" _
    ))
        .PostText = "ExternalData_1"
        .Name = True
        .FieldNames = False
        .RefreshStyle = xlOverwriteCells
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .HasAutoFormat = False
        .RefreshOnFileOpen = 1
        .BackgroundQuery = False
        .TablesOnlyFromHTML = True
        .SaveData = True
        .Refresh BackgroundQuery:=False
        .UseListObject = True
    End With
End Sub

问题是,我无法重新运行此宏,因为我连接到数据库的部分以及在此处找不到查询。

有没有人知道我需要在这段代码中添加什么,这样它才能工作?

感谢您的支持。

库凯丝

【讨论】:

    【解决方案2】:

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

    我将代码从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
    

    这似乎很好......经过数小时的冲浪和谷歌搜索^^(halleluja!)

    还是谢谢:)

    【讨论】:

    • 对于任何想要使用此代码的人,请注意,对于您的数据库,您必须声明应选择数据库中的哪个表。对我来说,这是 gi_kunden.tbl_firma 所以 database.table。否则很可能没有从数据库返回数据;) CU
    • 但是,这是一个只读链接,不是吗?你说你也需要写,这就是我想弄清楚怎么做的。您是否找到了在 Mac 上从 VBA 代码写入 sql server 的解决方案?
    • @DanielSkarbek Office 更新后我就放弃了这个项目,他们添加了自己的 odbc 驱动程序,我无法配置。由于我已经有一段时间没有处理这个问题了,所以我真的无法再帮助您了,但是如果您针对您的具体问题提出问题,我相信有人会帮助您。
    • 这很好用而且很优雅。我曾经使用 ADODB 连接,但在切换到 Mac 后无法正常工作。一个小修改,“sLogon”应该是“sLogin”。
    • @SteveGon 我在 mac 上使用 vba 时遇到了很多问题。见这里:stackoverflow.com/questions/35057385/…。这是此问题之后的后续问题。在我在那篇文章中提到的更新之后,我放弃了这个项目。但这可能会帮助您找到解决方案以使您的工作正常。祝你好运! :)
    猜你喜欢
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多