我做了一个网络版的delphi6+sqlserver2000,简单的客户段+数据库端
如果网络是通的,软件执行正常,但是,如果网络不通,则启动不起来!点击没反应!
如何截取网络版的软件由于网络不通启动出错的信息?
就是如何用showmessage('网络不通!')工程代码:
program Project1;uses
  Forms,
  windows,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {denglu},
  Unit3 in 'Unit3.pas' {renyuanxinxi},
  Unit4 in 'Unit4.pas' {gongchengxiangmu},
  Unit5 in 'Unit5.pas' {shebeileibie},
  Unit6 in 'Unit6.pas' {changshangxinxi},
  Unit7 in 'Unit7.pas' {shichagnxinxi},
  Unit8 in 'Unit8.pas' {caigourenwu},
  Unit9 in 'Unit9.pas' {caigoujihua},
  Unit10 in 'Unit10.pas' {caigouhetong},
  Unit11 in 'Unit11.pas' {fukuanjilu},
  Unit12 in 'Unit12.pas' {baoxiaojilu},
  Unit13 in 'Unit13.pas' {guazhangjilu},
  Unit14 in 'Unit14.pas' {fuyingfukuan},
  Unit15 in 'Unit15.pas' {daohuotongzhi},
  Unit16 in 'Unit16.pas' {rukuguanli},
  Unit17 in 'Unit17.pas' {chukuguanli},
  Unit18 in 'Unit18.pas' {tuihuojilu},
  Unit19 in 'Unit19.pas' {suopeijilu},
  Unit21 in 'Unit21.pas' {renyuanxinxishaixuan},
  Unit20 in 'Unit20.pas' {gongchengxiangmushaixuan},
  Unit22 in 'Unit22.pas' {AboutBox},
  Unit23 in 'Unit23.pas' {changshangxinxishaixuan},
  Unit24 in 'Unit24.pas' {shichagnxinxishaixuan},
  Unit25 in 'Unit25.pas' {caigourenwushaixuan},
  Unit26 in 'Unit26.pas' {caigoujihuashaixuan},
  Unit27 in 'Unit27.pas' {caigouhetongshaixuan},
  Unit28 in 'Unit28.pas' {fukuanjilushaixuan},
  Unit29 in 'Unit29.pas' {baoxiaojilushaixuan},
  Unit30 in 'Unit30.pas' {guazhangjilushaixuan},
  Unit31 in 'Unit31.pas' {fuyingfukuanshaixuan},
  Unit32 in 'Unit32.pas' {daohuotongzhishaixuan},
  Unit33 in 'Unit33.pas' {rukuguanlishaixuan},
  Unit34 in 'Unit34.pas' {chukuguanlishaixuan},
  Unit35 in 'Unit35.pas' {tuihuojilushaixuan},
  Unit36 in 'Unit36.pas' {suopeijilushaixuan},
  Unit37 in 'Unit37.pas' {renyuanxinxipaixu},
  Unit38 in 'Unit38.pas' {caigouhetongshebei},
  Unit40 in 'Unit40.pas' {kucunguanli},
  Unit41 in 'Unit41.pas' {quanxianguanli},
  Unit42 in 'Unit42.pas' {yonghumima},
  Unit39 in 'Unit39.pas' {shebeicuijiao},
  Unit43 in 'Unit43.pas' {weidinghetongshebei},
  Unit44 in 'Unit44.pas' {FormSplash};{$R *.res}
begin
FormSplash:=TFormSplash.Create(Application);//FormSplash是启动窗体
  FormSplash.Show;
  FormSplash.Update;Application.Initialize;
  if CreateFirst then      
  begin
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(Tdenglu, denglu);
  Application.CreateForm(TAboutBox, AboutBox);
  Sleep(2000);//如果程序小则加延时函数,否则最好不要
  FormSplash.Hide;
  FormSplash.Free;  Application.Run;
  end
  else
  Application.Terminate;
end.

解决方案 »

  1.   

    我做的一程序,有一个数据模版,专门用于连接数据库,你可以参考一下
    program Project1;uses
      Forms,
      Graphics,
      SysUtils,
      Windows,
      UnitMain in 'UnitMain.pas' {FormMain},
      Pageshow in 'Pageshow.pas' {ShowForms},
      DataM in 'DataM.pas' {DataModule2: TDataModule},
      FuncPro in 'FuncPro.pas',
      abouts in 'abouts.pas' {OKRightDlg1},
      UniBank in 'UniBank.pas',
      LogUnits in 'LogUnits.pas' {FormLog},
      UnitTime1 in 'UnitTime1.pas' {FormTime1},
      UnitTime in 'UnitTime.pas' {FormTime};{$R *.res}
    var SForm  : Tform ;
        S_temp : String ;
        DevMode:TDeviceMode;
    begin
    try
        if(Screen.width<> 800 )then
        begin
          if EnumDisplaySettings(nil,0,DevMode) then
          begin
            DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT;
            DevMode.dmPelsWidth:=800;
            DevMode.dmPelsHeight:=600;
            ChangeDisplaySettings(DevMode,0); //设置新的显示参数
          end;
        end ;
       WriteReg(GetIniIfo_DataBaseServer);  //写ODBC值
       SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
       CreateMutex(nil, True, 'MyAppClass_Client_Sender');
      if GetLastError = ERROR_ALREADY_EXISTS then
      begin
        MessageBox(0, '程序已经运行', '顺天交易管理系统' ,MB_ICONERROR);
        DeleteReg() ;    //删除数据库联接
        Halt;
      end;
       Application.ShowMainForm := False;
      Application.Initialize;
      Application.Title :='顺天交易管理系统';
      SForm := TShowForms.Create(Application);
      SForm.Show ;
      SForm.Update ;
      SForm.Canvas.Brush.Style := bsclear;
      SForm.Canvas.Font.Size := 9 ;
      SForm.Canvas.Font.Color := clBlue ;
      SForm.Repaint ;
      SForm.Update ;
      SForm.Canvas.TextOut(70,65,'正在联接数据库......');
      Application.ProcessMessages ;
      sleep(1000);
      Application.CreateForm(TDataModule2, DataModule2);  if DataModule2.DataConnetions = 'OK' then
       begin
          SForm.Repaint ;
          SForm.Update ;
          SForm.Canvas.TextOut(70,65,'数据库联接成功,进行下一步操作......');
          Application.ProcessMessages ;
          sleep(1000);
          SForm.Repaint  ;
          SForm.Update ;
          SForm.Canvas.TextOut(70,65,'正在加载主程序......') ;
          Application.ProcessMessages ;
          sleep(1000);
          Application.CreateForm(TFormMain, FormMain);
          Application.ProcessMessages ;
          if FormMain.ResigerInBank = 'Failed' then
          begin
            SForm.Repaint ;
            Sform.Update ;
            SForm.Canvas.TextOut(70,65,'银行签到失败,请与银行联系') ;
            Application.ProcessMessages ;
            Application.MessageBox('银行签到失败,请与银行联系','提示',0);
            DeleteReg() ;    //删除数据库联接
            Halt ;
          end;
          SForm.Repaint ;
          SForm.Update ;
          SForm.Canvas.TextOut(70,65,'正在加载版权信息......') ;
          Application.ProcessMessages ;
          Application.CreateForm(TOKRightDlg1, OKRightDlg1);
          Application.CreateForm(TFormTime, FormTime);
          Application.CreateForm(TFormTime1, FormTime1);
          Application.ProcessMessages ;
          SForm.Repaint ;
          SForm.Update ;
          SForm.Canvas.TextOut(70,65,'正在启用用户验证程序......') ;
          Application.CreateForm(TFormLog, FormLog);
          Application.ProcessMessages ;
          SForm.Repaint ;
          SForm.Update ;
          SForm.Canvas.TextOut(70,65,'程序启动完毕,开始运行主程序') ;
          Application.ProcessMessages ;
          Sform.Hide ;
          Sform.Free ;
          Application.Run;
       end
       else
       begin
         SForm.Repaint;
         if DataModule2.ExceptionType = '口令有误' then
           S_temp := '错误用户口令名称,程序即将关闭,请与系统管理员联系'
         else
           S_temp := '无法联接数据库,程序即将关闭,请检查网络' ;
         SForm.Canvas.TextOut(70,65,S_temp);
         Application.ProcessMessages ;
         sleep(1000);
         Application.MessageBox(Pchar(S_temp),'提示',0) ;
         DeleteReg() ;    //删除数据库联接
         Halt;
         Application.Run;
       end ;
    except
       Halt;
    end ;
    FormLog.Show ;
    end.
    ——————————————————————————————————————————————unit DataM;interfaceuses
      SysUtils, Classes, DBTables, DB, ADODB,Forms,  windows;type
      TDataModule2 = class(TDataModule)
        Database1: TDatabase;
        Table1: TTable;
        Query1: TQuery;
        UpdateSQL1: TUpdateSQL;
        DataSource1: TDataSource;
        Table2: TTable;
        Query2: TQuery;
        procedure DataModuleCreate(Sender: TObject);
      private
        { Private declarations }
      public
         DataConnetions : String ;
         ExceptionType : String ;
        { Public declarations }
      end;var
      DataModule2: TDataModule2;implementation
    {$R *.dfm}procedure TDataModule2.DataModuleCreate(Sender: TObject);
    var S_Temp : String ;begin
         DataConnetions := ''  ;
         Database1.Params.Add('PASSWORD=lyylscc');
     //    Database1.Params.Add('PASSWORD= ');
       try
         Database1.Connected := True;
         DataConnetions := 'OK' ;
       except
         on E: Exception do
         begin
           S_Temp := E.Message ;
           DataConnetions := 'Failed'  ;
           if pos('登录失败',S_Temp) > 0 then
           ExceptionType := '口令有误'
         else
           ExceptionType := '无法联接服务器';
         end ;
       end ;end;end.
      

  2.   

    Manwill71(天皇地虎江山一片) 
    你的通过什么连接?odbc,还是ado?
    说说你的思路
      

  3.   

    我用的是ODBC,但是是将ODBC码动态写入的
    具体思路是:用一个TDABSE,开始设置联接为FALSE,当启动数据模版的时候,去联接一个已经存在的ODBC键值,如果联接产生异常,则捕获异常值,并且根据异常返回值,进行判断,在Sql server中登陆异常信息包含‘口令有误’表示登陆密码不正确,如果其他就当网络不通吧~~~~~~,因为还有指定服务器不存在等情况存在,然后用一个全局变量传获取信息值,传到工程文件中,就可以了。
      

  4.   

    谢谢
    我的使用ado连接远程数据库sql,我试试看,应该也是可以的
      

  5.   

    try
            if adoconnection1.Connected  then
              adoconnection1.Connected:=false;
            adoconnection1.ConnectionString:=str;
            ADOConnection1.Connected:=true;
          except
            on e:Exception do
              begin
                Showmessage(e.Message);
                exit;
              end;
          end;