要实现在一张Table中找出两两不相同的记录,如果有相同的只要其中的一个,最后将其存放到ComboBox中,问如何实现?
我的思路,首先先在COMBOBOX中显示第一条记录,然后再用数据库的记录和它比较,如果相同就不再显示在COMBOBOX中,如果不相同就显示,下面是我的代码,代码只能比较第一条记录的,其它的不能比较,期待高手出现 procedure TForm1.FormCreate(Sender: TObject);
var
i,s:integer;
begin
s:=0;
combobox1.Items.Add(adotable1.FieldByName('name').AsString);
 for i:=0 to s do
begin
adotable1.First;
while not adotable1.Eof do
begin
if  adotable1.FieldByName('name').AsString<>combobox1.Items.Strings[i]  then
begin
combobox1.Items.Add(adotable1.FieldByName('name').AsString);
   s:=s+1;
end;adotable1.Next;
end;
end;
end; 

解决方案 »

  1.   

    只要使用distinct就可以了啊
    用adoquery,  select distinct name  from table就可以了
    如果你一定要写循环判定也可以procedure TForm1.FormCreate(Sender: TObject);
    var
      i:integer;
      flag:boolean;
    begin
      s:=0;
      combobox1.Items.Add(adotable1.FieldByName('name').AsString);
      adotable1.First;
      while not adotable1.Eof do
      begin
        flag:=false;
        for i:=0 to combobox1.item.Count-1 do
        begin
          if  adotable1.FieldByName('name').AsString<>combobox1.Items.Strings[i]  then
          begin 
            flag := true; 
          end;
          if not flag  then   combobox1.Items.Add(adotable1.FieldByName     ('name').AsString);
        adotable1.Next;
      end;
    end;
    end;
      

  2.   

    ACCESS
     niat97222(Freeman),那应该怎么写啊
      

  3.   

    循环错了,for i:=0 to s do 中的s并不会因为你后面的s:=s+1而改变,所以只循环一次。
    其实不用这么麻烦,用combobox1.Items.IndexOf(返回-1表示不在列表中)来判断就行了:
    procedure TForm1.FormCreate(Sender: TObject);
    var
    i:integer;
    begin
    adotable1.First;
    while not adotable1.Eof do
    begin
    if combobox1.Items.IndexOf(adotable1.FieldByName('name').AsString) = -1 then
      combobox1.Items.Add(adotable1.FieldByName('name').AsString);
    adotable1.Next;
    end;
    end;
      

  4.   

    niat97222(Freeman) 的代码不对
    sysu(死树) OK 接分