Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Guardar columna dbgrid en un solo campo de una bd (https://www.clubdelphi.com/foros/showthread.php?t=83986)

exequielmatias1 24-08-2013 01:38:20

Guardar columna dbgrid en un solo campo de una bd
 
Holaa! Queria saber si se puede guardar una columna de un dbgrid en un solo campo de una base de datos.

Tengo un dbgrid que me muestra el resultado de una consulta anterior en una sola columna ej "Nombres"
todos esos Nombres que me muestra el dbgrid quiero guardarlos en un solo campo (deudores) de una base de datos.
por ej el dbgrid me muestra lo siguiente:

Nombres
--------
Pablo
Pedro
Lucas

y en el campo Deudores de mi base de datos quiero que se guarden estos nombres ej
Pablo, Pedro, Lucas

ecfisa 24-08-2013 02:06:35

Hola.

Código Delphi [-]
procedure SaveCol(aGrid: TDBGrid; const ColNro: Integer; 
  aDataSet: TDataSet; const aFieldName: string);
var
  BM: Pointer;
  s : string;
begin
  with aGrid.DataSource.DataSet do
  begin
    DisableControls;
    BM := GetBookmark;
    try
      First;
      while not Eof do
      begin
        s := s + aGrid.Columns[ColNro].Field.AsString + ',';
        Next;
      end;
      SetLength(s,Length(s)-1);
    finally
      GotoBookmark(BM);
      FreeBookmark(BM);
      EnableControls;
    end;
  end;
  with aDataSet do
  begin
    Append;
    FieldByName(aFieldName).AsString := s;
    Post;
  end;
end;

Ejemplo de uso:
Código Delphi [-]
  // Se supone a DataSet1 abierto
  SaveCol(DBGrid1, 1, DataSet1, 'Campo');

Saludos :)

exequielmatias1 24-08-2013 17:55:48

Holaaa!! gracias por tu rapida contestación! lo probe y me aparece este error: 'list index out of bounds (1)' probe con 0 y corrio sin errores pero no se guarda nada en la bd, sinceramente no tengo mucho conocimiento en delphi, no sabria como solucionar este error..
otra consulta.. entiendo que en DataSet1 debo poner mi ADOQuery donde tengo enlazada a la tabla destino...

ecfisa 24-08-2013 19:13:44

Hola.
Cita:

lo probe y me aparece este error: 'list index out of bounds (1)' probe con 0 y corrio sin errores
Si tu DBGrid tiene una sola columna es un error lógico y esperable, la primer columna tiene índice 0.

Cita:

pero no se guarda nada en la bd, sinceramente no tengo mucho conocimiento en delphi, no sabria como solucionar este error..
En el ejemplo supongo que existe un componente data aware que, TDataSource mediante, está asociado al TDBGrid y otro que, en tu caso puede ser un TADOTable, TADODataSet o un TADOQuery.

No sé cuál de ellos te decidas a usar para guardar los datos en la otra tabla de acuerdo a eso será la sintáxis a usar. La del ejemplo funcionaría bién para un TADOTable o un TADODataSet.

Saludos. :)

ecfisa 24-08-2013 19:37:33

Hola de nuevo.

Para no dejar las tareas a medias, un ejemplo usando un TDBGrid con una sola columna, asociado a un TADOQuery y un TADODataSet asociado a la tabla destino.

Código Delphi [-]
procedure SaveCol(aGrid: TDBGrid; const ColNro: Integer;
  aDataSet: TADODataSet; const TargetFieldName: string);
var
  BM: Pointer;
  s : string;
begin
  // Armar cadena desde la tabla destino
  with aGrid.DataSource.DataSet do
  begin
    DisableControls;
    BM := GetBookmark;
    try
      First;
      while not Eof do
      begin
        s := s + aGrid.Columns[ColNro].Field.AsString + ',';
        Next;
      end;
      SetLength(s,Length(s)-1);
    finally
      GotoBookmark(BM);
      FreeBookmark(BM);
      EnableControls;
    end;
  end;
  // Guardar resultado en campo de tabla destino
  with aDataSet do
  begin
    Append;
    FieldByName(TargetFieldName).AsString := s;
    Post;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SaveCol(DBGrid1, 0, ADODataSet1, 'NAME');
end;
El ejemplo está probado y funcionando.


Saludos. :)


La franja horaria es GMT +2. Ahora son las 23:48:26.

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