我在子窗体中设置了多个ComboBox用于添加\修改记录.引用的是主窗体中的一个ADOQuery,但是每添加一次后ComboBox里就会显示重复的值.有什么方法可以使用最少的ADOQuery实现每个ComboBox里的选项都唯一,并且打开子窗体的时候显示的是当前整条记录的值.也就是查询整条记录且ComboBox里的字段唯一.我是初学者请给出代码

解决方案 »

  1.   

    是这样的,我的子窗体显示了主窗体中DBGrid的一条所选记录,然后再对其进行修改,用到多个ComboBox,他们说一个ADOQuery不能做到同时用select distinct ........这么说一个ComboBox要用一个ADOQuery了,因为要同时显示多个ComboBox中不重复的值
      

  2.   

    你用的是Dbcombobox吧? 直接用COMBOBOX,里面的内容通过adoquery用代码加进去
      

  3.   

    我用的是COMBOBOX,请注意我有许多个COMBOBOX在同一个事件中触发
      

  4.   

    请给点实用性的代码吧!以下是我原来写的:结果主窗体的DBGrid里只出现这2个字段.而且COMBOBOX里还有重复的,我想要显示一条有所有的字段的记录,其中COMBOBOX里没有重复的值
    procedure TForm1.FormActivate(Sender: TObject);
    var i:integer;begin
       combobox1.Items.Clear;
    with   FrmMain.ADOQuery6 do
      begin
        close;
        SQL.Clear;
        SQL.Add('select DISTINCT Sire,Proper from unit');
        Open;
        while   not   Eof   do
           for i:=0 to FrmMain.ADOQuery6.RecordCount - 1 do
             begin
              combobox1.Items.Add(FrmMain.ADOQuery6.FieldByName('Sire').AsString);
               combobox2.Items.Add(FrmMain.ADOQuery6.FieldByName('Proper').AsString);
                Next;
             end;
       end;
    end;
      

  5.   

    估计是没有clear刚才有个帖子也是同样的问题,然后,每运行一次,Items里的选项就增加一次,呵呵
      

  6.   

    SQL.Add('select DISTINCT Sire,Proper from unit');//这句话的意思就是你要找Sire,Proper并消除取值重复的行呀~那显示出来的当然就只有这两个字段的信息了
      

  7.   

    在对combobox中添加时,做个判断,select语句不要加distinct了
    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
    begin
      for i:=-1 to combobox1.ItemIndex do
      begin
      if trim(edit1.Text)<>trim(combobox1.Items.Strings[i+1])
       then combobox1.Items.Add(edit1.Text);//把edit.text换成你要的东西,这样不会重复了
    end;
    end;
      

  8.   

    用distinct函数吧,去重复值的.. select distinct 字段 from 表名
      

  9.   

    论坛上有设置,对于一个帖子的回复,连续回复不可超过三次汗!~
    把你的
    SQL.Add('select DISTINCT Sire,Proper from unit');
    改成
    SQL.Add('select * from XXX where (sire in (select distinct sire from unit)) and (proper in (select distinct proper from unit))');
    试试看吧~~
      

  10.   


    for i:=0 to FrmMain.ADOQuery6.RecordCount - 1 do
    注掉,另外dbgrid里面的问题楼上说得明白
      

  11.   

    那样写错误,我在sql2000的查询分析器里试过了.还是重复
      

  12.   

    在sql2000的查询分析器里先測試,如果這裡通不過,那就是sql語句有問題!
    重復數據的記錄,要看看完完整整的這條記錄是不是有重復(重復的意思是要看看這兩條是不是完完全全一樣呢)?
      

  13.   

    用Dbcombobox,在子窗口打开的时候再分别插入可选选择的值。这样子窗口打开时,Dbcombobox中显示的是当前记录值,点击选择下拉列表中的值完成修改。给你个过程,有重复值是你没有cbx.Clear的原因,看下面的代码!//添加指定字段到DBComboBox控件
    procedure LoadDataToDBCbx(sTable,sField:String;Cbx:TDBComboBox);
    var
      sSql,sValue:String;
    begin
      sSql:=Format('select distinct(%s) from %s',[sField,sTable]);
      with dm.ADOQ do
      begin
        close;
        sql.Clear;
        sql.Text:=sSql;
        open;
        if RecordCount<1 then exit;
        cbx.Clear;
        first;
        while not Eof do
        begin
          sValue:=Trim(FieldByName(sField).Value);
          cbx.Items.Add(sValue);
          next;
        end;
      end;
    end;
      

  14.   

    有哪位贡献一个函数或过程,选出Sire和Proper里不重复的值,再通过参数传递给combobox.因为我每个窗体有很多个combobox,而且不想用太多的ADOQuery.小妹刚出校门实习期,现学Delphi不到2个月,难以编写.