我是初学者,今天在写一个系统的密码更改的部分出现了问题,我用的是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) 为什么要写那么多的'''''??????谢谢。

解决方案 »

  1.   

    关注一下!
    后一个问题比较简单
    字符串连接后,应该是and 密码='edit2.Text',所以应该加'''
      

  2.   

    写成
        query1.SQL.Add('select 用户名,密码 from 工作人员');
        query1.SQL.Add('where 用户名='''+edit1.Text+'''');
        query1.SQL.Add('and 密码='''+edit2.Text+'''');这样才对
      

  3.   

    //where 前面要加個空格
       query1.SQL.Add(' where 用户名='''+ edit1.Text + '''');
                   //and 前面也要加空格
       query1.SQL.Add(' and 密码='''+edit2.Text+'''');
      

  4.   

    還是 aiirii(ari-爱的眼睛) 的眼睛銳利!看到問題所在!就是這樣
      

  5.   

    写成
        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;改用动态参数可以看得更清楚一点,也容易查错。我建议你以后用动态参数。
      

  6.   

    有两点注意一下:
    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.表字段不要用汉字,这是一个基本问题