Ver Mensaje Individual
  #11  
Antiguo 25-01-2008
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Reputación: 18
david.rguez Va por buen camino
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

            // En primer lugar debemos buscar si el parte actual está examinado. Si no lo está, continuamos.
            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;
                // Ahora que ya está compuesto el texto lo agregamos
                conex.Text.Add(texto);
                conex.Style:= csSides;
                conex.Text.VertAlign:= vtaTop;
                conex.Text.Angle:= 90;

                // También debemos agregar este parte a la lista dinámica, para evitar que duplique la búsqueda
                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.

Última edición por jachguate fecha: 25-01-2008 a las 15:08:20. Razón: cambiar etiqueta code por delphi
Responder Con Cita