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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-12-2008
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Campos creados dinámicamente clientdataset

Hola. Utilizo Delphi 5.
Necesito poder crear dinámicamente campos en un clientdataset. Al arrancar la aplicación este dispone de 2 campos, que en función de la operatoria del cliente requiere añadir nuevos. El clientdataset lo utilizo como tabla temporal en memoria no conectada a ningún provider, y lo relleno con insert/post etc.
El problema es que al añadir dinámicamente campos me da un error de "missing provider. ..." que no sé como solucionar. Os dejo aquí el código que utilzo:

Código:
...
private
   col: integer ;   // contador de columnas añadidas
....
// Al crear el form, hacemos el clientdataset.createdataset;
...
// botón para añadir columnas
procedure TForm1.Button2Click(Sender: TObject);
VAR nombrecampo:string;
begin
     button2.Enabled:=false;
     col:=col+1;
     nombrecampo:='C'+formatfloat('00',col);

     ClientDataSet1.close; // sin esto también da error pero se pierden los datos
     with ClientDataSet1.FieldDefs do
     begin
               with AddFieldDef do
                    begin
                         Name := nombrecampo;

                         DataType := ftString;
                         Size := 10;
                         CreateField(ClientDataSet1,nil,nombrecampo);
                    end;
     end;

     cliendataset1.open;  // Aquí salta la exception
end;

// botón para borrar columnas (siempre la última que se añadió)
procedure TForm1.Button3Click(Sender: TObject);
begin
     if col>0 then
     begin
         col:=col-1; 
         ClientDataSet1.close;
       ClientDataSet1.Fields.Remove(ClientDataSet1.Fields[ClientDataSet1.Fields.count-1]);
     end;
end;
Al borrar una columna también pasa una cosa extraña y es que si después se trata de añadir de nuevo dice que ya existe una columna con el nombre Cxx (donde xx es el col por el que se va).
Llevo mucho tiempo usando el clientdataset sin problemas pero nunca se me había planteado crear/destruir columnas dinámicamente mientras se mantienen los datos que estuviesen registrados, y necesito que esos datos se mantengan a pesar de los cambios en la estructura. No sé si esto será posible de hacer.
Gracias.
Responder Con Cita
  #2  
Antiguo 03-12-2008
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 19
droguerman Va por buen camino
Necesitas llamar al Método CreateDataset antes de hacer open (puesto que no estás usando providers)
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 03-12-2008
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Hola. Gracias por la respuesta, pero precisamente ahí está la cuestión. Lo que quiero saber es si hay forma de alterar la estructura del clientdataset sin perder los datos que contiene. Si hago el createdataset, pierdo los datos.
Un saludo.
Responder Con Cita
  #4  
Antiguo 03-12-2008
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 19
droguerman Va por buen camino
Creo que te sale más sencillo clonar el dataset temporalmente aqui un ejemplo
__________________
self.free;
Responder Con Cita
  #5  
Antiguo 04-12-2008
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Hola. Gracias por la respuesta. No conocía ese método del clonecursor. Me ha venido estupendamente. Clono el clientdataset, modifico la estructura del original y luego restauro los datos. Ya me funciona bien.
Gracias por la ayuda.
Responder Con Cita
  #6  
Antiguo 16-10-2010
Avatar de Wbarrantes
Wbarrantes Wbarrantes is offline
Miembro
 
Registrado: ago 2010
Posts: 119
Poder: 14
Wbarrantes Va por buen camino
hola

no se si aun existe alguno de estos usuarios, pero de ser asi, podrias indicarme como hiciste para borrar una columna? tengo los mismos problemas...


gracias
Responder Con Cita
  #7  
Antiguo 18-10-2010
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Hola. Pues no encontré la solución, por lo que utilizé el método sugerido de clonar el dataset. Como habitualmente en la tabla tengo como máximo 30 o 40 registros, pues es muy rápido y me fue suficiente con ese sistema. Lo siento, pero no seguí investigando el asunto.
Un saludo.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Campos creados con Fields editor de Delphi brakaman Conexión con bases de datos 3 26-10-2007 17:46:03
Cerrar dos formularios creados dinamicamente (al mismo tiempo) ctronx Varios 7 02-09-2004 01:19:04
cerrar formularios creados dinamicamente ctronx Varios 5 17-06-2004 19:25:17
Campos creados dinámicamente vs creados estáticamente Jose_Pérez Conexión con bases de datos 2 14-04-2004 12:34:03
Asignar evento on exit y otros a varios labeledit creados dinamicamente cotoprix OOP 2 09-01-2004 00:05:53


La franja horaria es GMT +2. Ahora son las 16:05:14.


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
Copyright 1996-2007 Club Delphi