delphi7 中登陆如果密码正确进入对于的主窗体中,看看我的代码哪里不对~~
procedureTForm2.Button1Click(Sender:TObject);beginwithAdoquery1dobeginadoquery1.Close...
procedure TForm2.Button1Click(Sender: TObject);
begin
with
Adoquery1 do
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select*from 操作员信息表 where(操作员姓名=:a)and(操作员密码=:b)');
adoquery1.Parameters.ParamByName('a').Value:=Trim(edit1.Text);
adoquery1.Parameters.ParamByName('b').Value:=Trim(edit2.Text);
adoquery1.Open;
end;
if adoquery1.RecordCount>0 then
application.CreateForm(Form1,Tform1);
Form2.ShowModal;
else
application.MessageBox('用户名或密码不正确,请重新输入!','提示',0+64);
end; 展开
begin
with
Adoquery1 do
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select*from 操作员信息表 where(操作员姓名=:a)and(操作员密码=:b)');
adoquery1.Parameters.ParamByName('a').Value:=Trim(edit1.Text);
adoquery1.Parameters.ParamByName('b').Value:=Trim(edit2.Text);
adoquery1.Open;
end;
if adoquery1.RecordCount>0 then
application.CreateForm(Form1,Tform1);
Form2.ShowModal;
else
application.MessageBox('用户名或密码不正确,请重新输入!','提示',0+64);
end; 展开
1个回答
展开全部
如果form1是主窗口,form2是登录窗口,那么:
那么这段代码,应该写在form1的创建事件中,当软件运行时,首先创建form1,但在创建过程中会创建form2(也就是form2会先于form1显示),当登录验证正确时,就让form1完成创建,显示出来,并销毁form2,如果登录验证不正确,就中止form1的创建,让其胎死腹中,并销毁form2.你的意思可能是想让form2先创建,然后关掉form2,再让from1出来,这显然是错误的,因为DELPHI的第一个窗口就是主窗口,关闭主窗口,整个软件也就关闭了.
application.CreateForm(Form1,Tform1);这条句子是不能用在这的.就是form2创建也不能这么写.
加载Form2的句子,也不应该出现在工程文件中(就是那个只有几行或十多行代码的文件).正确做法是,先做好登录窗口form2,然后在把它从工程文件中删除,上\下部分都要删除(还有一种简单操作,描述起来麻烦一些),再把它加入到form1,使form1能够调用它,再在Form1中创建一个form2类型的变量,
下面是我的一小程序的登录与工程文件代码,你可以参考一下:
工程文件
program kqrj;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
sjmk1 in 'sjmk1.pas' {sjmk: TDataModule},
dl in 'dl.pas' {dlck};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(Tsjmk, sjmk);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
登录窗口
unit dl;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;
type
Tdlck = class(TForm)
Image1: TImage;
ComboBox1: TComboBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
qxm:string[1];
ckksm:string[1];
{ Public declarations }
end;
var
dlck: Tdlck;
implementation
uses sjmk1;
{$R *.dfm}
procedure Tdlck.FormCreate(Sender: TObject);
var
i:word;
begin//加载用户名表,很多,10多个用户
sjmk.gjzcz.Close;
sjmk.gjzcz.CommandText:='';
sjmk.gjzcz.CommandText:='select gjzfl,gjzmc,gjzdz,byz,qx,id from gjzb where gjzfl =''czry'' ';
sjmk.gjzcz.Open;
if sjmk.gjzcz.RecordCount >0 then
begin
sjmk.gjzcz.First;
for i:=0 to sjmk.gjzcz.RecordCount-1 do
begin
if sjmk.gjzcz.FieldByName('gjzmc').Value <> null then
combobox1.Items.Add(sjmk.gjzcz.FieldValues['gjzmc']);
sjmk.gjzcz.Next;
end;
end;
end;
procedure Tdlck.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin//登录验证
if key <>13 then exit;
sjmk.gjzcz.Close;
sjmk.gjzcz.CommandText:='';
sjmk.gjzcz.CommandText:='select gjzfl,gjzmc,gjzdz,byz,qx,id from gjzb where gjzfl = ''czry'' and gjzmc ='''+combobox1.Text+''' ';
sjmk.gjzcz.Open;
if sjmk.gjzcz.RecordCount =1 then
begin
if edit1.Text = sjmk.gjzcz.FieldByName('gjzdz').Value then
begin
qxm:= sjmk.gjzcz.FieldValues['qx'];
ckksm:=sjmk.gjzcz.FieldValues['byz'];
button1.Enabled :=true;//上面还有一个按钮,是取消按钮,用户可以按此按钮退出程序
button1.SetFocus;
end
else
begin
showmessage(' 你输入的授权码不是'+combobox1.Text+'的授权码!');
end;
end;
end;
procedure Tdlck.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key =13 then
edit1.SetFocus;
end;
end.
主窗口中与登录相关的代码
implementation
uses sjmk1, dl;//加入登录单元
procedure TForm1.FormCreate(Sender: TObject);
var
dlct:Tdlck;//建立一个登录窗体的变量;
begin
dlct:=Tdlck.Create(self);//创建登录窗体,是一个没有边框的窗体,用户无法用窗体上自身的关闭按钮关闭它.
if dlct.ShowModal =1 then//当登录窗体模态显示\验证通过关闭它时
begin
czyxm:=dlct.ComboBox1.Text;
czymm:=dlct.edit1.Text;
qx:=dlct.qxm;
ckks:=dlct.ckksm;
dlct.Update;以上的你不要管,保存登录用户名和密码的
dlct.Free;//销毁登录窗体
end
else
begin
dlct.Free;//
application.Terminate;
end;
end;
那么这段代码,应该写在form1的创建事件中,当软件运行时,首先创建form1,但在创建过程中会创建form2(也就是form2会先于form1显示),当登录验证正确时,就让form1完成创建,显示出来,并销毁form2,如果登录验证不正确,就中止form1的创建,让其胎死腹中,并销毁form2.你的意思可能是想让form2先创建,然后关掉form2,再让from1出来,这显然是错误的,因为DELPHI的第一个窗口就是主窗口,关闭主窗口,整个软件也就关闭了.
application.CreateForm(Form1,Tform1);这条句子是不能用在这的.就是form2创建也不能这么写.
加载Form2的句子,也不应该出现在工程文件中(就是那个只有几行或十多行代码的文件).正确做法是,先做好登录窗口form2,然后在把它从工程文件中删除,上\下部分都要删除(还有一种简单操作,描述起来麻烦一些),再把它加入到form1,使form1能够调用它,再在Form1中创建一个form2类型的变量,
下面是我的一小程序的登录与工程文件代码,你可以参考一下:
工程文件
program kqrj;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
sjmk1 in 'sjmk1.pas' {sjmk: TDataModule},
dl in 'dl.pas' {dlck};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(Tsjmk, sjmk);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
登录窗口
unit dl;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;
type
Tdlck = class(TForm)
Image1: TImage;
ComboBox1: TComboBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
qxm:string[1];
ckksm:string[1];
{ Public declarations }
end;
var
dlck: Tdlck;
implementation
uses sjmk1;
{$R *.dfm}
procedure Tdlck.FormCreate(Sender: TObject);
var
i:word;
begin//加载用户名表,很多,10多个用户
sjmk.gjzcz.Close;
sjmk.gjzcz.CommandText:='';
sjmk.gjzcz.CommandText:='select gjzfl,gjzmc,gjzdz,byz,qx,id from gjzb where gjzfl =''czry'' ';
sjmk.gjzcz.Open;
if sjmk.gjzcz.RecordCount >0 then
begin
sjmk.gjzcz.First;
for i:=0 to sjmk.gjzcz.RecordCount-1 do
begin
if sjmk.gjzcz.FieldByName('gjzmc').Value <> null then
combobox1.Items.Add(sjmk.gjzcz.FieldValues['gjzmc']);
sjmk.gjzcz.Next;
end;
end;
end;
procedure Tdlck.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin//登录验证
if key <>13 then exit;
sjmk.gjzcz.Close;
sjmk.gjzcz.CommandText:='';
sjmk.gjzcz.CommandText:='select gjzfl,gjzmc,gjzdz,byz,qx,id from gjzb where gjzfl = ''czry'' and gjzmc ='''+combobox1.Text+''' ';
sjmk.gjzcz.Open;
if sjmk.gjzcz.RecordCount =1 then
begin
if edit1.Text = sjmk.gjzcz.FieldByName('gjzdz').Value then
begin
qxm:= sjmk.gjzcz.FieldValues['qx'];
ckksm:=sjmk.gjzcz.FieldValues['byz'];
button1.Enabled :=true;//上面还有一个按钮,是取消按钮,用户可以按此按钮退出程序
button1.SetFocus;
end
else
begin
showmessage(' 你输入的授权码不是'+combobox1.Text+'的授权码!');
end;
end;
end;
procedure Tdlck.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key =13 then
edit1.SetFocus;
end;
end.
主窗口中与登录相关的代码
implementation
uses sjmk1, dl;//加入登录单元
procedure TForm1.FormCreate(Sender: TObject);
var
dlct:Tdlck;//建立一个登录窗体的变量;
begin
dlct:=Tdlck.Create(self);//创建登录窗体,是一个没有边框的窗体,用户无法用窗体上自身的关闭按钮关闭它.
if dlct.ShowModal =1 then//当登录窗体模态显示\验证通过关闭它时
begin
czyxm:=dlct.ComboBox1.Text;
czymm:=dlct.edit1.Text;
qx:=dlct.qxm;
ckks:=dlct.ckksm;
dlct.Update;以上的你不要管,保存登录用户名和密码的
dlct.Free;//销毁登录窗体
end
else
begin
dlct.Free;//
application.Terminate;
end;
end;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询