我这段代码在数据库dbisam3.26下可用,但在dbisam4.05下出错,出错提示如下:DBISAM Engine Error # 11949 SQL error - 'Invalid column name 'b' or table correlation name '' specified in WHERE or JOIN clause'不知怎么改,请指点。
procedure Tsetpasswd_form.BitBtn1Click(Sender: TObject);
begin
  with DM.Users_Query do
    begin
      SQL.Clear;
      Sql.Add('Select * from login where 用户名="'+EdName.text+'" and 密码="'+oldpassword.text+'" and 用户类型="'+CBType.text+'"');   //这个有问题
      open;
      if RecordCount = 1 then
        begin
          if Edpsswrod1.text<>Edpsswrod2.text then
            Application.MessageBox('两次输入的密码不匹配!请重新输入。','提示',MB_OK+Mb_iconasterisk)
          else
            begin
              close;
              SQL.Clear;
              SQL.Add('update login');
              SQL.Add('set 密码 = :passwd');
              SQL.Add('where 用户名 = :username');
              parambyname('passwd').asstring:=Edpsswrod1.text;
              parambyname('username').asstring:=G_username;
              prepare;
              execSQL;
              Application.MessageBox('密码修改成功!','提示',MB_OK+Mb_iconasterisk);
              oldpassword.Text:='';
              Edpsswrod1.Text:='';
              Edpsswrod2.Text:=''
            end;
        end
      else
        begin
          if (EdName.text='')and(EdName.text='')and(CBType.text='')then
            Application.MessageBox('您没有填写资料,请输入!','提示',MB_OK+Mb_iconasterisk)
          else
            begin
              Application.messagebox('输入有误,请重新输入!','提示',MB_Ok+Mb_iconasterisk);
              EdName.Text:='';
              CBType.Text:='';
              oldpassword.Text:='';
              Edpsswrod1.Text:='';
              Edpsswrod2.Text:='';
            end;
        end;
    end;  //with
  end;

解决方案 »

  1.   

    procedure Tsetpasswd_form.BitBtn1Click(Sender: TObject);
    var
      txtsql:string;
    begin
      with DM.Users_Query do
        begin
          txtsql:=''Select * from login where 用户名=":UName and ';
          txtsql:=txtsql+'密码=:OldPsw and 用户类型=:UType ';
          close;
          SQL.Clear;
          SQL.text:=txtsql;
          parambyname('UName').asstring:=EdName.text;
          parambyname('OldPsw').asstring:=oldpassword.text;
          parambyname('UType').asstring:=CBType.text;
          prepare
          open;
          if RecordCount = 1 then
            begin
              if Edpsswrod1.text<>Edpsswrod2.text then
                Application.MessageBox('两次输入的密码不匹配!请重新输入。','提示',MB_OK+Mb_iconasterisk)
              else
                begin
                  close;
                  SQL.Clear;
                  SQL.Add('update login');
                  SQL.Add('set 密码 = :passwd');
                  SQL.Add('where 用户名 = :username');
                  parambyname('passwd').asstring:=Edpsswrod1.text;
                  parambyname('username').asstring:=G_username;
                  prepare;
                  execSQL;
                  Application.MessageBox('密码修改成功!','提示',MB_OK+Mb_iconasterisk);
                  oldpassword.Text:='';
                  Edpsswrod1.Text:='';
                  Edpsswrod2.Text:=''
                end;
            end
          else
            begin
              if (EdName.text='')and(EdName.text='')and(CBType.text='')then
                Application.MessageBox('您没有填写资料,请输入!','提示',MB_OK+Mb_iconasterisk)
              else
                begin
                  Application.messagebox('输入有误,请重新输入!','提示',MB_Ok+Mb_iconasterisk);
                  EdName.Text:='';
                  CBType.Text:='';
                  oldpassword.Text:='';
                  Edpsswrod1.Text:='';
                  Edpsswrod2.Text:='';
                end;
            end;
        end;  //with
      end;你再试试,看这样行不行.不过我建议你以后写SQL语句时不要直接用Query.SQL.Add(),可以把SQL语句赋值给一个字符串变量,这样不容易出错.
      

  2.   

    EdName.text,oldpassword.text,CBType.text 其中有一个是空的
      

  3.   

    TO: xiaosq2000(书虫)
    如果有这三句的话出错提示如下:
          parambyname('UName').asstring:=EdName.text;
          parambyname('OldPsw').asstring:=oldpassword.text;
          parambyname('UType').asstring:=CBType.text;
    如果没有这三句的话出错提示如下:
    DBISAM Engine Error # 11949 SQL error - 'End of SELECT statement expected, instead found '.''请指点。
      

  4.   

    不好意思,下面两句话有点错误:
    txtsql:=''Select * from login where 用户名=":UName and ';
    txtsql:=txtsql+'密码=:OldPsw and 用户类型=:UType ';应该是这的:
    txtsql:='Select * from login where 用户名=:UName and ';
    txtsql:=txtsql+'密码=:OldPsw and 用户类型=:UType ';你再试试吧!另外,你用的是爰数据库呀!