本人写一程序,用到了用户登陆,连接的数据库是远程的MSSQL,用的是Soketconn。本地的数据窗口form添加了数据库连接控件,在程序运行时,因为首先要连接远程数据库,所以总是要等一段时间,才能显示出登陆界面,这样觉得很不顺畅。怎么写,可以运行时,先显示登陆窗口,待验证登陆信息时,再连接数据库,验证?

解决方案 »

  1.   

    application.process或者线程单独去做,不会感觉ui假死了
      

  2.   

    我的工程文件是这样的,其中Form1是主窗体,Form2是登陆窗体,program Project1;uses
      Forms,
      Controls,
      Unit1 in 'Unit1.pas' {Form1},
      uWebIntface in 'uWebIntface.pas',
      uWebInc in 'uWebInc.pas',
      Unit2 in 'Unit2.pas' {Form2},
      Unit3 in 'Unit3.pas' {DataModule3: TDataModule};{$R *.res}begin
      Application.Initialize;
      Application.Icon := nil;
      Application.CreateForm(TDataModule3, DataModule3);
      Application.CreateForm(TForm1, Form1);
      Form2 := TForm2.Create(nil);
      try
        if Form2.ShowModal = mrOk then begin
          Application.CreateForm(TForm1, Form1);
          Application.Run;
        end;
      finally
        Form2.Free;
      end;end.怎么修改合适?
      

  3.   

    先出现登陆界面,然后用一个timer来连接远程数据库,就不会出现楼主讲的打开软件半天不出来登陆界面的情况了。。
    为了更人机一些,在成功连到数据库之前,登陆界面上显示正在登陆,请等待字样就好了。
      

  4.   

    把连接数据库的事件写到timer里。。timer一般时间设个100-500就可以了。
      

  5.   

    timer里面写数据库连接怎么写?我都是用form+控件的方式,这样写,可以吗?Application.CreateForm(TDataModule3, DataModule3);
      

  6.   

    我采用了这个方法,就是在数据窗口DataModule3中,将SocketConnection1.connected的属性先设置为False,然后在登陆的form中放入timer,timer的事件是procedure TForm2.Timer1Timer(Sender: TObject);
    begin
       if Unit3.DataModule3.SocketConnection1.Connected = false  then
         Begin
           Unit3.DataModule3.SocketConnection1.Connected := True;
         End;
    end;经过我测试,是可以的。
    这样的话,如果在其他窗体中,也有用到数据库的,是不是也得先放一个timer,这样做啊?如果有多个表单,岂不是很麻烦,有没有这样的,就是将数据库连接的搞一个文件,凡是需要数据库连接的表单,只要引用一下就可以了?
      

  7.   


    你的adoconnection先不要连接啊。active:=false然后等窗体显示出来了,也就是timer启动了,用timer来将adoconnection.open
      

  8.   

    将连接代码放入登录按钮的点击事件中,更重要的是你在窗体DataModule3和Form1的初始化事件中不要加入启动网络连接的代码。通常情况下,我是大概是这样写登录窗体的:
    begin
      Application.Initialize;
      Application.Icon := nil;
      with TForm2.Create(nil) do begin
        if ShowModal = mrOK then begin
          Application.CreateForm(TDataModule3, DataModule3);
          Application.CreateForm(TForm1, Form1);
        end ;
        Free ;
      end;
      Application.Run;
    end.
      

  9.   

    数据库连接如果能连上的话,一般时间还是比较快的,连接失败的话可能有一个连接超时时间的设置
    可以在登录界面的OnActive事件中执行连接操作
    try
      Unit3.DataModule3.SocketConnection1.Connected := True;
      连接标志 := true;
    except
      连接标志 := false;
    end;