我构建了一个基于 Excel 的工具,它使用 ODBC 连接和查询表从 SQL Server (2014) 提取数据。该工具必须与 Mac Office 2016 兼容(因此需要 ODBC 和查询表)。
我正在努力测试用户是否可以连接到 SQL Server。使用 ODBC 连接,如果连接失败,则会打开一个 SQL Server 错误登录对话框,然后在我的错误处理生效之前会打开一个登录对话框。
我找到的这个问题的每个解决方案使用 ADODB https://stackoverflow.com/a/632449/2200824(与 Mac 不兼容)或者是访问VBA的解决方案 http://answers.microsoft.com/en-us/office/forum/office_2007-access/ms-access-vba-connecting-to-unavailable-sql-server/ecc8df4a-3164-44bb-b959-a61998d83e14. 这个答案 https://stackoverflow.com/a/27245389/2200824谈论 TCP 连接,但我找不到任何关于 TCP 和 VBA 的内容,看起来与 Mac 兼容。
有谁知道使用 VBA 测试与 Office for Mac 2016 兼容的 SQL Server 连接的方法吗?
我如何使用 ODBC 和查询表连接到 SQL Server 的示例。
Sub main()
On Error GoTo err1
Dim connstring As String
Dim sqlstring As String
Dim dArr As Variant
Dim qt As QueryTable
connstring = "ODBC;DRIVER={SQL Server};SERVER=SERVERNAME;DATABASE=master;Trusted_Connection=yes"
sqlstring = "SELECT 1"
Set qt = ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=ThisWorkbook.Sheets(1).Range("A1"), Sql:=sqlstring)
With qt
.BackgroundQuery = False
.RowNumbers = False
.Refresh
End With
dArr = qt.ResultRange.Value
qt.Delete
ThisWorkbook.Sheets(1).Cells.Clear
Exit Sub
err1:
Stop
End Sub
Windows 上也存在同样的问题。这里有两个可能的答案。
1)不确定是否与MAC兼容:https://answers.microsoft.com/en-us/msoffice/forum/msoffice_access-mso_other-mso_2007/connection-error-when-network-down/35d5be85-f850-4953-a393-6fafa687961f?messageId=0c063768-69c7- 43ce-a9ed-9139f8cfd830 https://answers.microsoft.com/en-us/msoffice/forum/msoffice_access-mso_other-mso_2007/connection-error-when-network-down/35d5be85-f850-4953-a393-6fafa687961f?messageId=0c063768-69c7-43ce-a9ed-9139f8cfd830
2)原则上,这应该可行,我还没有做到。需要 sqlcmd.exe = 操作系统级别的 sql 客户端,您可以在其中通过命令行进行查询。在操作系统提示符下,使用 sqlcmd.exe 执行简单的“select 1”操作,该命令要么成功并创建 sqlSuccess.{TestID}.tmp 文件,要么失败且不执行任何操作。然后构建一个 VBA 函数,例如 fnGetConnString(),该函数运行命令并验证 sqlSuccess.{TestID}.tmp 文件是否存在并将其删除。如果程序失败,该函数可以停止您的程序,或者返回您想要的连接字符串并运行为(伪代码):
connstring = fnGetConnString( {connection string inputs})
if connstring = '' then
msgbox( "Not a valid connection or sever unavailable: {connection string inputs}"
exit sub ''#halt all
end if
除此之外,该函数需要接受 {TestID} 输入以保证它具有正确的文件。
有关 sqlcmd 帮助,请参阅:https://learn.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-ver15 https://learn.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-ver15
对于来自 VBA 的操作系统命令,请参阅:使用 Excel VBA 在命令提示符下执行命令 https://stackoverflow.com/questions/17956651/execute-a-command-in-command-prompt-using-excel-vba
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)