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 14-05-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
a ver

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;

//este es el boton que manda el texto

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Memo1.Lines.Clear;
while not Table2.Eof do
begin
Memo1.Lines.Add(Table2.FieldByName('ID_Cuenta').AsString+
Table2.FieldByName('EstadoMovto').AsString+
Palabra(Table2.FieldByName('ImporteMonedaCuenta').AsString,16)+
Table2.FieldByName('NumeroCheque').AsString);
Table2.Next;
end;
Memo1.Lines.SaveToFile('C:\TEXTO.TXT');

end;

tengo que aclarar que que esta tabla la lleno a partir de otra tabla es decir la lleno a partir de otra tabla no habra forma de que al moemto de copiar a la tabla de donde voy a sacar el texto se copie el campo con los espacios ? no se y es que de internet descargue un componente que me pasa la bd a un texto pero el preblema es que el campo de importe no me aparece con los campos en blanco y en las propiedades del componente no se ahora si sees mejor con el metodo que me estas pasando entonces lo cambio porque con este metodo que me estas pasando estoy haciendo una aplicacion de prueba .

muchas gracias y disculpa si te quito el tiempo
Responder Con Cita
  #9  
Antiguo 14-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Unhappy Pero compadre

Con razon se cicla ¡¡¡
ahora si que la regaste mira

Código:
Case Lado Of
  1: Cad:=''+Cad;
  2: Cad:=Cad+'';
End;
no es asi si no

Código:
Case Lado Of
  1: Cad:=' '+Cad;
  2: Cad:=Cad+' '; //<-- osease es un espacio ' ' no '' 
                        //osease '_' no '' donde  _es espacio vacio
End
Ojo mucho ojo y cuentaselo al que mas confianza tengas
__________________
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
  #10  
Antiguo 14-05-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
jajajaj

oye pues muchas gracias en verdad que si que la regue
ya se que vas a decir que me estoy pasando pero ya me hace el texto pero solo me copia un campo como le hago para que me copie todos los campos de la tabla?

disculpa las molestias (y que te este chin#$&&# tanto ), pero como podras ver soy un poco nuevo en esto de la programacion.
muchas gracias
Responder Con Cita
  #11  
Antiguo 14-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Unhappy Haber como..

como que nada mas te copia un campo ???
__________________
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
  #12  
Antiguo 14-05-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
que crees

que crees que ya vi lo que hace en verdad
cuando le doy clic para que mande el texto solo me manda un registro pero si la cierro y vuelvo a correrla y le doy clic al boton y ya me copia todos los campos
Responder Con Cita
  #13  
Antiguo 14-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Talking Ahhh.. entonces..

Entonces despues..

Código:
.
.
Memo1.lines.Clear;
//pones
Table2.First;
__________________
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
  #14  
Antiguo 19-05-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
Gracias

Que Tal Gracias Por Tu Respuesta¡

Ya No Pude Estar Conectado Pero Si Lo Pude Arreglar.

Oye Una Pregunta Hay Alguna Forma De Que El Campo De Importe Se Puda Copiar Con Decimales Que Sean .00
Por Ejemplo 1874.00 Porque Los Quetraen Numero 1874.14 Por Ejmeplo Si Los Pasa Pero Si Es Un Importe Entero No Pone Los .00 Como Decimales Y Si Le He Buscado Si La Funcion Se Puede Modificar Pero No Le He Encontrado Crees Que Me Puedas Aytudar?

Gracias Por Tu Gran Ayuda
Responder Con Cita
  #15  
Antiguo 19-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Talking En ..

Código:
Palabra(Table2.FieldByName('ImporteMonedaCuenta').AsString,16)
Escribe

Código:
Palabra(FormatFloat('#,##0.00',Table2.FieldByName('ImporteMonedaCuenta').AsFloat),16)
y ya con eso
__________________
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
  #16  
Antiguo 20-05-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
Gracias¡

hola que tal nuevamente
en verdad te quiero agrdecer la ayuda que me has brindado espero poder algun dia poder ayudarte y ayudarlea otros nunca habia entrado en un foro en donde te tendieran la mano tan rapido.

hasta pronto y gracias por todo.

att
jorge

saludos
Responder Con Cita
  #17  
Antiguo 20-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Hola jovehe. Me alegra que hayas encontrado apoyo en el club. Te recomiendo la lectura de la guia de estilo para una mejor convivencia en este lugar.

En especial que pongas atención a la sección que trata de los títulos de los mensajes, pues no es recomendable uno como el que has usado en esta ocasión. Principalmente porque puede entorpecer el proceso de búsqueda de otro forista con un problema similar al tuyo.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #18  
Antiguo 20-05-2004
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
tienes razon

que tal jachguate
tienes razon como que el titulo del hilo que abri no sirve para nada y solo confundo a los foristas me disculpo y prometo la proxima vez poner un titulo coherente.

hasta luego y saludos¡¡
Responder Con Cita
  #19  
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
  #20  
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
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:05:11.


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