如何截取网络版的软件由于网络不通启动出错的信息?

ayukowa 2003-10-17 11:02:50
我做了一个网络版的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.
...全文
73 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨后阳光2000 2003-10-18
  • 打赏
  • 举报
回复
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;
ayukowa 2003-10-18
  • 打赏
  • 举报
回复
谢谢
我的使用ado连接远程数据库sql,我试试看,应该也是可以的
江山易改 2003-10-17
  • 打赏
  • 举报
回复
我用的是ODBC,但是是将ODBC码动态写入的
具体思路是:用一个TDABSE,开始设置联接为FALSE,当启动数据模版的时候,去联接一个已经存在的ODBC键值,如果联接产生异常,则捕获异常值,并且根据异常返回值,进行判断,在Sql server中登陆异常信息包含‘口令有误’表示登陆密码不正确,如果其他就当网络不通吧~~~~~~,因为还有指定服务器不存在等情况存在,然后用一个全局变量传获取信息值,传到工程文件中,就可以了。
ayukowa 2003-10-17
  • 打赏
  • 举报
回复
Manwill71(天皇地虎江山一片)
你的通过什么连接?odbc,还是ado?
说说你的思路
江山易改 2003-10-17
  • 打赏
  • 举报
回复
我做的一程序,有一个数据模版,专门用于连接数据库,你可以参考一下
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;

interface

uses
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.

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧