在 Outlook 365 中查询失败 VBA SQL?
Failed VBA SQL Query in Outlook 365?
我在 Outlook 中有一些 VBA 代码 运行 是一个 SQL 查询并填充我设计的用户表单。这段代码之前 运行 在一台 PC 上没问题,然后我得到了一台新笔记本电脑,我直接将 outlook VBA 模块复制过来。
当我尝试 运行 时,我只是收到错误“编译错误:找不到项目或库”,并且 RS.open 语句中的文本“adOpenStatic”被突出显示。以前,如果我的 SQL 查询错误或驱动程序丢失,我会看到同样的错误,但我仔细检查了两者。我将确切的代码复制到 excel VBA 模块中,它按预期 运行。
我能看到的唯一其他区别是我从 Outlook 2019 转到了 Office 365 企业版。
Dim server, database, login_user, password, port As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strSQL As String
server = "dummy"
database = "dummy"
login_user = "dummy"
password = "dummy"
port = "dummy"
Set cn = New ADODB.Connection
cn.ConnectionString = "DRIVER={MySQL ODBC 8.0 ANSI Driver};Provider=MSDASQL;" & "SERVER=" & server & ";" & " DATABASE=" & database & ";" & "UID=" & login_user & ";PWD=" & password & "; OPTION=3; PORT=" & port & ";Connect Timeout=20;"
'open the connection
cn.Open
Set rs = New ADODB.Recordset
strSQL = "SELECT * FROM quote WHERE id = 1505"
rs.Open strSQL, cn, adOpenStatic
With rs
Do Until .EOF
'parse out relevant project information
rs.MoveNext
Loop
End With
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
我可以 运行 MySQL workbench 中的确切查询,并且它按预期工作。相同的代码可以在 Excel 中 运行 没有问题这一事实告诉我,Outlook 中可能存在我不知道的语法差异?还有其他人有想法吗?
注意,如果不是很明显,我用“Dummy”省略了我的数据库详细信息,但实际代码具有正确的字符串。
转到 VBA 编辑器,然后选择 Tools-References;并勾选 'Microsoft ActiveX Data Objects'(最新版本)旁边的框。现在应该可以编译了。
This code was previously running fine on one PC, then I was issued a new laptop and I copied the outlook VBA module directly over.
您需要re-add旧机器上的所有 COM 引用。
从 Tools
菜单中选择 References
以显示 References dialog box
。
“引用”对话框显示在操作系统中注册的所有对象库。滚动列表以找到您要引用其对象库的应用程序。如果应用程序未列出,您可以使用 Browse
按钮搜索对象库(*.olb 和 .tlb)或可执行文件(.exe 和 *. Windows 上的 dll)。复选框被选中的引用由您的项目使用;未选中的不使用,但可以添加。
我在 Outlook 中有一些 VBA 代码 运行 是一个 SQL 查询并填充我设计的用户表单。这段代码之前 运行 在一台 PC 上没问题,然后我得到了一台新笔记本电脑,我直接将 outlook VBA 模块复制过来。
当我尝试 运行 时,我只是收到错误“编译错误:找不到项目或库”,并且 RS.open 语句中的文本“adOpenStatic”被突出显示。以前,如果我的 SQL 查询错误或驱动程序丢失,我会看到同样的错误,但我仔细检查了两者。我将确切的代码复制到 excel VBA 模块中,它按预期 运行。
我能看到的唯一其他区别是我从 Outlook 2019 转到了 Office 365 企业版。
Dim server, database, login_user, password, port As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strSQL As String
server = "dummy"
database = "dummy"
login_user = "dummy"
password = "dummy"
port = "dummy"
Set cn = New ADODB.Connection
cn.ConnectionString = "DRIVER={MySQL ODBC 8.0 ANSI Driver};Provider=MSDASQL;" & "SERVER=" & server & ";" & " DATABASE=" & database & ";" & "UID=" & login_user & ";PWD=" & password & "; OPTION=3; PORT=" & port & ";Connect Timeout=20;"
'open the connection
cn.Open
Set rs = New ADODB.Recordset
strSQL = "SELECT * FROM quote WHERE id = 1505"
rs.Open strSQL, cn, adOpenStatic
With rs
Do Until .EOF
'parse out relevant project information
rs.MoveNext
Loop
End With
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
我可以 运行 MySQL workbench 中的确切查询,并且它按预期工作。相同的代码可以在 Excel 中 运行 没有问题这一事实告诉我,Outlook 中可能存在我不知道的语法差异?还有其他人有想法吗?
注意,如果不是很明显,我用“Dummy”省略了我的数据库详细信息,但实际代码具有正确的字符串。
转到 VBA 编辑器,然后选择 Tools-References;并勾选 'Microsoft ActiveX Data Objects'(最新版本)旁边的框。现在应该可以编译了。
This code was previously running fine on one PC, then I was issued a new laptop and I copied the outlook VBA module directly over.
您需要re-add旧机器上的所有 COM 引用。
从 Tools
菜单中选择 References
以显示 References dialog box
。
“引用”对话框显示在操作系统中注册的所有对象库。滚动列表以找到您要引用其对象库的应用程序。如果应用程序未列出,您可以使用 Browse
按钮搜索对象库(*.olb 和 .tlb)或可执行文件(.exe 和 *. Windows 上的 dll)。复选框被选中的引用由您的项目使用;未选中的不使用,但可以添加。