高手帮我看看下面的代码哪里有错误?(20分)

  • 主题发起人 主题发起人 wangpop
  • 开始时间 开始时间
W

wangpop

Unregistered / Unconfirmed
GUEST, unregistred user!
login 代码:

unit login;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;

type
TLoginFm = class(TForm)
GroupBox1: TGroupBox;
EdName: TEdit;
EdPassword: TEdit;
ButOk: TButton;
ButCannel: TButton;
Label1: TLabel;
Label2: TLabel;
procedure EdNameKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure EdPasswordKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ButCannelClick(Sender: TObject);
procedure ButOkClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
LoginFm: TLoginFm;

var

Maxtimes,Logintimes : integer ;

implementation

uses Dmdata, Poffice;


{$R *.dfm}


procedure TLoginFm.ButOkClick(Sender: TObject);
var Aname,Apass,Sqlstr:string;
begin

if (length(trim(EdName.text))>0) or (length(trim(EdPassword.text))>0) then
begin
Aname := trim(Edname.Text);
Apass := trim(Edpassword.Text);
Sqlstr := 'select * from loguser where (管理员='''+Aname+''') and (密码='''+Apass+''')';

with TADOQuery.Create(nil)do
begin
try
Close;
Connection:=Datamod.ADOConn;

Sql.Clear;
sql.Add(sqlstr);
open;
if recordcount > 0 then
begin

frmain.show; //显示主程序

end
else
begin
showmessage('密码是否正确');
EdPassword.SetFocus;
EdPassword.SelectAll;
end;
finally
Free;
end;
end;
end
else
begin
showmessage('请确定名称和密码是否正确');
Edname.SelectAll;
end;
end;

end.


===========================
工程

program office;

uses
Forms,
Dialogs,
Poffice in 'Poffice.pas' {FrMain},
Dmdata in 'Dmdata.pas' {DataMod: TDataModule},
login in 'login.pas' {LoginFm};

{$R *.res}

begin
Application.Initialize;

Application.CreateForm(TFrMain, FrMain);
Application.CreateForm(TDataMod, DataMod);
if not DataMod.ADOConn.Connected then
begin
ShowMessage('连接后台数据库失败,请检查配置是否完好,数据库是否存在');
halt;
end;
Application.CreateForm(TLoginFm, LoginFm);
LOGINfm.ShowModal;
LOGINfm.close;

Application.Run;
end.




想在运行时先执行 Fmlogin 登录界面, 当密码正确的时,则运行主程序 frmain,并且这个登录关闭,但上面的代码一运行,主程序能运行,但登录窗口还是存在,并且,关掉登录窗口后,主程序也被关掉了,希望高手指点,谢谢!
 
你在登陆窗体上定义一个变量,如 DL:boolean;
如果登陆成功就是TRUE 否则FALSE,后就关闭登陆窗体
然后工程文件里面根据传递DL的值进行判断
Application.CreateForm(TLoginFm, LoginFm);
LOGINfm.ShowModal;
IF LOGINfm.DL=TRUE THEN
BEGIN
创建主窗体
Application.Run;
END
ELSE
Application关闭
 
最好是确认登录了之后才创建其他的窗口,不是主要的窗口动态创建和释放
 
工程文件这样写应该要好点:
begin
Application.Initialize;
Application.CreateForm(TDataMod, DataMod);
if DataMod.ADOConn.Connected then
begin
FmLogin:=TLoginFm.Create(Application);
if FmLogin.ShowModal=mrOK then
begin
Application.CreateForm(TFrMain, FrMain);
FmLogin.Release;
FrMain.Show;
Application.Run;
end
end
else
ShowMessage('连接后台数据库失败,请检查配置是否完好,数据库是否存在');
end.

登录窗的Ok点击事件,若登录成功 ModalResult:=mrOk 否则 ModalResult:=mrCancel

当登录不成功时,Application终止,所有窗口都会被释放的,所以也不需要Terminate等
另外尽量不要用Halt
 
来自:Avenir,

if LoginFm.ShowModal=mrOK then

这句出错是什么原因

另外 if recordcount > 0 then
begin

frmain.show; //显示主程序

end

frmain.show; //显示主程序对吗?
 
来自:Avenir,

if LoginFm.ShowModal=mrOK then

这句出错是什么原因


出错代码是: Undeclared identifier:'mrOK'
 
加上单元Controls
 
Application.Initialize;
Application.CreateForm(TFrMain, FrMain);
Application.CreateForm(TDataMod, DataMod);
with TLoginFm.Create(Application) do
try
ShowModal ;
finally
Free;
end;
Application.Run;
程序文件如上面写,在LoginFm这个窗体中处理登录
LoginFm的OnClose事件可以写程序如下形式,具体代码根据你的程序定
if not Logined then
TerminateProcess(GetCurrentProcess,0);
 
还是出错呀!
 
多人接受答案了。
 
后退
顶部