Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-01-2011
ASUNCION ASUNCION is offline
Miembro
 
Registrado: nov 2010
Posts: 34
Poder: 0
ASUNCION Va por buen camino
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;

Última edición por ecfisa fecha: 14-01-2011 a las 16:41:55. Razón: Etiquetas
Responder Con Cita
  #2  
Antiguo 14-01-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 14-01-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-01-2011 a las 17:58:43.
Responder Con Cita
  #4  
Antiguo 14-01-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
varias lineas Luis_264 OOP 0 03-01-2009 04:52:40
como sumo varias lineas de un dbgrid en otra columna e incluso refrejarlo en un label jirbert Conexión con bases de datos 2 19-02-2008 16:32:16
TListView con varias lineas de texto Novás Varios 0 04-05-2004 20:20:09
label en varias lineas VolaRe Varios 10 11-04-2004 16:14:26
Showmessage con varias líneas victork_py Varios 1 20-08-2003 15:03:19


La franja horaria es GMT +2. Ahora son las 11:46:09.


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
Copyright 1996-2007 Club Delphi