sql-server - Excel 自动化 - 刷新查询时禁用 SQL 登录对话框

标签 sql-server vba excel

我正在使用 Excel 自动化来刷新嵌入在 Excel 2010 工作簿中的 SQL 查询(工作簿连接),然后按预定的时间间隔将电子表格输出为 PDF。一切正常,除非 SQL 服务器不时发生脱机/不可用。我只是想忽略这个问题并继续,但 Excel 似乎坚持显示“SQL Server 登录”对话框窗口,然后停止我的程序,直到对话框关闭。有没有办法禁用这个对话框?我尝试了以下方法:

Application.DisplayAlerts = False 

这停止了​​错误对话框,但不会阻止“SQL Server 登录”对话框。

最佳答案

我通过使用 FindWindow 解决了这个问题(在后台线程上运行)检查 SQL 登录对话框的外观,然后使用 PostMessage关闭对话框,允许程序在无人看管的情况下继续。见代码:

var
  blnTerminateThread: Boolean;

function CloseSQLLoginDialog(Parameter: Pointer): Integer;
var
  hwdSQLLoginDlg: THandle;
begin
  Result := 0;
  hwdSQLLoginDlg := 0;
  blnTerminateThread := False;
  while (hwdSQLLoginDlg = 0) and (blnTerminateThread = False) do
    hwdSQLLoginDlg := FindWindow(nil, 'SQL Server Login');
  if (hwdSQLLoginDlg <> 0) then
  begin
    // Close the 'SQL Server Login' dialog window
    PostMessage(hwdSQLLoginDlg, WM_CLOSE, 0, 0);
    Result := 1;
  end;
  EndThread(Result);
end;

...

XLBook.Connections[intCount].OLEDBConnection.BackgroundQuery := False;
intThreadID := BeginThread(nil, 0, Addr(CloseSQLLoginDialog), nil, 0, intIDParam);
blnRefreshResult := XLBook.Connections[intCount].OLEDBConnection.Refresh;
blnTerminateThread := True;
CloseHandle(intThreadID);

关于sql-server - Excel 自动化 - 刷新查询时禁用 SQL 登录对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22041966/

相关文章:

python - 将整个 Excel 文件导出为 CSV

c# - 如何在 Excel 中的 ListObject 绑定(bind)中触发更新?

excel - 使用 Excel 中的 Web 服务功能使用 Yahoo API 从 Yahoo Finance 提取 "Next Earnings Date"

mysql - 仅在满足条件时运行 SQL 查询

sql-server - 什么存储位置、SQL Server 或文件系统会在保存 tiff 图像时产生更好的性能?

vba - 这四种不同方式输入参数有什么区别?

vba - 使用 VBA 将富文本表格从 Outlook 电子邮件复制到 Excel?

mysql - 将 Excel 工作表导入 phpMyAdmin

asp.net - 我应该在哪里创建密码盐

在 SELECT 中使用 FILTER 的 SQL GROUP BY