Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 darkone2k4.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  BM: TBookMarkStr;
  i: Integer;
  s: string;
  ArchTexto: TextFile;
begin
  AssignFile(ArchTexto,'C:\A_LA_DERECHA.TXT');
  Rewrite(ArchTexto);
  BM:= DBGrid1.DataSource.DataSet.Bookmark;
  DBGrid1.DataSource.DataSet.DisableControls;
  DBGrid1.DataSource.DataSet.First;
  while not DBGrid1.DataSource.DataSet.Eof do
  begin
    s:= '';
    for i:= 0 to DBGrid1.FieldCount - 1 do
    begin
      (* llenar con blancos a la izquierda (largo físico de campo - largo) y concatenar *)
      s:= s + StringOfChar(' ', DBGrid1.Fields[i].DisplayWidth -
                           Length(DBGrid1.Fields[i].AsString)) +
                           DBGrid1.Fields[i].AsString;
    end;
    Writeln(ArchTexto, s); (* guardar campos formateados del registro  *)
    DBGrid1.DataSource.DataSet.Next;
  end;
  CloseFile(ArchTexto);
  DBGrid1.DataSource.DataSet.Bookmark:= BM;
  DBGrid1.DataSource.DataSet.EnableControls;
end;

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 01-04-2011 a las 09:37:10.
Responder Con Cita
  #2  
Antiguo 01-04-2011
darkone2k4 darkone2k4 is offline
Miembro
 
Registrado: abr 2008
Posts: 89
Poder: 19
darkone2k4 Va por buen camino
Hola ecfisa.

Muchas gracias por la respuesta.
Voy a probar de inmediato el código que me has dado.


salu2.


----------------EDIT---------------
Acabo de probar el código y funciona muy bien.
Ahora tengo una consulta.

Los datos que muestro en el DBGRID, como los puedo ajustar para que el largo corresponda a los requerimientos??, ya que en algunos campos se supera en número de caracteres por campo que se necesitan en el archivo TXT.

salu2.



Última edición por darkone2k4 fecha: 01-04-2011 a las 08:02:01.
Responder Con Cita
  #3  
Antiguo 01-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 darkone2k4.

Revisá estos enlaces:

Colocar Ancho De columna de un DBGrid ...
Ajuste de columnas en un DBGrid
AutoAjustar un dbgrid

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 01-04-2011 a las 09:37:22.
Responder Con Cita
  #4  
Antiguo 01-04-2011
darkone2k4 darkone2k4 is offline
Miembro
 
Registrado: abr 2008
Posts: 89
Poder: 19
darkone2k4 Va por buen camino
gracias nuevamente por la respuesta ecfisa.

Hice una revisión de los links que me diste, pero no se ajusta a lo que necesito.

Creo que expliqué mal lo que necesito.
La verdad es que en el DBGRID me da lo mismo el largo( caracteres ) que tengan los campos, lo que es importante es que al momento de pasarlos al archivo de texto, éstos cumplan con los requerimientos de longitud.
Estoy jugando con copy, trim, length para ver si por ahí me funciona.

desde ya, muchas gracias.
Responder Con Cita
  #5  
Antiguo 01-04-2011
urixiv urixiv is offline
Miembro
 
Registrado: sep 2006
Posts: 23
Poder: 0
urixiv Va por buen camino
Pues si te he entendido bien, ya lo tienes.
Para cada campo miras su longitud con el length.
Y si es más corto que la longitud que debe tener en el txt le añades los espacios. Y sino pues haces un Copy de 0 al numero de caracteres que quieres o bien un LeftStr.

Espero haber sido de ayuda!
Responder Con Cita
  #6  
Antiguo 01-04-2011
darkone2k4 darkone2k4 is offline
Miembro
 
Registrado: abr 2008
Posts: 89
Poder: 19
darkone2k4 Va por buen camino
gracias por la respuesta urixiv.

al final lo he hecho utilizando Copy.
Claro que como son 15 columnas de distinto tamaño en longitud, he incluido un case donde, dependiendo de la columna, hiciera el recorte de caracteres.

salu2.

Responder Con Cita
  #7  
Antiguo 01-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 darkone2k4.

Me alegro que lo hayas podido realizar pero, no entiendo la necesidad de usar copy para ajustar el largo al guardar en el archivo.
De eso se encargan la propiedad DisplayWidth y Length en la línea:
Código Delphi [-]
  s:= s + StringOfChar(' ', DBGrid1.Fields[i].DisplayWidth -
                      Length(DBGrid1.Fields[i].AsString)) +
                      DBGrid1.Fields[i].AsString;
Si no alterás los valores de presentación tendran por defecto los declarados en el DataSet y por lo tanto el campo cumplirá los requerimientos de longitud. Es decir que un campo de 10 caracteres con 3 ocupados, se guardará con 10 caracteres (7 espacios y los 3 ocupados).

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 01-04-2011 a las 09:37:32.
Responder Con Cita
  #8  
Antiguo 01-04-2011
darkone2k4 darkone2k4 is offline
Miembro
 
Registrado: abr 2008
Posts: 89
Poder: 19
darkone2k4 Va por buen camino
gracias por responder nuevamente.

Tuve que utilizar Copy, ya que la información que se muestra en la dbgrid, viene de un archivo excel, el cual tiene un formato predeterminado y al pasarlo a TXT algunos campos quedan con una longitud de 255 caracteres, es por eso que he utilizado COPY para acortar los campos.

salu2.


Cita:
Empezado por ecfisa Ver Mensaje
Hola darkone2k4.

Me alegro que lo hayas podido realizar pero, no entiendo la necesidad de usar copy para ajustar el largo al guardar en el archivo.
De eso se encargan la propiedad DisplayWidth y Length en la línea:
Código Delphi [-]
  s:= s + StringOfChar(' ', DBGrid1.Fields[i].DisplayWidth -
                      Length(DBGrid1.Fields[i].AsString)) +
                      DBGrid1.Fields[i].AsString;
Si no alterás los valores de presentación tendran por defecto los declarados en el DataSet y por lo tanto el campo cumplirá los requerimientos de longitud. Es decir que un campo de 10 caracteres con 3 ocupados, se guardará con 10 caracteres (7 espacios y los 3 ocupados).

Un saludo.
Responder Con Cita
  #9  
Antiguo 01-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 darkone2k4.

Ahora entiendo, gracias por la aclaración.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 02-06-2011
ezequiel913 ezequiel913 is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 39
Poder: 0
ezequiel913 Va por buen camino
informacion!!

Cita:
Empezado por ecfisa Ver Mensaje
Hola darkone2k4.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  BM: TBookMarkStr;
  i: Integer;
  s: string;
  ArchTexto: TextFile;
begin
  AssignFile(ArchTexto,'C:\A_LA_DERECHA.TXT');
  Rewrite(ArchTexto);
  BM:= DBGrid1.DataSource.DataSet.Bookmark;
  DBGrid1.DataSource.DataSet.DisableControls;
  DBGrid1.DataSource.DataSet.First;
  while not DBGrid1.DataSource.DataSet.Eof do
  begin
    s:= '';
    for i:= 0 to DBGrid1.FieldCount - 1 do
    begin
      (* llenar con blancos a la izquierda (largo físico de campo - largo) y concatenar *)
      s:= s + StringOfChar(' ', DBGrid1.Fields[i].DisplayWidth -
                           Length(DBGrid1.Fields[i].AsString)) +
                           DBGrid1.Fields[i].AsString;
    end;
    Writeln(ArchTexto, s); (* guardar campos formateados del registro  *)
    DBGrid1.DataSource.DataSet.Next;
  end;
  CloseFile(ArchTexto);
  DBGrid1.DataSource.DataSet.Bookmark:= BM;
  DBGrid1.DataSource.DataSet.EnableControls;
end;

Un saludo.




hola ecfisa!!
solo queria pedirte si podes mandarme un mensaje detallandome mas o menos que se hace con la rutina, osea se que es para exportar los datos del DBgrid a un archivo TXT pero si podes comentar las lineas de codigo puntuales, por ejemplo para que sirve el BOOKMARK, como hacer para que tambien se exporten los nombres de las columnas y que no este todo hacia la derecha, para saber como se maneja, asi no es solo copy-paste, sino saber como funciona.

desde ya muchas gracias!!
saludos
Responder Con Cita
  #11  
Antiguo 02-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 ezequiel913.

Te documento el código linea a linea:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  BM: TBookMarkStr;
  i: Integer;
  s: string;
  ArchTexto: TextFile;
begin
  // Asociar un nombre de archivo a una variable de tipo File
  AssignFile(ArchTexto,'C:\A_LA_DERECHA.TXT');
  // Crear un archivo, abrirlo
  Rewrite(ArchTexto);
  // Guardar posición actual del DataSet
  BM:= DBGrid1.DataSource.DataSet.Bookmark;
  // Desactivar el mostrado en los controles data-aware asociados al DataSet
  DBGrid1.DataSource.DataSet.DisableControls;
  // Posicionarnos en el primer registro del DataSet
  DBGrid1.DataSource.DataSet.First;
  // Mientras el DataSet tenga registros...
  while not DBGrid1.DataSource.DataSet.Eof do
  begin
    s:= ''; // Inicializar cadena a vacío
    for i:= 0 to DBGrid1.FieldCount - 1 do  // desde el 1er al último campo
    begin
      // Concatenar en 's' cada campo con tantos espacios a la izquierda 
      // como le falten al largo actual del campo para llegar al largo declarado
      s:= s + StringOfChar(' ', DBGrid1.Fields[i].DisplayWidth -
                           Length(DBGrid1.Fields[i].AsString)) +
                           DBGrid1.Fields[i].AsString;
    end;
    // Guardar el campo ajustado en el archivo de texto
    Writeln(ArchTexto, s);
    // Desplazarnos al próximo registro del DataSet
    DBGrid1.DataSource.DataSet.Next;
  end;
  // Cerrar archivo.
  CloseFile(ArchTexto);
  // Volver a posición previamente guardada del DataSet
  DBGrid1.DataSource.DataSet.Bookmark:= BM;
  // Activar el mostrado en los controles data-aware asociados al DataSet
  DBGrid1.DataSource.DataSet.EnableControls;
end;
Lo que puede quedar un poco confuso es el uso de StringOfChar, que devuelve n caracteres iguales al especificado.
Si queremos mostrar la palabra 'hola' (de longitud 4) ajustada a longitud 7 rellenando con '@' los lugares faltantes a la izquierda sería:
Código Delphi [-]
   ShowMessage(StringOfChar('@',7-Length('hola'))+'hola'); // muestra: @@@hola 
  //Que es el resultado de concantenar  tantos '@' como le faltan a 'hola'
  //para llegar a una longitud de 7 caracteres y la palabra 'hola'
De todas formas si hay algo en lo que no me expliqué bién, te ruego que me lo hagas saber y gustoso busco otra forma de hacerlo.

Saludos.
__________________
Daniel Didriksen

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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
exportar reporte a un archivo con formato ebeltete Impresión 7 10-08-2024 00:46:21
Exportar en formato XBRL cincosoft Impresión 1 14-01-2016 20:52:12
Exportar a Excel con formato numérico Viky Varios 7 08-06-2011 21:01:38
Exportar un DBGRID a excel con formato de fecha Luis Castro Varios 3 21-01-2011 21:54:38
Exportar a Excel en formato .xls Parabol77 Varios 3 23-10-2010 01:32:23


La franja horaria es GMT +2. Ahora son las 07:41:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi