我程序的启动顺序为frmSplash -> TDataModule(TADOConnection连接SQL Server数据库) -> (1.连接失败)Application.Terminate(打开数据库连接工具DBLinker.exe) -> (2.连接成功)frmLogin -> frmMain其中frmMain为系统主窗口。不知道怎样实现最好,请高人指教!

解决方案 »

  1.   

    procedure TFrmDm.DataModuleCreate(Sender: TObject);
    var
      serverName, databaseName, userName, password: string;
    begin
      try
        readFromIni(serverName, databaseName, userName, password);
        ADOConnection1.ConnectionString := SADOContStr;
        ADOConnection1.Connected := true;
      except
        FrmDBConnect := TfrmDBConnect.Create(nil);
        FrmDBConnect.ShowModal;
      end;
    end; FrmDBConnect 为自己设计的数据库配置窗体unit DBConnectFrm;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, Buttons, INIFiles;type
      TfrmDBConnect = class(TForm)
        Panel1: TPanel;
        Panel2: TPanel;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        edtServerName: TEdit;
        edtDatabaseName: TEdit;
        edtUserName: TEdit;
        edtPassword: TEdit;
        SpbntOk: TSpeedButton;
        SpbtnCancel: TSpeedButton; 
        procedure FormCreate(Sender: TObject);
        procedure SpbntOkClick(Sender: TObject);
        procedure SpbtnCancelClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    procedure WriteToIni(const aServerName, aDatabaseName, aUserName, aPassword: string);//向配置文件写入信息function DBConnectExecute(aClass: TFormClass): boolean; //用于打开窗体,并判断是否配置成功----------
    注意创建顺序 参考如下代码:
      Application.Initialize;
      Application.Title := '计量器具管理系统';
      Application.CreateForm(TFrmMain, FrmMain);
      Application.CreateForm(TFrmDm, FrmDm);
      if IsLogin = 1 then
          Application.Terminate;
          
      if TFrmLogin.ExecLogin then Application.Run
      else Application.Terminate;var
      Connected: Boolean;
      frmDBConnect : tfrmDBConnect;
    implementationuses Main,PubFuntion, Login, DM, GlobalUnit;{$R *.dfm}
    //用于打开窗体,并判断是否配置成功
    function DBConnectExecute(aClass: TFormClass): boolean;
    begin
      with aClass.Create(Application) do
      begin
        try
          showModal;
        finally
          free;
          result := Connected;
        end;
      end;
    end;    //向配置文件写入信息
    procedure WriteToIni(const aServerName, aDatabaseName, aUserName, aPassword: string);
    var
      IniFile: TIniFile;
      FileName: string;
    begin
      FileName := ExtractFilePath(application.ExeName) + '\DB.ini';
      IniFile := TIniFile.Create(FileName);
      IniFile.WriteString('DB', 'ServerName', aServerName);
      IniFile.WriteString('DB', 'DatabaseName', aDatabaseName);
      IniFile.WriteString('DB', 'UserName', aUserName);
      IniFile.WriteString('DB', 'Password', Encrypt(aPassword));
      IniFile.Free;
    end;//当窗体被创建时,将配置文件信息显示到窗体上
    procedure TfrmDBConnect.FormCreate(Sender: TObject);
    var
      serverName, databaseName, userName, password: string;
    //  FileName: string;
    begin
      //FileName := ExtractFilePath(application.ExeName) + '\DB.ini';
     // if FileExists(FileName) then
        readFromIni(serverName, databaseName, userName, password);
      Connected := False;
    end;//写入ini,并测试是否连接上
    procedure TfrmDBConnect.SpbntOkClick(Sender: TObject);
    var
      serverName, databaseName, userName, password: string;
    begin
      writeToIni(edtServerName.Text, edtDatabaseName.Text, edtUserName.Text, edtPassword.Text);
      readFromIni(serverName, databaseName, userName, password);
      FrmDm.ADOConnection1.ConnectionString := SADOContStr;
      FrmDm.ADOConnection1.Connected := true;
      if FrmDm.DBConnect() then
      begin
        Application.MessageBox('连接成功!', '提示', mb_iconInformation + mb_defbutton1);
        Connected := True;
        Close;
      end
      else
      begin
        Application.MessageBox('连接失败!', '提示', mb_iconInformation + mb_defbutton1);
      end;
    end;procedure TfrmDBConnect.SpbtnCancelClick(Sender: TObject);
    begin
      close;
      IsLogin := 1;
    end;end.
      

  2.   

    你的逻辑不是很清楚吗
    创建flash
    创建TDataModule,执行数据库连接,如果连接失败Application.Terminate
    如果连接成功
    创建frmLogin ,登录成功创建frmMain
    释放flash
      

  3.   

    刚才 恢复时有部分代码乱了顺序---------- 
    注意创建顺序 参考如下代码: 
      Application.Initialize; 
      Application.Title := '计量器具管理系统'; 
      Application.CreateForm(TFrmMain, FrmMain); 
      Application.CreateForm(TFrmDm, FrmDm); 
      if IsLogin = 1 then 
          Application.Terminate; 
          
      if TFrmLogin.ExecLogin then Application.Run 
      else Application.Terminate; 这部分抽出来,是工程的View source中部分代码