如题。
登陆代码如下
procedure TLoginFrm.BitBtn1Click(Sender: TObject);
begin          //输入为空判断
if edit1.Text='' then
begin
  ShowMessage('请输入用户名!');
  edit1.SetFocus;
end
else        //打开数据库TUser表
begin
with datamodule1 do
begin
  q_login.Close;
  q_login.SQL.Clear;
  q_login.SQL.Add('select * from TUser');
  q_login.sql.Add('where U_ID=:id and U_PASSWORD=:pw');
  q_login.Open;if edit1.Text<>q_login.paramByName('id').AsString then //判断用户名
begin
  showmessage('请输入正确的用户名!');
  edit1.SetFocus;
end
else
if maskedit1.Text<>q_login.Parambyname('pw').asstring then //判断口令
begin
  showmessage('请输入正确的密码!');
  maskedit1.SetFocus;
end
else
beginloginfrm.hide;
application.CreateForm(tmainfrm,mainfrm);
end;
出错信息是:field 'id'is of a unknow type.
高手帮忙!!!

解决方案 »

  1.   

    应该是sql的问题,不用参数试试。
    ('where U_ID=:id and U_PASSWORD=:pw');
    换成
    ('where U_ID='+''''+edit1.text+''''+' and U_PASSWORD='+''''+edit2.text+'''');
      

  2.   

    同意楼上。
    补充如下:如果写成'where U_ID=:id and U_PASSWORD=:pw',必须动态生成 paramCreateParam()
      

  3.   

    不用参数的话。
    q_login.parambyname('U_ID').asstring 也行不通。
    出现同样的错误
    field 'U_ID'is of a unknow type.
    我想知道parambyname()是不是一定要参数。原数据库里的字段名不能做他的参数吗?
      

  4.   

    你还没有指定id,pw为你的参数吧
      

  5.   

    唉,你都没有给ID及PASS参数赋值,叫SQl如何去找...
    整个程序逻辑有问题.....
    你只能判断某个用户名存不存在,即判断记录数......
      

  6.   

    var
      loginForm: TloginForm;
      loginNumber:integer;implementation
     uses mainUnit;
    {$R *.dfm}procedure TloginForm.FormCreate(Sender: TObject);
    begin
    loginNumber:=0;
    end;procedure TloginForm.Button1Click(Sender: TObject);
    var
       username:string;
       password:string;
    begin
    loginForm.modalresult:=0;
    username:=trim(edit1.Text);
    password:=trim(edit2.Text);
    if adotable1.Active=false then
    begin
     adotable1.Active:=true;
    end;if adotable1.Locate('loginid', username, [loPartialKey])=False then
       Begin
          Application.MessageBox('&Icirc;&THORN;&acute;&Euml;&Oacute;&Atilde;&raquo;§&pound;&iexcl;','&Iuml;&micro;&Iacute;&sup3;&Igrave;á&Ecirc;&frac34;',MB_OK+MB_ICONERROR);
          edit1.Clear;
          edit2.Clear;
          edit1.SetFocus;
          inc(loginNumber);
       end
    else if adotable1.FieldByName('PassWord').AsString=Password then
          loginForm.ModalResult:=idok
    else
       begin
          Application.MessageBox('&Atilde;&Uuml;&Acirc;&euml;&acute;í&Icirc;ó&pound;&iexcl;','&Iuml;&micro;&Iacute;&sup3;&Igrave;á&Ecirc;&frac34;',MB_OK+MB_ICONERROR);
          edit1.Clear;
          edit2.Clear;
          edit1.SetFocus;
          inc(loginNumber);
          end;
    if loginNumber=3 then
        loginForm.ModalResult:=2;
    end;procedure TloginForm.Button2Click(Sender: TObject);
    begin
      loginForm.ModalResult:=mrcancel;
    end;end.
      

  7.   

    我的逻辑是:打开用户表,然后判断edit.text的值是不是和数据库里表的字段值匹配。
    如果不用parambyname。可以用什么?我记得以前就是用tquery组件来做的
    现在忘了。我用fieldbyname,只能匹配表里的当前活动记录,也就是最上面一条记录。
    哪位大哥可以帮忙?小弟高分相送。(用bde)
      

  8.   

    procedure TLoginFrm.BitBtn1Click(Sender: TObject);
    begin          //输入为空判断
    if edit1.Text='' then
    begin
      ShowMessage('请输入用户名!');
      edit1.SetFocus;
    end
    else        //打开数据库TUser表
    begin
    with datamodule1 do
    begin
      q_login.Close;
      q_login.SQL.Clear;
      q_login.SQL.Add('select * from TUser');
      q_login.sql.Add('where U_ID=:id and U_PASSWORD=:pw');
      parameters.parabyname('id').value:=''
      parameters.parabyname('pw').value:=''
      q_login.Open;
      

  9.   

    if recordcount=0 then
    begin   
    showmessage('用户不存在')
    edit1.setfocus;
    exit;
    end
    else
       if edit2.text<>fieldbyname('password').asstring then
          begin
               showmessage('密码不正确!');
                exit;
          end;
     close;
    end;
    我的是接 Cheney(切尼) 的来的...