procedure TForm3.Button1Click(Sender: TObject);
begin
with dm2.query1 do
begin
close;
sql.clear;
sql.add('select * from 用户表1');
sql.add('where 用户名=:usename');
sql.add('and 密码=:password');
parambyname('usename').Asstring:=edit1.text;
parambyname('password').AsString:=edit2.Text;
prepare;
open;
user_type:=fieldbyname('用户类型').Value;
name:=fieldbyname('用户名').Value;
end;
if dm2.query1.recordcount=0 then
showmessage('登录失败,请重新登录!') else
begin
with dm2.StoredProc1 do
begin
params[0].AsString:=name;
params[1].AsString:=user_type;
params[2].AsString:='用户登陆';
prepare;
execproc;
end;
end;
showmessage('登录成功!');
end;
end.
begin
with dm2.query1 do
begin
close;
sql.clear;
sql.add('select * from 用户表1');
sql.add('where 用户名=:usename');
sql.add('and 密码=:password');
parambyname('usename').Asstring:=edit1.text;
parambyname('password').AsString:=edit2.Text;
prepare;
open;
user_type:=fieldbyname('用户类型').Value;
name:=fieldbyname('用户名').Value;
end;
if dm2.query1.recordcount=0 then
showmessage('登录失败,请重新登录!') else
begin
with dm2.StoredProc1 do
begin
params[0].AsString:=name;
params[1].AsString:=user_type;
params[2].AsString:='用户登陆';
prepare;
execproc;
end;
end;
showmessage('登录成功!');
end;
end.
我觉得是不是
params[0].AsString:=name;
params[1].AsString:=user_type;
name,user_type是否定义,是否为空
其他地方我实在看不出那还可能出错
begin
with dm2.query1 do
begin
close;
sql.clear;
sql.add('select * from 用户表1');
sql.add('where 用户名=:usename');
sql.add('and 密码=:password');
>>>>>> ^^^在and前面加一个空格
parambyname('usename').Asstring:=edit1.text;
parambyname('password').AsString:=edit2.Text;
prepare;
^^^^^^^^^没必要,浪费服务器端的资源
open;//以下有问题,此序反了,应该是先判断recordcount是否>0,然后才去读值
user_type:=fieldbyname('用户类型').Value;
name:=fieldbyname('用户名').Value; end;
if dm2.query1.recordcount=0 then
showmessage('登录失败,请重新登录!') else
begin
with dm2.StoredProc1 do
begin
params[0].AsString:=name;
params[1].AsString:=user_type;
params[2].AsString:='用户登陆';
^^^^错别字哦 ^_*
prepare;
execproc;
end;
end;
showmessage('登录成功!');
//此段语句有逻辑问题,最后始终会县是登录成功,哪怕刚才显示了登录失败
end;
end.
params[0].AsString:=name;
params[1].AsString:=user_type;
这两句语句有问题,可我该怎么写呢
user_type:=fieldbyname('用户类型').Value;
name:=fieldbyname('用户名').Value;
编译的时候可以通过,可是在运行时,因为没有把值符给name和user_type而导致在给存储过程符的值是空值,使系统出错,我是这么觉得的,有另一种方法来实现上面两句的功能吗