Club Delphi  
    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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-05-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
problema

que tal amigos del foro escribo para ver si me pueden ayudar con un problema que tengo he hecho una aplicacion que genera un archivo de texto a partir de una bd el problema es que ese archivo debe de tener cierto formato ya que los datos quemando al texto seran importados a otra aplicacion.
la tabla consta de 4 campos los cuales son Id_Cuenta, Estado, Importe,Numero
exporto al texto todos los regitros con todos sus campos el problema es que el campo importe de be de ser de 16 posiciones.

supongamos que el texto queda asi
0000091004458574850_______1000001008145
asi asi debe de quedar cada registro los primeros 18 caracteres son del primer campo,el siguiente que es de uno es el segundo campo, despues vienen las 16 posiciones del campo importe`con los espacios (suponiendo que los guiones bajos son espacios en blanco), y por ultimo el nuumero que es de longitud 7.
el problema es que mi texto queda asi
00000910044585748501000001008145
entonces en el campo de importe no me respeta los espacios en blanco como le puedo hacer para que en mi texto me salga como lo requiero ?
espero me puedan ayudar porque la verdad ya me he dado muchos topes.

gracias por su atencion y hasta pronto.
Responder Con Cita
  #2  
Antiguo 14-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Talking Vamos sin hacernos bolas je

Tus campos son Id_Cuenta, Estado, Importe,Numero el cual

ID_Cuenta = 16
Estado = 1
Importe = 16 ( a la derecha)
Numero = 7


Usemos una funcion ya un poco generalizada

Código:
Function Palabra(Cad : String;LarCad : String;Const Lado : Byte = 1) : String;
Begin
  While Length(Cad) < LarCad Do
     Case Lado Of
       1 : Cad := ' '+Cad;
       2 : Cad := Cad+' ';
     End;
  Result := Cad;
End;
Weno con esa funcion ahora la aplicamos cuando bajas tus datos

Código:
Procedure.....
.
.
Begin
  Memo1.Lines.Clear;
  ..abres tu table
  While Not Table1.EoF Do
  Begin
     Memo1.Lines.Add(Table1.FieldByName('ID_Cuenta').AsString+
                             Table1.FieldByName('Estado').AsString+
                             Palabra(Table1.FieldByName('Importe').AsString,16)+
                             Table1.FieldByName('Numero').AsString);
     Table1.Next;
  End;
  Memo1.Lines.SaveToFile('MisDatos.Txt');
End;
eso es todo no hay mas (weno si.. si vas adorando la funcion puedes decirle que te corte la linea y muchas cositas mas, ojo en el uso de Const, esa es otra historia..
__________________
saludos desde Puebla Mexico..
asanxt@hotmail.com
"como siempre a sus ordenes y siempre con buena cara"
'lolita me excitas, perversa piel de melocotón'
Responder Con Cita
  #3  
Antiguo 14-05-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
que tal

gracias por la respuesta tan rapida pero sabes cuando compilo el programa me dice un error de imcompatible types: 'String' and 'Integer' en la linea
While Length(Cad) < LarCad Do

no se a que se deba me podrias orientar al raspecto .?

gracias por tu ayuda y disculpa las molestias

saludos ¡
Responder Con Cita
  #4  
Antiguo 14-05-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Si te fijas bien en la declaracion de los parametros de la funcion veras el error...
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 14-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Unhappy Es cierto jejeje

es que :

Código:
Function Palabra(Cad : String;LarCad : String;Const Lado : Byte = 1) : String;
No es asi je, es
Código:
Function Palabra(Cad : String;LarCad : Integer;Const Lado : Byte = 1) : String;

Todo por creer que tenemos un compilador interno en nosotros jejejeje como RoboCop jeee
__________________
saludos desde Puebla Mexico..
asanxt@hotmail.com
"como siempre a sus ordenes y siempre con buena cara"
'lolita me excitas, perversa piel de melocotón'
Responder Con Cita
  #6  
Antiguo 14-05-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
jejeje

que crees tengo un pequeño problema si corro el programa al mandar al texto se queda trabado lo mande a correr linea por linea y ya no hace nada

entra al siglo
while not Table2.Eof do y se brinca a la linea
Table2.FieldByName('NumeroCheque').AsString);
y de ahi se va a la funcion y se queda atorado en laslineas

While Length(Cad) < LarCad Do
Case Lado of
1: Cad:=''+Cad;

no se que es lo que pase en verdad ojala me puedas ayudar de antemano gracias
Responder Con Cita
  #7  
Antiguo 14-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Unhappy Haber

Haber escribe lo que pusiste en el While y como escribiste la funcion??
__________________
saludos desde Puebla Mexico..
asanxt@hotmail.com
"como siempre a sus ordenes y siempre con buena cara"
'lolita me excitas, perversa piel de melocotón'
Responder Con Cita
  #8  
Antiguo 01-12-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
hola que tal amigos del foro

la verdad este hilo me lo contestaron hace tiempo pero tengo un pequeño detalle como puedo hacer que la funcion que se nombra en este hilo me ponga los espacios del lado derecho y no solo del lado izquierdo?
ya que yo agrego lineas a un Tmemo de esta manera

Código:
 
 
Function Palabra(Cad : String; LarCad : Integer;Const Lado : Byte = 1) : String;
  begin
   While Length(Cad) < LarCad Do
	Case Lado of
	 1: Cad:=' '+Cad;
	 2: Cad:=Cad+' ';
	end;
	Result:=Cad;
  end;
 
memo1.lines.add (Palabra(Tabla1.FieldByName('ImporteMoneda').asfloat),16);
el caso es que esto hace que me ponga el importe _________100.00 con espacios en la izquierda solo que tengo un problema quiero poner espacios a la derecha pero de un campo string quiero poner un nombre y que quede de tamaño 40 no importando si el nombre esta muy corto pero quiero justificarlo con espacios a la derecha no a la izquierda.

Alguien podria auxiliarme?

espero que si
de antemano gracias por su atencion y espero su respuesta

SALUDOS
Responder Con Cita
  #9  
Antiguo 02-12-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Deberías haber podido tu solo... pero en fin.
Código Delphi [-]
Function Palabra(const Cad : String; LarCad : Integer;Const izq :Boolean = True ) : String; 
var i:integer;
begin 
  Result := cad;

for i:=length(Result) to LarCard do
if izq then 
 Result :='  '+Result;
else
 Result :=Result +'  ';
 end; 

end;

Problema: si cad es de longitud mayor a LarCad, la cadena no se corta, sale entera... se debería comprobar y si es mayor, poner 3 puntos suspensivos y cortar la cadena resultante... por ejemplo

Si ya has leido la Guia de estilo, habrás visto que no se debe repetir el mismo hilo varias veces, porque así te mareas tu al verlos y nosotros al responder, si no has leido la guia, deberías leerla

Saludos
Responder Con Cita
  #10  
Antiguo 05-12-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
que tal lepe

antes que nada gracias por tu ayuda...

en cuanto a que repeti si desgraciadamente se me fue pero no era mi intencion, procurare no volver a hacerlo y si en efectivo ya lei la guia de estilos pero de todos modos gracias por la racomendacion.

me dices que debi de haber podido solo y pues antes que nada, soy un poco principiante solo tengo unosmeses programando y desgraciadamente a veces o muchas veces me falla, y si pude hacerlo de hecho solo que utilice otro metodo y fue el siguiente codigo....

Código:
 
While not Tabla1.Eof do
  begin
   Memo1.Lines.Add( Format('%-40s',[DM3.TTextoNombre.AsString]));
   Tabla1.Next
 end;
y asi me salia la cadena alineada a la derecha y de los caracteres que le indicara al formato.

SALUDOS¡¡¡
Y GRACIAS.
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


La franja horaria es GMT +2. Ahora son las 01:19:33.


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