El valor de la traza que guardo no está vacío (lo compruebo pasando el ratón por encima de la variable cuando está en el punto de interrupción del Add, mostrando un cuadro emergente con el valor actual).
Os pongo la porción de código que se encarga del proceso:
Código Delphi
[-]
lista.Free;
lista:= TStringList.Create;
qtraza.SQL.Clear;
if Label1.Caption = 'atras' then
qtraza.SQL.Add('select * from trazavin where traza27 = :ref and traza05 = ''TRE''')
else
qtraza.SQL.Add('select * from trazavin where traza27 = :ref and traza05 = ''TRS''');
qtraza.Parameters.ParamByName('ref').Value:= refPadre;
qtraza.Open;
while not qtraza.Eof do
begin
if not buscarLista(lista, qtrazaTRAZA12.Value) then
begin
qprocesos.Close;
qprocesos.SQL.Clear;
qprocesos.SQL.Add('select * from moviproce where mopromovi =
arte and moproorden =
rden');
qprocesos.Parameters.ParamByName('parte').Value:= qtrazaTRAZA12.Value;
qprocesos.Parameters.ParamByName('orden').Value:= qtrazaTRAZA23.Value;
qprocesos.Open;
while not qprocesos.Eof do
begin
taprocesos.Open;
taprocesos.Locate('PROCODIGO',qprocesosMOPROCODIGO.Value,[]);
texto:= texto + taprocesosPRONOMBRE.Value + #13;
taprocesos.Close;
qprocesos.Next;
end;
conex.Text.Add(texto);
conex.Style:= csSides;
conex.Text.VertAlign:= vtaTop;
conex.Text.Angle:= 90;
lista.Add(qtrazaTRAZA12.AsString);
end;
qtraza.Next;
El Free y Create inicial es para asegurarme de que no quedan rastros si se producen ejecuciones consecutivas.
"qprocesos" y "qtraza" son componentes TADOQuery y "conex" es un componente de terceros para la composición de diagramas.
"buscarLista" es una función que he creado que comprueba mediante el método "IndexOf" si el elemento en cuestión está dentro de la lista.
Como veis, si el elemento no está, busca los datos necesarios, configura el componente del diagrama y agrega el elemento (o eso pretendía) a la lista para que si se repite en el bucle no vuelva a ejecutar todo el proceso.
Pd: Ahí puse "asString" porque fue lo último que probé, pero con "Value" el resultado es el mismo.