Gracias por las respuestas, estoy muy liado en esto
Encontré el error del post #5, y es que mi array tenía el tamaño [0..3]. Cuando le puse [0..100] arranca normal, pero para comprobar si llenaba bien el Array modifiqué un poquitín el código por:
Código Delphi
[-]
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;
Y desplegando el ComboBox2 NO me filtra nada de nuevo, me llena TODOS los Registros de esa columna, he ahi donde se explica el error que me lanzaba Delphi, pues dicha línea no me filtraba y sobrepasaba la capacidad del Array; Pregunta:
¿Por qué la línea:
Código Delphi
[-]if (B.IndexOf(FieldByName('Tipo').AsString)= -1) then
NO TRABAJA IGUAL QUE:
Código Delphi
[-]if (ComboBox1.Items.IndexOf(FieldByName('Tipo').AsString)= -1) then
que con -1 suprime los valores repetidos???
Cita:
Empezado por eduarcol
Si lo que quieres es agregar el resultado de la consulta al arreglo con eso bastara no tienes necesdiad del stringlist
|
No sé cómo se podría realizar un tipo de consulta de manera que me filtre valores sin repetir, pues por ejemplo los códigos:
Código Delphi
[-]ADOQuery1.Sql.text := sqlElementos + ' where Tipo = "Metal"';
ó
Código Delphi
[-]ADOQuery1.Sql.text := sqlElementos + ' where Tipo = "Anfotero"';
Estas Consultas lo único que me muestran son varios campos "Metal" repetidos, contando todos los que existen en la BD o en el otro caso muchos "Anfótero" y obviamente al lado los otros campos que si son diferentes, pero a mi solo me interesa capturar TODOS LOS NO REPETIDOS de la Columna "Tipo". Di un ejemplo con 4 (solo fue un ejemplo) pero si fueran 300, ahí cambia la cosa verdad?
Por ello estoy trancado en la línea:
Código Delphi
[-]if (B.IndexOf(FieldByName('Tipo').AsString)= -1) then
He decidido mejor adjuntar los ejemplos para que os puedas revisaros.
¿Alguna otra sugerencia, por favor?