uses
Forms,
Windows,
Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {frmLogin},
Unit3 in 'Unit3.pas' {DataModule3: TDataModule};
{$R *.res}
var
frm: TfrmLogin;
begin
Application.Initialize;
Application.CreateForm(TDataModule3, DataModule3); //数据库连接
frm := TfrmLogin.Create(nil);
if frm.ShowModal = mrOk then
begin
frm.Free;
Application.CreateForm(TForm1, Form1);
Application.Run;
end else
begin
frm.Free;
MessageBox(Application.Handle, '登陆错误', 'Error', MB_OK or MB_ICONERROR);
end;
end.
-------------------------------------
登陆窗体的单元
unit Unit2;
在TADOConnection.Connected的帮助中没有说若连接不上会抛出异常呀?
ADOConnection1.ConnectionString:=s1;
ADOConnection1.Connected:=true;
建议改为:
ADOConnection1.ConnectionString:=s1;
ADOConnection1.Open;
if not ADOConnection1.Connected then
begin
application.MessageBox('数据库连接失败,请检查配置文件','连接错误',mb_iconstop+MB_OK);
application.Terminate;
end;
谢谢楼上的大哥~~可是我有点看不明白,你帮我看下原码行么~?
procedure TDataModule1.DataModuleCreate(Sender: TObject);
var
addsini:Tinifile;
s1,user,database,server,password:string;
if_windows_login:boolean;
begin
addsini:=Tinifile.Create(extractfilepath('d:\润丰房产\data\')+'login.ini');
try
user:=addsini.ReadString('Database','User','');
database:=addsini.ReadString('Database','database','');
server:=addsini.ReadString('Database','server','');
password:=addsini.ReadString('Database','password','');
if_windows_login:=addsini.ReadBool('database','if_windows_login',false);
finally
addsini.Free;
end;
ADOConnection1.Connected:=false;
try
begin
if if_windows_login then
s1:='Provider=SQLOLEDB.1;'+
'Integrated Security=SSPI;Persist Security Info=False;'+
'Initial Catalog='+database+';Data Source='+server+''
else
S1:='Provider=SQLOLEDB.1;'+
'Password='+password+';'+
'Persist Security Info=False;'+
'User ID='+user+';'+
'Initial Catalog='+database+';'+
'Data Source='+Server+';'+
'Use Procedure for Prepare=1;'+
'Auto Translate=True;'+
'Packet Size=4096;'+
'Workstation ID=hx05;'+
'Use Encryption for Data=False;'+
'Tag with column collation when possible=False';
end;
ADOConnection1.ConnectionString:=s1;
ADOConnection1.Connected:=true;
except
application.MessageBox('数据库连接失败,请检查配置文件','连接错误',mb_iconstop+MB_OK);
application.Terminate;
end;
end;
end.
还有一个就是登录窗体上有这句话: ado_tmp.Connection:=datamodule1.ADOConnection1;
程序主窗体上有这句话:procedure TE_MainF.FormCreate(Sender: TObject); //ONCREATE事件触发登录界面窗体
begin
datamodule1:=tdatamodule1.Create(self);
if not assigned(E_loginF) then
E_loginF:=TE_loginF.create(self);
E_loginF.ShowModal;
也就是会进行两次连接,不懂为什么第二次的时候怎么就不执行application.terminate了
uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm2, Form2); //登陆窗体
if 登陆成功 then
begin
Application.CreateForm(TForm1, Form1); //主窗体
Application.Run;
end else
begin
MessageBox(Application.Handle, '登陆错误', PChar(Application.Title), MB_OK or MB_ICONERROR);
end;
end.