beginwith Query1 do
begin
  try
    close;
    SQL.Clear;
    SQL.Text:='SELECT * FROM Operator_Info WHERE 用户名=:username';
     ParamByName('username').AsString:='admin';
    Open;
    if Eof=False then
    if (FieldByName('密码').AsString='1')and(FieldByName('操作级别').AsString='主管') then
    Label1.Caption:='数据库连接成功,用户名存在';
    except on E:Exception do
    Showmessage(e.Message);
    end;
end;
end;为什么说找不到'密码'呢?

解决方案 »

  1.   


    SQL.Text:='SELECT * FROM [Operator_Info] WHERE [用户名]=:username';
         ParamByName('username').AsString:='admin';
        Open;
        if Eof=False then
        if (FieldByName('[密码]').AsString='1')and(FieldByName('[操作级别]').AsString='主管') then还是找不到...
      

  2.   

        SQL.Text:='SELECT * FROM Operator_Info WHERE 用户名=:username';
         ParamByName('username').AsString:='admin';
    把上面两句换成
    SQL.Text:='SELECT * FROM Operator_Info WHERE 用户名='+QuotedStr('admin');试试
      

  3.   

    还是出错,开始试了一下,用Access的数据库就不会出错了。用SQL就是用问题。
      

  4.   

    ParamByName('username').AsString:='admin';
    改成:
    Parameters.ParamByName('username').Value := 'admin';
      

  5.   

    字段名用中文??????
    晕,字段名就不能用中文吗?
    建议用英文件缩写
    pwd
      

  6.   

    我也不想用中文啊,是别人的数据库。
    哎,改程序是最郁闷的了。让一个做C++的做Delphi,就更加郁闷了。
    还请大家多多帮忙。不然没法混了
      

  7.   

    这个是不是和Database控件的配置有关系啊?
      

  8.   

    var
      i: Integer;
    beginwith Query1 do
    begin
      try
        close;
        SQL.Clear;
        SQL.Text:='SELECT * FROM Operator_Info WHERE 用户名=:username';
         ParamByName('username').AsString:='admin';
        Open;
        if Eof=False then begin
          for i := 0 to Fields.Count do begin
            ShowMessage(Fields.Fields[i].FieldName);
          end;

        if (FieldByName('密码').AsString='1')and(FieldByName('操作级别').AsString='主管') then
        Label1.Caption:='数据库连接成功,用户名存在';
        end;
        except on E:Exception do
        Showmessage(e.Message);
        end;
    end;
    end;使用上面的代码看一下有没有"密码"这个字段名称存在。
      

  9.   

    数据库中有
    用户名    密码    年龄    操作级别  ...
    admin     1     20      主管上面的代码只,读出了年龄
    然后就是 list index out of bounds(1)
    ....
      

  10.   

    老大些,现在新建一个表,就两个字段“userId”“username”
    测试还是一样的效果。
      

  11.   

    抱歉,应该是
    for i := 0 to Fields.Count - 1 do begin 如果只读取了一个"年龄"就List index out of bounds(1),那说明就只有一个字段,应该是你的查询出现了问题。
      

  12.   

    呵呵,问题解决了。原来是哦Access升迁的问题。Access升迁成SQL的时候,把字符串类型转成了nvarchar类型。所以在
    unsigned 给的代码中只读出了年龄,因为年龄是int类型的。于是我把nvarchar类型改成varchar类型以后,就完全正确了。多谢大家的帮助!