Programación General > Delphi

 ¿cuál La Diferencia De Estos Códigos?

(1/1)

Deiv:
Estoy intentando capturar elementos no repetidos de una forma muy distinta sin utilizar Distinct y guardarlo en un Array, el primer código de abajo me funciona bien, pero el segundo no, ¿Por qué?

--- Código: Text ---procedure TForm1.FormCreate(Sender: TObject);type  UnArray = array[0..100] of string;var  i,j,x:  integer;  A:UnArray;const  sqlElementos = ' Select * from elementos ';begin  x:=0;  ADOQuery1.Active:= False;  ADOQuery1.Sql.text:= sqlElementos;  ADOQuery1.Active:= True;  with ADOQuery1 do    begin      first;      while not eof do        if (ComboBox1.Items.IndexOf(FieldByName('Tipo').AsString)=-1)then            begin               ComboBox1.Items.Add(FieldByName('Tipo').AsString);               A[x]:=FieldByName('Tipo').AsString;               inc(x);           end;        next;    end;end; 

--- Código: Text ---procedure TForm1.FormCreate(Sender: TObject);type  UnArray = array[0..100] of string;var  i,j,x:  integer;  A:UnArray;  B:TStringList;const  sqlElementos = ' Select * from elementos ';begin  x:=0;  B:= TStringList.Create;  ADOQuery1.Active:= False;  ADOQuery1.Sql.text:= sqlElementos;  ADOQuery1.Active:= True;  with ADOQuery1 do    begin      first;      while not eof do        if (B.IndexOf(FieldByName('Tipo').AsString)=-1) then           begin              ComboBox2.Items.Add(FieldByName('Tipo').AsString);              A[x]:= FieldByName('Tipo').Value;              inc(x);              next;           end;    end;end; 

¿Por qué la línea:


--- Código: Text ---if (B.IndexOf(FieldByName('Tipo').AsString)= -1) then 
NO TRABAJA IGUAL QUE:


--- Código: Text ---if (ComboBox1.Items.IndexOf(FieldByName('Tipo').AsString)= -1) then ¿Cómo corregir el segundo código para que trabaje como el primero?

lencho:
este hilo, no deberia estar en Delphi ????.


BYTE.

F_Tanori:

--- Cita de: "Deiv" ---¿Por qué la línea:


--- Código: Text ---if (B.IndexOf(FieldByName('Tipo').AsString)= -1) then 
NO TRABAJA IGUAL QUE:


--- Código: Text ---if (ComboBox1.Items.IndexOf(FieldByName('Tipo').AsString)= -1) then ¿Cómo corregir el segundo código para que trabaje como el primero?
--- Fin de la cita ---


yo no conozco delphi :P tal vez deba venir algun especializta :P pero creo que seria logico que faltara un indice pues la el atributo se llama items  :unsure:

<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->if (ComboBox1.Items[indice].IndexOf(FieldByName('Tipo').AsString)= -1) then<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

creo yo tal vez estoy mal


Saludos

Deiv:
UUUppsss!  :blink:
Tienen razón, me equivoqué y no sé como borrar el hilo, ruego al moderador o trasladarlo o borrarlo, pues abriré otro similar en Delphi.
Gracias.

Deiv:
Auí está la solución:

--- Código: Text ---with ADOQuery1 do  begin    first;    while not eof do      begin          if (B.IndexOf(FieldByName('Tipo').AsString)=-1) then            begin              B.Add(FieldByName('Tipo').AsString);               A[x]:=FieldByName('Tipo').AsString;              inc(x);            end;        next;      end;  end; Fin.

Navegación

[0] Índice de Mensajes

Ir a la versión completa