Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Array Dinamico (https://www.clubdelphi.com/foros/showthread.php?t=22364)

VRO 13-06-2005 19:07:34

Array Dinamico
 
Hola , gente del foro.

Tengo la siguiente cuestion. Utilizo un array dinámico y necesito redimensionarle a medida que voy insertarndo datos, os paso el código que lo vereis mejor:

Código Delphi [-]
//Definimos una estructura para importarPDA
  TPatron=Record
         numero: Integer;
         fecha: TDate;
        end;

Tengo una funcion que es importar y dentro de ella declaro:

Código Delphi [-]
 var         MPDA:Array of TPatron;

Despues en ella también hago una consulta:
Código Delphi [-]
       Query.sql.clear;
       Query.sql.add('select count(*) as num,numero,fecha_actual from tPDA where fecha_actual is not null group by numero,fecha_actual');
       Query.open;
 
       y:=0;

       SetLength(MPDA,Query.fieldbyname('num').asinteger);
       while Query.eof=false do
        begin
           y:=y+1;
           MPDA[y].numero:=Query.fieldbyname('numero').asInteger;
           MPDA[y].fecha:=Query.fieldbyname('fecha_actual').AsDateTime;
           query.Next;
        end;

Aqui puedo sacar la dimensión del array mediante una consulta, pero tengo que hacer otro que no me aparece en la consulta, es decir, en la consulta saco los datos de aquellos registros que tienen fechas asignadas. Pero me surgen casos en los que no hay fechas asignadas y tengo que introducir esos datos en el array y volverlo a redimensionar, pero si lo redimensiono a medida que lo necesito me borra los casos anteriores que ya tengo introducido alguien sabe como preservas los datos que ya tengo en un array que redimensiono.

Por ejemplo con Visual Basic para redimensionar de utiliza "Redim" y para redimensionar preservando lo anterior utilizo "Redim Preserver"

Pues yo necesito lo mismo pero para DElphi 6.

Gracias de antemano por vuestra ayuda.

PD: Si no entendeis mis explicaciones por favor ruego me lo comuniqurn.

maeyanes 13-06-2005 19:13:04

Te recomiendo que uses un TList. Busca en la ayuda de Delphi para que veas sus propiedades y métodos, así como ejemplos.


Saludos...

jachguate 13-06-2005 19:21:32

Habrá que ver algo de código, ya que setlength siempre preserva los elementos ya existentes en el arreglo.

Hasta luego.

;)

VRO 14-06-2005 08:24:44

Te voy a poner un ejemplo de lo que tengo y de lo que quiero:

Lo que tengo hecho:

Código Delphi [-]
       Query.sql.clear;
       Query.sql.add('select count(*) as num,numero,fecha_actual from tPDA where fecha_actual is not null group by numero,fecha_actual');
       Query.open;
 
       y:=0;

       SetLength(MPDA,Query.fieldbyname('num').asinteger);
       while Query.eof=false do
        begin
           y:=y+1;
           MPDA[y].numero:=Query.fieldbyname('numero').asInteger;
           MPDA[y].fecha:=Query.fieldbyname('fecha_actual').AsDateTime;
           query.Next;
        end;

Y lo que quiero es meter el SetLength dentro del while he ir dandole valores, de la siguiente forma:

Código Delphi [-]
       Query.sql.clear;
       Query.sql.add('select count(*) as num,numero,fecha_actual from tPDA where fecha_actual is not null group by numero,fecha_actual');
       Query.open;
 
       y:=0;

       while Query.eof=false do
        begin
           y:=y+1;
           SetLength(MPDA,y);

           MPDA[y].numero:=Query.fieldbyname('numero').asInteger;
           MPDA[y].fecha:=Query.fieldbyname('fecha_actual').AsDateTime;
           query.Next;
        end;

Pretendo ir ampliando el array ha medida que voy insertando através de la variable y, pero que me ocurre que sólo me matiene el valor correcto del último registro insertado, el resto me pasa los valores a 0.

¿A qué se debe esto? y como puedo solucionarlo?

Gracias por todo a todos.

Ohcan 14-06-2005 09:58:19

Intenta algo así:
Código Delphi [-]
//Instertar un nuevo elemento en un array dinámico ya existente
//[...]
  SetLength(ElArray, Length(Array)+1); //Ampliamos el Array
  Array[Length(Array)-1] := NuevoElemento; //Añadimos el nuevo elemento en la 
                                                            //última posición de array (que acabamos de crear)

VRO 14-06-2005 12:16:14

Muchas gracias OhCan de momento me va esta función de maravilla, en caso de que me surga algún proiblemilla con ella te lo comento.


Gracias también al resto por intentarlo.

Ohcan 14-06-2005 12:40:16

De nada...
¡Qué haríamos sin los foros! ;)


La franja horaria es GMT +2. Ahora son las 18:29:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi