我正在使用 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/