Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-06-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 15
VRO Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 13-06-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.727
Poder: 18
maeyanes Va por buen camino
Te recomiendo que uses un TList. Busca en la ayuda de Delphi para que veas sus propiedades y métodos, así como ejemplos.


Saludos...
Responder Con Cita
  #3  
Antiguo 13-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.243
Poder: 22
jachguate Va por buen camino
Habrá que ver algo de código, ya que setlength siempre preserva los elementos ya existentes en el arreglo.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 14-06-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 15
VRO Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 14-06-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 15
Ohcan Va por buen camino
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)
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #6  
Antiguo 14-06-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 15
VRO Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 14-06-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 15
Ohcan Va por buen camino
De nada...
¡Qué haríamos sin los foros!
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:03:15.


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