Problemas con ClientDataSet, ¿Puedes ayudarme?

Estoy realizando una aplicación que lee registros de un archivo XML para volcarlos en un DBGrid, para ello uso un XMLTransformProvider, un ClientDataSet, un DataSource y por supuesto un DBGrid. Hasta ahí todo perfecto. Salen los datos en el Grid sin problemas. El siguiente paso es introducir los datos en una tabla de Interbase 6, para ello uso un IBTable, IBDatabase y un IBTransaction (no se si es necesario, pero leí que lo necesitaría). Esta acción quiero que se realice al pulsar un botón, y el código del Click es:
procedure TForm1.Button1Click(Sender: TObject);
begin
IBTable1.Active:=True;
While not ClientDataSet1.Eof do
begin
IBTable1.Insert;
IBTable1.Fields[0].Value := ClientDataSet1.Fields[0].Value;
IBTable1.Fields[1].Value := ClientDataSet1.Fields[1].Value;
IBTable1.Fields[2].Value := ClientDataSet1.Fields[2].Value;
IBTable1.Fields[3].Value := ClientDataSet1.Fields[3].Value;
IBTable1.Fields[4].Value := ClientDataSet1.Fields[4].Value;
IBTable1.Fields[5].Value := ClientDataSet1.Fields[5].Value;
IBTable1.Fields[6].Value := ClientDataSet1.Fields[6].Value;
IBTable1.Fields[7].Value := ClientDataSet1.Fields[7].Value;
IBTable1.Fields[8].Value := ClientDataSet1.Fields[8].Value;
ClientDataSet1.Next;
end;
IBTable1.Post;
IBTable1.Active:=False;
end;
Pero sólo me inserta el primer registro. ¿Ves algo erróneo en el código? ¿Sabrías cómo podría solucionar mi problema?
Muchas gracias por todo, espero tener suerte, ;). Chao.

1 Respuesta

Respuesta
1
Yo lo haría de esta manera (puede ser redundante pero es segura):
procedure TForm1.Button1Click(Sender: TObject);
Begin
IBTable1.Active:=True;
ClientDataSet1.First; // <-- Marko
While not ClientDataSet1.Eof do
begin
// IBTable1.Insert; <-- eliminado
IBTable1.Append; // <-- Marko
IBTable1.Fields[0].Value := ClientDataSet1.Fields[0].Value;
IBTable1.Fields[1].Value := ClientDataSet1.Fields[1].Value;
IBTable1.Fields[2].Value := ClientDataSet1.Fields[2].Value;
IBTable1.Fields[3].Value := ClientDataSet1.Fields[3].Value;
IBTable1.Fields[4].Value := ClientDataSet1.Fields[4].Value;
IBTable1.Fields[5].Value := ClientDataSet1.Fields[5].Value;
IBTable1.Fields[6].Value := ClientDataSet1.Fields[6].Value;
IBTable1.Fields[7].Value := ClientDataSet1.Fields[7].Value;
IBTable1.Fields[8].Value := ClientDataSet1.Fields[8].Value;
IBTable1.Post;// <-- Marko
ClientDataSet1.Next;
end;
// IBTable1.Post; <-- eliminado
IBTable1.Active:=False;
end;
Suerte.
Marco
Que bueno haberte ayudado, por favor valora la pregunta para que quede cerrada y cualquier otra persona la pueda utilizar.
Marco.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas