各位大虾好!!
        兄弟碰到了一个问题,还不能解决的,是一个登陆窗口的,有一个数据库表为USERNAME(bh(编号),username(用户名),password(密码)),2个文本EDIT1,EDIT2,1个COMBOBOX1,我想实现的目标是当我在COMBOBOX1选用户明时,在EDIT1中对应编号就能显示,在输入密码就可以登陆了,
但是我现在的在COMBOBOX1选用户明时,在EDIT1中编号就不能对应就能显示,看一下我写的代码是什么出现错误,谢谢!!procedure Tf_login.ComboBox1Enter(Sender: TObject);
var
i:integer;
begin
 adoquery1.Close;
 adoquery1.SQL.Clear ;
 adoquery1.SQL.Add('select * from username where username="combobox1.items.Values"' );    
 adoquery1.Open ;
 edit1.Text := trim(adoquery1.Fieldbyname('bh').Value);
 end;
end.

解决方案 »

  1.   

    adoquery1.Close;
     adoquery1.SQL.Clear ;
     adoquery1.SQL.Add('select * from username where username='''+combobox1.items.Values +'''');    
     adoquery1.Open ;
      

  2.   

    将 combobox1.items.Values 
    换成combobox1.text
      

  3.   

    我试了将 combobox1.items.Values 
    换成combobox1.text这个不成的,
    这个程序的只要错误就是
     adoquery1.SQL.Add('select * from username where username='''+combobox1.items.Values +''''); 
    我现在对COMBOBOX1不知道有什么,才好了
    请指点
      

  4.   

    不要在COMBOX的onEnter事件里写,在COMBOX的onchange事件里写你这段代码
      

  5.   

    在COMBOX的onEnter事件里写,在COMBOX的onchange事件里写你这段代码
    这个我也试了也是不行的,
      

  6.   

    ComboBox1.Style:=csDropDownList;
    procedure TForm1.ComboBox1Change(Sender: TObject);
    var
    i:integer;
    begin
     adoquery1.Close;
     adoquery1.SQL.Clear ;
     adoquery1.SQL.Add('select * from username where username='''trim(combobox1.text)'''' );    
     adoquery1.Open ;
     edit1.Text := adoquery1.Fieldbyname('bh').asstring;
     end;
    end;
      

  7.   

    procedure TForm1.ComboBox1Change(Sender: TObject);
    var
    i:integer;
    begin
     adoquery1.Close;
     adoquery1.SQL.Clear ;
     adoquery1.SQL.Add('select * from username');
     adoquery1.SQL.Add(format('where username=''%s''',[trim(combobox1.text)]));    
     adoquery1.Open ;
     edit1.Text := adoquery1.Fieldbyname('bh').asstring;
     end;
    end;
      

  8.   

    告诉你一个方法:用Object,可能有些大材小用,不过我一直就是这么用的!TUserInfo=class
      vID: String;
      vUser: String;
      vPwd: String;
    end;在FormShow事件里:
    var
      vUserInfo: TUserInfo;
    begin
    ……
    ADOQuery1.SQL.Text := 'SELECT id, user, pwd FROM userinfo ORDER BY user';
    ADOQuery1.Open;
    while not ADOQuery1.Eof do
    begin
      vUserInfo := TUserInfo.Create;
      vUserInfo.vID := ADOQuery1.FieldByName('id').AsString;
      vUserInfo.vUser := ADOQuery1.FieldByName('user').AsString;
      vUserInfo.vPwd := ADOQuery1.FieldByName('pwd').AsString;
      ComboBox1.Items.AddObject(vUserInfo.vUser, TObject(vUserInfo));
      ADOQuery1.Next;
    end;
    ComboBox1.ItemIndex := 0;
    end;在[登录]按钮的点击事件里:
    begin
      if ComboBox.ItemIndex<0 then
      begin
        --请选择登录用户名
        Exit;
      end;
      if TUserInfo(ComboBox.Objects[ComboBox.ItemIndex]).vPwd<>edtPwd.Text then
      begin
        --密码错误
        Exit;
      end;
    end;
      

  9.   

    将 combobox1.items.Values 
    换成combobox1.text
      

  10.   

    在COMBOX的onchange事件里写你这段代码
      

  11.   

    没有用的,大哥了,是真的,我全试了,都是不能显示字段BH在EDIT。
      

  12.   

    adoquery1.SQL.Add('select * from username where username='+#39+combobox1.items.Values+#39 );
      

  13.   

    不可能吧,我可是实验过了
    //把字段值赋个combobox1
    procedure TForm1.ComboBox1Enter(Sender: TObject);
    begin
        combobox1.Clear;
        adoquery1.SQL.Add('select * from aa');
        adoquery1.Open;
        if adoquery1.RecordCount<>0 then
        begin
            while adoquery1.Eof<>true do
            begin
                combobox1.Items.Add(adoquery1.fieldbyname('a').AsString);
                adoquery1.Next;
            end;
        end;
        adoquery1.Close;
    end;
    ////////////////////////////////
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
        adoquery1.SQL.Clear ;
        adoquery1.SQL.Add('select * from aa where a='''+trim(combobox1.text)+'''' );
        adoquery1.Open ;
        edit1.Text := adoquery1.Fieldbyname('b').asstring;
        adoquery1.Close;
    end;
    再不行你找我,你仔细检查一下你的数据库字段和数据。
      

  14.   

    用我给你的方法!
    在TUserInfo里面的vID就是你的BH,然后在ComboBox的Change事件中Show出TUserInfo(ComboBox1.Objects[ComboBox1.ItemIndex]).vID,然后把它赋值给Edit.Text!没有不成功的!
      

  15.   

    你的代码我试了,没有运行结果了,也是在EDIT中不能取出值,,现在我是在选用户名,在EDIT中显示对应的,TEDIT中的值,数据库字段没有出错,在上面的我基本上都试了,
    好象都没有用了
      

  16.   

    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('select * from dbo.test where id='''+combobox1.text+'''');
      adoquery1.Open;
      edit1.Text := adoquery1.Fieldbyname('id').asstring;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      adoconnection1.Open;
    end;这个代码绝对在我 D6+Win2000ad 上通过
      

  17.   

    我大概知道为什么了!
    按照大家上面给你的方法是一定可以得到BH的,我估计你一定是在什么地方有清空这个Edit的动作,然后在给这个Edit赋值以后,又触发了这个清空的动作,你可以按步调试,看看究竟有没有这个可能!