Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   procesar varias lineas de un dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=71858)

ASUNCION 14-01-2011 15:53:51

procesar varias lineas de un dbgrid
 
Que tal muchachos,

Acontinuacion le presento un codigo que utilizo para seleccionar varias filas de un DBGrid y apartir de estas filas seleccionadas me crea un archivo TXT, todo lo hace perfecto, el unico problemas es que me procesa primero la ultima linea seleccionada en el dbgrid y luego sube a la primera hasta que finaliza.
Es necesario que me procese la primera linea, luego la segunda y asi sucesivamente.

Se que le estoy dando poca informacion pero ustedes son bueno en esto...

Código Delphi [-]
 
procedure TfLecturaArchivo.bFaileCheckTronicClick(Sender: TObject);
 var F    : textfile;
 var sArchivo, line, nombres : string;
 var i, j, l : integer;
begin
  if (DBGSolicitud.SelectedRows.Count > 1)   and   (frac((DBGSolicitud.SelectedRows.Count / 3)) > 0) then
    begin
      Showmessage('La cantidad de depositante no es multiplo de 3...!');
      exit;
    end;
  sd.Execute;
  sArchivo := sd.FileName;
  AssignFile( F, sArchivo);
  Rewrite(F);
  dm.qCliente.Open;
  line := '';
  j := 0;
  l := 0;
  with DBGSolicitud.DataSource.DataSet do
   begin
    For i := 0 to DBGSolicitud.SelectedRows.Count -1 do
     begin
        j := j+1;
        l := l+1;
      // definiendo los nombres
        if (dm.qSolicitudesSegundoNombre.Text = '') and (dm.qSolicitudesTercerNombre.Text = '') and (dm.qSolicitudesCuartoNombre.Text = '')then
          Nombres := dm.qSolicitudesPrimerNombre.Text
                     +chr(13)+ dm.qSolicitudesCuentaRegional.Text
                     +chr(13)+chr(13)+chr(13)+chr(13)+chr(13)+chr(13);
        if (dm.qSolicitudesSegundoNombre.Text <> '') and (dm.qSolicitudesTercerNombre.Text = '') and (dm.qSolicitudesCuartoNombre.Text = '')then
          Nombres := dm.qSolicitudesPrimerNombre.Text
                     +chr(13)+dm.qSolicitudesSegundoNombre.Text
                     +chr(13)+ dm.qSolicitudesCuentaRegional.Text
                     +chr(13)+chr(13)+chr(13)+chr(13)+chr(13);
        if (dm.qSolicitudesSegundoNombre.Text <> '') and (dm.qSolicitudesTercerNombre.Text <> '') and (dm.qSolicitudesCuartoNombre.Text = '')then
          Nombres := dm.qSolicitudesPrimerNombre.Text
                     +chr(13)+dm.qSolicitudesSegundoNombre.Text
                     +chr(13)+dm.qSolicitudesTercerNombre.Text
                     +chr(13)+dm.qSolicitudesCuentaRegional.Text
                     +chr(13)+chr(13)+chr(13)+chr(13);
        if (dm.qSolicitudesSegundoNombre.Text <> '') and (dm.qSolicitudesTercerNombre.Text <> '') and (dm.qSolicitudesCuartoNombre.Text <> '')then
          Nombres := dm.qSolicitudesPrimerNombre.Text
                     +chr(13)+ dm.qSolicitudesSegundoNombre.Text
                     +chr(13)+dm.qSolicitudesTercerNombre.Text
                     +chr(13)+ dm.qSolicitudesCuartoNombre.Text
                     +chr(13)+ dm.qSolicitudesCuentaRegional.Text
                     +chr(13)+chr(13)+chr(13);[/i]
        line := line+ nombres
        +chr(13)+IntToStr(dm.qSolicitudesChequeFinal.Value+1)
        +chr(13)+dm.qClienteCodigoPais.Text
        +dm.qClienteNoIntermediacion.Text
        +'T'
        + dm.qSolicitudesCuenta.Text
        + 'O'
        +'NNNN'
        +copy(dm.qSolicitudesCuentaRegional.Text,3,2)
        +chr(13);
        GotoBookMark(Pointer(DBGSolicitud.selectedRows.items[i]));
        // coloanco caracteres de cierre
        if (frac(j / 3) = 0) then
         line := line + '\^'
        else
         line := line + '|';
        if (j = 1) then
          line := '000001' + line;
        if (frac(j / 3) = 0) and (j < (DBGSolicitud.SelectedRows.Count)) then
          line := line + '000001';
      end;
      line := stringreplace(line, 'Ñ', '[', ([rfreplaceall]));
    end;
    WriteLn(f, line);
    closeFile(F);
    showmessage('Archivo Creado con exito...');
end;

ecfisa 14-01-2011 16:55:09

Hola ASUNCION.

Recordá encerrar tu código entre las etiquetas: [delphi] y [/delphi] , para que el texto sea más interpretable.

Si no usas dichas etiquetas por que te desorganiza el código, podés solucionarlo desde:
User CP -> Otras opciones -> Interfaz del editor de usuario, Seleccioná: "Editor Estándar - Controles de Formato Extra"

Saludos.

ecfisa 14-01-2011 17:21:55

Hola de nuevo.

Con respecto al problema se me ocurre que podrías almacenar la posición actual, procesar los registros seleccionados y volver a reposicionar.

Un ejemplo sencillo con un TMemo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  BM: TBookMarkStr;
begin
  Memo1.Clear;
  try
   DataSet.DisableControls; // desactivar mostrar datos 
   BM:= DBGrid1.DataSource.DataSet.Bookmark; // guardar posición actual
   for i:= 0 to DBGRid1.SelectedRows.Count-1  do
   begin
     DataSet.Bookmark:= DBGrid1.SelectedRows.Items[i]; // posiciona en c/u de registros seleccionados

     (* 
         Aquí iría el código que guarda en el archivo de texto  
         ...
      *)

     Memo1.Lines.Add(DBGrid1.SelectedField.AsString); // linea ejemplo, para darle funcionalidad al código
   end;
   DBGrid1.DataSource.DataSet.Bookmark:= BM;// restaurar posición
  finally
   DataSet.EnableControls; // activar mostrar datos
  end;
end;

Saludos.

ecfisa 14-01-2011 17:59:14

Para agregar otra idea, si usaras TStrings, podrías aprovechar el procedimiento SaveToFile simplificando el guardado de los registros.

Algo como:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  BM: TBookMarkStr;
  ts: TStrings;
begin
  try
   DataSet.DisableControls;
   ts:= TStringList.Create;
   BM:= DBGrid1.DataSource.DataSet.Bookmark;
   for i:= 0 to DBGRid1.SelectedRows.Count-1  do
   begin
     DataSet.Bookmark:= DBGrid1.SelectedRows.Items[i];
     (* Aca el código que cargue el string en TStrings *)
     ts.Add(DBGrid1.SelectedField.AsString); // ejemplo
   end;
   ts.SaveToFile('C:\PRUEBA.TXT');  // guardar en archivo
   DBGrid1.DataSource.DataSet.Bookmark:= BM;
  finally
   DataSet.EnableControls;
   ts.Free;
  end;
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 16:42:40.

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