用delphi写的这个代码运行出现错误提示

procedureTForm1.BitBtn1Click(Sender:TObject);varpassword:string;UserName:string;QX:st... procedure TForm1.BitBtn1Click(Sender: TObject);
var
password:string;
UserName:string;
QX:string;
logintimes:integer;
begin
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select 密码,权限 from f_user');
adoquery1.SQL.Add('where 姓名=:姓名');
adoquery1.Parameters.ParamByName('姓名').Value:=ComboBox1.Text;
adoquery1.Open;
if adoquery1.RecordCount>0 then
begin
password:=adoquery1.FieldValues['密码'];
if edit1.Text=password then
begin
UserName:=ComboBox1.Text;
self.Hide;
QX:=adoquery1.FieldValues['权限'];
with form2.Create(nil) do
try
ShowModal;
finally
free;
end;
end
else
begin
logintimes:=logintimes+1;
if logintimes<3 then
begin
messagebox(handle,pchar('密码'+inttostr(logintimes)+
'次错误,请重新摄入!'),'密码错误',mb_ok or mb_iconerror);
edit1.Text:='';
edit1.SetFocus;
end
else
begin
messagebox(handle,'密码三次错误请关闭!','密码错误',mb_iconerror);
application.Terminate;
end;
end;
end;
adoquery1.Close;
freeandnil(adoquery1);

end;
展开
 我来答
arthurcy82
2012-03-07
知道答主
回答量:19
采纳率:0%
帮助的人:5.7万
展开全部
freeandnil(adoquery1);
最后这句去掉看看还报地址错误吗,
你得断点查询,地址错误一般是找不到数据库的对应数据。我以前也经常碰到,要不有可能是
定位错误 with form2.Create(nil) do 这个是什么意思看不懂,我给你我们的代码你参考下吧
function runsql(qu:Tquery;str:string):string;
begin
qu.close;
qu.sql.clear;
qu.sql.add(str);
qu.ExecSQL;
end;

function runsql2(qu:Tquery;str:string):string;
begin
qu.close;
qu.sql.clear;
qu.sql.add(str);
qu.open;
END;
//账号密码的时间限制
//--------------------------------------------------------------------------------------------------
runsql2(dm.passquery,'select * from password where uidname="' +trim(edit1.text)+ '"');
runsql2(query1,'select getdate() as dat');

if dm.passquery.FieldByName('stop').asstring='Y' then
begin
showmessage('你的账号已经冻结');
application.Terminate;
end;

IF LENGTH(DM.PASSQuery.FieldByName('PASSWORDS').ASSTRING)<6 THEN
BEGIN
showmessage('你的密码长度不足六位!请修改你的密码,否则你的账号将被冻结!');
runsql(query2,'update password set stop="Y" where uidname="'+trim(edit1.text)+'"');
END;

if ((query1.FieldByName('dat').AsDateTime-dm.passquery.FieldByName('C_date').AsDateTime)>dm.passquery.fieldbyname('u_day').AsInteger) AND (DM.passquery.FieldByName('U_DAY').ASINTEGER<>0) then
begin
showmessage('你的账号已经过期');
runsql(query2,'update password set stop="Y" where uidname="'+trim(edit1.text)+'"');
application.Terminate;
end;

if dm.passquery.FieldByName('uidname').asstring=DM.passquery.FieldByName('passwords').asstring then
begin
showmessage('你的密码与用户名相同,请立即更改密码!');
runsql(query2,'update password set stop=''Y'' where uidname="'+trim(edit1.text)+'"');
end
else if ((query1.FieldByName('dat').AsDateTime)-dm.passquery.FieldByName('C_date').AsDateTime>dm.passquery.FieldByName('u_day').AsInteger-10) AND (DM.passquery.FieldByName('U_DAY').ASINTEGER<>0) then
begin
showmessage('你的账号离到期不超过10天,请尽快更改你的密码,否则你的账号将被冻结!');
end;

query2.Close;
query2.Params.Clear;
query2.SQL.Text := 'update password set l_date=:l_date where uidname="'+edit1.text+'"';
query2.Params.ParamByName('l_date').AsDateTime := query1.FieldByName('dat').AsDateTime;
query2.ExecSQL;
追问
freeandnil(adoquery1);
这个去掉了 还是报错啊
追答
那就需要断点查询 你F7到哪一行报错的?
lin257257
2012-03-08 · TA获得超过424个赞
知道小有建树答主
回答量:331
采纳率:100%
帮助的人:179万
展开全部
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select 密码,权限 from f_user');
adoquery1.SQL.Add('where 姓名=:姓名');
adoquery1.Parameters.ParamByName('姓名').Value:=ComboBox1.Text;
adoquery1.Open;

会不会是不支持用汉字做参数?
你把sql语句改成 where 姓名=:@Name 试试看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ayi033
2012-03-07 · TA获得超过144个赞
知道小有建树答主
回答量:317
采纳率:100%
帮助的人:103万
展开全部
不是动态创建的ADOQuery1,无需释放
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式