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)
-   -   Guardar datos desde un dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=36575)

estopi 17-10-2006 14:12:16

Guardar datos desde un dbgrid
 
Hola tengo un ADOStoredProce conectado con una base de datos Informix que me devuelve la informacion y la muestro en un dbgrid, ahora quiero almacenar la informacion de algunas columnas del debgrid en mi tabla de Access. Lo que necesito saber es como hago para recorrer cada fila e ir insertandola en mi tabla de Access. Desde ya gracias por la ayuda que me puedan dar. Saludos.

Neftali [Germán.Estévez] 17-10-2006 15:54:16

Lo normal es recorrer el DataSet asociado al Grid, y no el DBGrid directamente. El recorrido se hace con los métodos estandard (EOF, Next,...).
¿Exactamente cual es el problema? ¿Algo en particular? ¿El recorrido? ¿La inserción?

estopi 17-10-2006 16:18:42

Lo que estoy intentando hacer es a partir de la informacion que me devuelve el ADOStoredProc, tengo un DataSource que se asocia al ADOStoredProc y este ultimo al DBGrid. Cuando ejecuto la aplicacion la informacion es mostrada en el DBGrid, lo que quiero es tomar la info que me devuelve el ADOStoredProc y guardar algunos campos en una tabla de Access que ya tengo conectada por ADOConecction.

Neftali [Germán.Estévez] 17-10-2006 18:28:54

No me has contestado a las preguntas. ¿Lo has intentado? ¿Te da algun error?

Podría ser algo así; Aquí se accede al DataSet a partir del DGBrid, porque no acabo de enterder cómo lo has conectado, pero puedes sustituir el "DBGrid2.DataSource.DataSet" por el componente de DataSet que estés utilizando.

Código Delphi [-]
  // Ir al principio del DataSet
  DBGrid2.DataSource.DataSet.First;
  // recorrido
  while not (DBGrid2.DataSource.DataSet.Eof) do begin
    // preparar el Insert
    ADOTable1.Append;
    // Acceder a los campos y guardarlos en la tabla
    ADOTable1.FieldByName('Campo1').AsString :=
      DBGrid2.DataSource.DataSet.FieldByName('Campo1').AsString;
    ADOTable1.FieldByName('Campo2').AsString :=
      DBGrid2.DataSource.DataSet.FieldByName('Campo2').AsString;
    // Guardar el registro de la tabla
    ADOTable1.Post;
    // Siguiente
    DBGrid2.DataSource.DataSet.Next;
  end;

kyke_mx 17-10-2006 18:52:52

Recorrer dataSet e isertar
 
Tiene razon Neftali, y si desea usar sql para insertar podria quedar asi:

Código Delphi [-]

DBGrid1.DataSource.DataSet.First;While not (DBGrid1.DataSource.DataSet.Eof) Do
Begin

  ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('INSERT INTO POA (Campo1, Campo2, etc');
 ADOQuery2.SQL.Add('VALUES (:Parametro1, :Parametro2, :etc');
 ADOQuery2.ParamByName('Parametro1').Value:=DBGrid1.DataSource.DataSet.FieldByName('Campo1').value; 
 ADOQuery2.ParamByName('Parametro2').Value:=DBGrid1.DataSource.DataSet.FieldByName('Campo2').value;
...
  ADOQuery2.ExecSQL;
DBGrid1.DataSource.DataSet.Next;
End;

MARLON1 01-02-2008 20:07:17

hola:
 
espero y puedas ayudar utilize tu ejemplo pero yo utilize un query y este es mi codigo:

procedure TForm4.Button1Click(Sender: TObject);
begin
with form1 do
begin

if Form4.ModalResult = mrOK then begin
DBGrid1.DataSource.DataSet.First;
While not (DBGrid1.DataSource.DataSet.Eof) Do
Begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('INSERT INTO cliente (clavecliente, nombre, apellido,direccion,telefono,CP,RFC,clavemaquinaria');
Query1.SQL.Add('VALUES (:cla, :nom, :ape, :dir, :tel, :c, :r, :ma');
Query1.ParamByName('cla').Value:=DBGrid1.DataSource.DataSet.FieldByName('clavecliente').value;
Query1.ParamByName('nom').Value:=DBGrid1.DataSource.DataSet.FieldByName('nombre').value;
Query1.ParamByName('ape').Value:=DBGrid1.DataSource.DataSet.FieldByName('apellido').value;
Query1.ParamByName('dir').Value:=DBGrid1.DataSource.DataSet.FieldByName('direccion').value;
Query1.ParamByName('tel').Value:=DBGrid1.DataSource.DataSet.FieldByName('telefono').value;
Query1.ParamByName('c').Value:=DBGrid1.DataSource.DataSet.FieldByName('CP').value;
Query1.ParamByName('r').Value:=DBGrid1.DataSource.DataSet.FieldByName('RFC').value;
Query1.ParamByName('ma').Value:=DBGrid1.DataSource.DataSet.FieldByName('clavemaquinaria').value;
Query1.ExecSQL;
DBGrid1.DataSource.DataSet.Next;
End;
end;
end;
end;
end.

pero al momento de ejecutarlo me sale un error de sintaxis de mysql.
ojala y me puedas responder lo mas pronto posible te lo agradeceria demasiado.
gracias por la ayuda . Saludos

felipe88 01-02-2008 20:18:36

Ya te fijaste en la fecha de este hilo...

MARLON1 01-02-2008 20:21:56

ups...
 
Cita:

Empezado por felipe88 (Mensaje 262802)
Ya te fijaste en la fecha de este hilo...

:eek: no me habia dado cuenta, espero que tu me puedas ayudar en el problema ke tengo.
gracias

keyboy 01-02-2008 20:26:32

Cita:

Empezado por MARLON1 (Mensaje 262792)
pero al momento de ejecutarlo me sale un error de sintaxis de mysql.

En estas líneas:

Código Delphi [-]
Query1.SQL.Add('INSERT INTO cliente (clavecliente, nombre, apellido,direccion,telefono,CP,RFC,clavemaquinaria');
Query1.SQL.Add('VALUES (:cla, :nom, :ape, :dir, :tel, :c, :r, :ma');

falta cerrar los paréntesis:

Código Delphi [-]
Query1.SQL.Add('INSERT INTO cliente (clavecliente, nombre, apellido,direccion,telefono,CP,RFC,clavemaquinaria)');
                                                                                                             ^
Query1.SQL.Add('VALUES (:cla, :nom, :ape, :dir, :tel, :c, :r, :ma)');
                                                                 ^

Bye

clauheidern 11-01-2015 23:54:41

Guardar datos desde un dbgrid
 
Cita:

Empezado por Neftali (Mensaje 162711)
No me has contestado a las preguntas. ¿Lo has intentado? ¿Te da algun error?

Podría ser algo así; Aquí se accede al DataSet a partir del DGBrid, porque no acabo de enterder cómo lo has conectado, pero puedes sustituir el "DBGrid2.DataSource.DataSet" por el componente de DataSet que estés utilizando.

Código Delphi [-]
  // Ir al principio del DataSet
  DBGrid2.DataSource.DataSet.First;
  // recorrido
  while not (DBGrid2.DataSource.DataSet.Eof) do begin
    // preparar el Insert
    ADOTable1.Append;
    // Acceder a los campos y guardarlos en la tabla
    ADOTable1.FieldByName('Campo1').AsString :=
      DBGrid2.DataSource.DataSet.FieldByName('Campo1').AsString;
    ADOTable1.FieldByName('Campo2').AsString :=
      DBGrid2.DataSource.DataSet.FieldByName('Campo2').AsString;
    // Guardar el registro de la tabla
    ADOTable1.Post;
    // Siguiente
    DBGrid2.DataSource.DataSet.Next;
  end;

me funciono bien Neftali solo que al darle "guardar"(el código lo puse en un botón) me da un registro en blanco.


La franja horaria es GMT +2. Ahora son las 08:27:11.

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