我是初学者,今天在写一个系统的密码更改的部分出现了问题,我用的是delphi7,那个密码更改的模块只用了一个 query1, 数据表格用的是paradox7做的一个人员名+密码的table,如果点击模块上更改按钮,我遍的程序是:
procedure TForm12.BitBtn1Click(Sender: TObject);
begin
if(edit1.Text='') or (edit3.Text<>edit4.Text) then
begin
if edit1.Text='' then
begin
showmessage('输入用户名');
edit1.SetFocus;
end
else
if edit3.Text<>edit4.Text then
begin
showmessage('新密码不一致!');
edit1.SetFocus;
end;
end
else
begin
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select 用户名,密码 from 工作人员');
query1.SQL.Add('where 用户名='+edit1.Text);
query1.SQL.Add('and 密码='''+edit2.Text+'''');
query1.Open;
if (query1.RecordCount<>1)or(edit2.Text<>query1.FieldValues['密码']) then
begin
showmessage('口令不对,请检查');
edit1.SetFocus;
end
else
begin
query1.Edit;
query1.FieldValues['密码']:=edit3.Text;
query1.Post;
showmessage('更改成功!');
query1.close;
close;
end;
end;
end;
我感觉程序是没有问题了,我是照着别的书上这样写的,但运行的时候,当确定更改的时候,就会有这样的提示信息:
Project Project1.exe raised exception class EDBEngine Error with invalid use of keyword token:=line Number3.'请问这什么意思啊? 因为昨天我做权限管理的时候用了query组件也是这样的,一直不知道怎么办。还有谁能告诉我,那段代码里 为什么
if (query1.RecordCount<>1) 说得是如果用户名不对呢? 它怎么不写成edit1.Text<>query1.FieldValues['用户名']????还有 query1.SQL.Add('and 密码='''+edit2.Text+'''')怎么不写成 query1.SQL.Add('and 密码='+edit2.Text) 为什么要写那么多的'''''??????谢谢。
procedure TForm12.BitBtn1Click(Sender: TObject);
begin
if(edit1.Text='') or (edit3.Text<>edit4.Text) then
begin
if edit1.Text='' then
begin
showmessage('输入用户名');
edit1.SetFocus;
end
else
if edit3.Text<>edit4.Text then
begin
showmessage('新密码不一致!');
edit1.SetFocus;
end;
end
else
begin
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select 用户名,密码 from 工作人员');
query1.SQL.Add('where 用户名='+edit1.Text);
query1.SQL.Add('and 密码='''+edit2.Text+'''');
query1.Open;
if (query1.RecordCount<>1)or(edit2.Text<>query1.FieldValues['密码']) then
begin
showmessage('口令不对,请检查');
edit1.SetFocus;
end
else
begin
query1.Edit;
query1.FieldValues['密码']:=edit3.Text;
query1.Post;
showmessage('更改成功!');
query1.close;
close;
end;
end;
end;
我感觉程序是没有问题了,我是照着别的书上这样写的,但运行的时候,当确定更改的时候,就会有这样的提示信息:
Project Project1.exe raised exception class EDBEngine Error with invalid use of keyword token:=line Number3.'请问这什么意思啊? 因为昨天我做权限管理的时候用了query组件也是这样的,一直不知道怎么办。还有谁能告诉我,那段代码里 为什么
if (query1.RecordCount<>1) 说得是如果用户名不对呢? 它怎么不写成edit1.Text<>query1.FieldValues['用户名']????还有 query1.SQL.Add('and 密码='''+edit2.Text+'''')怎么不写成 query1.SQL.Add('and 密码='+edit2.Text) 为什么要写那么多的'''''??????谢谢。
后一个问题比较简单
字符串连接后,应该是and 密码='edit2.Text',所以应该加'''
query1.SQL.Add('select 用户名,密码 from 工作人员');
query1.SQL.Add('where 用户名='''+edit1.Text+'''');
query1.SQL.Add('and 密码='''+edit2.Text+'''');这样才对
query1.SQL.Add(' where 用户名='''+ edit1.Text + '''');
//and 前面也要加空格
query1.SQL.Add(' and 密码='''+edit2.Text+'''');
query1.SQL.Add('select 用户名,密码 from 工作人员');
query1.SQL.Add(' where 用户名=:mc');
query1.SQL.Add(' and 密码=:ma');
query1.parambyname('mc').value:=edit1.text;
query1.parambyname('ma').value:=edit2.text;
query1.open;改用动态参数可以看得更清楚一点,也容易查错。我建议你以后用动态参数。
1.SQL语句有问题
query1.SQL.Add('select 用户名,密码 from 工作人员');
query1.SQL.Add('where 用户名='+edit1.Text);
query1.SQL.Add('and 密码='''+edit2.Text+'''');
建议改为:
query1.SQL.Add(' select 用户名,密码 from 工作人员');
query1.SQL.Add(' where 用户名='+edit1.Text);
query1.SQL.Add(' and 密码="'+edit2.Text+'"'); 两个单引号 '' 相当于一个双引号
程序报错是sql之间没有空格
2.表字段不要用汉字,这是一个基本问题