Ver Mensaje Individual
  #1  
Antiguo 03-12-2008
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Reputación: 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