由 wangyuhu2002 » 星期日, 2005年11月6日 09:08
本人小菜,最近写一程序,可做到登陆模块时,出现一问题,搞了半天都不知道原因,希望大家帮我看看,login块的源代码如下:
unit login;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
Tfrm_login = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Bevel1: TBevel;
procedure BitBtn2Click(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn1Click(Sender: TObject);
private
ifclose:integer;
{ Private declarations }
public
{ Public declarations }
end;
var
frm_login: Tfrm_login;
implementation
uses qy;
{$R *.dfm}
procedure Tfrm_login.BitBtn2Click(Sender: TObject);
begin
ifclose:=1;
application.Terminate;
end;
procedure Tfrm_login.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_RETURN: Perform(WM_NEXTDLGCTL, 0, 0);
VK_UP: Perform(WM_NEXTDLGCTL, 1, 0);
VK_DOWN: Perform(WM_NEXTDLGCTL, 0, 0);
end;
end;
procedure Tfrm_login.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ifclose = 0 then action := caNone;
end;
procedure Tfrm_login.BitBtn1Click(Sender: TObject);
var
pass: string;
begin
ifclose := 1;
if delphi.com/topic_517063_7643.htm">Trim (edit1.Text)='' then
begin
showmessage('未输入用户,请重新输入');
edit1.SetFocus;
exit;
end;
begin
with dm_qy.Query1 do
begin
close;
sql.clear;
sql.add('select * from userinfo where id=''' + edit1.Text + '''');
if pos('''', edit1.Text) > 0 then
begin
close;
showmessage('用户有误,请重新输入!');
edit1.SetFocus;
exit;
end;
open;
if eof then
begin
close;
showmessage('用户有误,请重新输入!');
edit1.SetFocus;
exit;
end
else
begin
pass := fieldByName('pass').asstring;
if pass <> edit2.Text then
begin
showmessage('口令有误,请重新输入!');
edit2.SetFocus;
exit;
end;
end;
pass := fieldByName('flag').asstring;
if pass <> '是' then
begin
showmessage('该学生已被禁用!');
edit1.SetFocus;
exit;
end;
ModalResult := mrOK;
end;
end;
end;
end.
使用sql server数据库,通过odbc连接,程序运行后,在用户名处没有问题,你填入一个错误的它也能报错,只有填对了才能输密码,充分说明数据库已连上,搞不懂的就是输入密码后总是提示数据库field pass找不到,可数据库里有pass field呀,是不是不能用fieldbyname?我试了直接用sql.add方法给query1加入查找pass可以,可为什么用fieldbyname就不行呢?