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

5

我有一个使用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 错误:驱动程序无法正确初始化。客户端库可能是缺失的、未正确安装的、版本不正确的,或者驱动程序可能从系统路径中丢失.'

如果我向应用程序添加VCL表单,则会弹出有关启用“Visual Component Library”框架的窗口,我选择,什么都不做,现在当我运行应用程序时,就会显示 'myConnection已连接'。
我唯一能看出来的区别在于uses子句:
uses
  System.SysUtils,
  Data.DBXMSSQL,
  Data.DB,
  Data.SqlExpr,
  Unit1 in 'Unit1.pas' {Form1}

如果我在 uses 子句中删除 'Unit1.pas' {Form1} 中的 Unit1,则应用程序将无法连接。
我不想在我的控制台应用程序中包含窗体,那么当我这样做以使它工作时,程序发生了什么?
1个回答

12

如果我只是在uses子句中添加Vcl.Controls,那么它也可以工作,因为它有自己的Init和Uninit部分。我知道这有点像hack,但当我只想要简单的东西时... - SiBrit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接