gpt4 book ai didi

sql-server - 为什么 Delphi 控制台应用程序需要表单才能使 TSQLConnection 工作?

转载 作者:行者123 更新时间:2023-12-03 15:05:39 25 4
gpt4 key购买 nike

我有一个使用 Delphi XE2 编写的简单控制台应用程序。

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils,
Data.DBXMSSQL,
Data.DB,
Data.SqlExpr;

var
myConnection: TSQLConnection;

begin
try
{ TODO -oUser -cConsole Main : Insert code here }

myConnection := TSQLConnection.Create(nil);
myConnection.DriverName := 'MSSQL';
myConnection.GetDriverFunc := 'getSQLDriverMSSQL';
myConnection.LibraryName := 'dbxmss.dll';
myConnection.VendorLib := 'sqlncli10.dll';
myConnection.LoginPrompt := False;
myConnection.Params.Clear;
myConnection.Params.Add('drivername=MSSQL');
myConnection.Params.Add('schemaoverride=%.dbo');
myConnection.Params.Add('hostname=myserver');
myConnection.Params.Add('database=mydb');
myConnection.Params.Add('blobsize=1');
myConnection.Params.Add('localcode=0000');
myConnection.Params.Add('isolationlevel=ReadCommited');
myConnection.Params.Add('os authentication=True');
myConnection.Params.Add('prepare sql=False');
myConnection.Connected := true;

Writeln('myConnection Is connected');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;

Readln;
end.

当我运行此程序时,出现此错误:

'DBX Error: Driver could not be properly initialized. Client library may be missing, not installed properly, of the wrong version, or the driver may be missing from the system path.'

如果我向应用程序添加 VCL 表单,则会弹出有关启用“Visual Component Library”框架的弹出窗口,对此我说,并且无需执行任何其他操作,现在当我运行应用程序,得到“myConnection 已连接”。

我能看到的唯一区别在于 use 子句:

uses
System.SysUtils,
Data.DBXMSSQL,
Data.DB,
Data.SqlExpr,
Unit1 in 'Unit1.pas' {Form1}

如果我从使用子句中删除“Unit1.pas”{Form1}中的Unit1,则应用程序将无法连接。

我不想在我的控制台应用程序中包含表单,那么当我这样做以使其正常工作时,程序会发生什么情况?

最佳答案

VCL 在初始化期间内部调用 CoInitialize(在当前线程上初始化 COM 库),但控制台应用程序不会(在需要一些 COM 内容的工作线程中也会出现同样的问题)。
只需在程序开始或初始化部分调用CoInitialize,并在工作结束后调用CoUninitialize即可。

http://docwiki.embarcadero.com/RADStudio/Rio/en/DbExpress_Database_Specific_Information

关于sql-server - 为什么 Delphi 控制台应用程序需要表单才能使 TSQLConnection 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22625095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com