我一般不用DBEDIT,直接用EDIT,自己控制心里更有数。
关于你那个问题,我有个类似的程序,你看看吧。procedure TfmCXTJ.CBoxZXChange(Sender: TObject);
var
  sz : TStrings;
  n : integer;
begin
  if CBoxZX.ItemIndex<>-1 then begin //按从下拉菜单中选择的为主
    zx:=sBH[CBoxZX.ItemIndex];
  end
  else if CBoxZX.Text<>'' then begin //用户的填写不为空
    zx:=CBoxZX.Text;
    try                              //试着转换成数字编号
      StrToInt(zx);
    except                           //填写不正确
      on EConvertError do begin
        MyMsg('"主修专业"的编号必须为有效的4位数字.');
        CBoxZX.ItemIndex:=-1;
        CBoxZX.Text:='';
        exit;
      end;
    end;
  end
  else begin                         //用户的填写为空
    zx:='';
    CBoxFX.Items.Clear();
    exit;
  end;  if Length(zx)<4 then
    exit;  for n:=0 to sBH.Count-1 do begin//检查填写的主修专业编号是否正确
    if zx=sBH[n] then
      break;
    end;
  if n=sBH.Count then begin
    CBoxZX.SetFocus();
    MyMsg('填写的主修专业"' + zx + '"不存在,请检查后再填写.');
    CBoxZX.ItemIndex:=-1;
    CBoxZX.Text:='';
    exit;
  end;  sz:=TStringList.Create;
  with DataModule1.QueryTmp do begin
    Close;
    SQL.Clear;
    SQL.Add( 'select * from 辅修报名专业限制 where 专业编号=' + zx);
    Open;    sz.Add(FieldByName('限制专业编号1').AsString);
    sz.Add(FieldByName('限制专业编号2').AsString);
    sz.Add(FieldByName('限制专业编号3').AsString);
    Close;
  end;  CBoxFX.Items.Clear();
  for n:=0 to CBoxZX.Items.Count-1 do begin
    if (sBH[n] <> zx) and
       (sBH[n] <> sz[0]) and
       (sBH[n] <> sz[1]) and
       (sBH[n] <> sz[2]) then
       CBoxFX.Items.Add(CBoxZX.Items[n]);
  end;
  sz.Clear;
end;

解决方案 »

  1.   

    在edit的onchange事件加入查询代码。
    dbedit一样的有text属性,要把姓名显示到dbedit中去,在你选中listbox中记录时,应把当前记录游标定位到选中的记录,这时在dbedit不就可以自动显示姓名了吗?
      

  2.   

    我使用edit控件和一个dbgrid加tquery,在edit的onchange事件中将edit.text作为参数给tquery,非常简单.
      

  3.   

    Add code by yourself. This is an example:
    1.put all the items into one Listbox;
    2.Add code in the Edit.Onchaneg event as follows: procedure TFrmCondZZ.E_xtdwdmChange(Sender: TObject);
    var
      i: integer;
    begin
      LB_xtdwdm.Items.Clear;
      if Trim(E_xtdwdm.Text) = '' then
        for i := 0 to DWDMLST.items.Count-1 do
          LB_xtdwdm.Items.Add(DWDMLST.Items.Strings[i])
      else
        for i := 0 to DWDMLST.items.Count-1 do
        begin
          if Pos(Trim(E_xtdwdm.Text),DWDMLST.Items.Strings[i])<>0 then
          LB_xtdwdm.Items.Add(DWDMLST.Items.Strings[i]);
        end;
      if DWDMLST.Items.Count>0 then
        DWDMLST.Itemindex := 0;
    end;SORRY! I don't know why I can't input Chinese!