Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Alguien puede explicarme como funciona realmente un DataSet? (https://www.clubdelphi.com/foros/showthread.php?t=13637)

RobertoAmores 25-08-2004 17:39:06

Alguien puede explicarme como funciona realmente un DataSet?
 
Necesito capturar una serie de registros de un ClientDataSet, pero no entiendo bien como funciona internamente. Tengo este codigo:

Código:

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 erroneo en el codigo? ¿Sabrias como podria solucionar mi problema?
Muchas gracias por todo, espero tener suerte, ;). Chao.

marto 25-08-2004 17:46:16

Wop!

¿Por que no pones el Post dentro del bucle?

Sirkius 25-08-2004 19:26:59

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
   IBTable1.Active:=True;
   While not ClientDataSet1.Eof do
   begin
      IBTable1.Insert;
      For i := 0 to 8 do
         IBTable1.Fields[i].Value := ClientDataSet1.Fields[i].Value;
      ClientDataSet1.Next;
      IBTable1.Post;
   end;
   IBTable1.Active:=False;
end;


Así mejor ;)

roman 25-08-2004 19:41:15

marto y Sirkius:

¿Están seguros de que es necesario?

La ayuda de Delphi dice:

Cita:

Empezado por ayuda de delphi
Dataset methods that change the dataset state, such as Edit, Insert, or Append, or that move from one record to another, such as First, Last, Next, and Prior automatically call Post.

Entonces, según esto, cada vez que entra al bucle, la instrucción IBTable1.Insert automáticamente hará el Post de la última inserción. La única inserción que faltaría sería la última y el POst fuera del bucle se encargaría de ello.

// Saludos

aig 26-08-2004 08:45:00

¿Donde está ClientDataSet1?
 
El único problema que puede haber puede ser el registro activo de ClientDataSet1, si es el último lógicamente solo pasará un registro.

Prueba a poner ClientDataSet1.First antes del bucle y por si... asegurate que la tabla tiene más de 1 registro o que no está activo ningún filtro o rango.

marto 26-08-2004 09:07:00

Cita:

Empezado por roman
¿Están seguros de que es necesario?

Ya lo pensé roman, pero como nunca he trabajado con los objetos IB... era lo único raro que veía.

Cita:

Empezado por aig
El único problema que puede haber puede ser el registro activo de ClientDataSet1..

Amigo aig, a veces lo más evidente se nos escapa :confused: a mi tambien me parece que puede ser eso

Sirkius 26-08-2004 09:10:02

De todas formas, nada más sencillo que ir con el debugger paso a paso para ver cuantas vueltas da o si pasa algo raro... A mi siempre me resuelve todo el paso a paso :P


La franja horaria es GMT +2. Ahora son las 06:05:46.

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