Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Nº factura (https://www.clubdelphi.com/foros/showthread.php?t=11428)

silviodp 14-06-2004 14:28:20

Nº factura
 
En mi aplicación tengo un DBEdit asociado a un campo Alpha de mi tabla, en que guardo un número de factura de la forma 0000-00000000, lo que quiero es que si ingreso por ejemplo: 23-1234, en el DBEdit, al salir de éste me complete automáticamente con cero es decir: 0023-00001234, y lo puedo logar. uso tablas Paradox7 y Delphi 5.
Gracias.

Silvio.-

Sirkius 14-06-2004 16:22:41

Tienes una propiedad EditMask del TField, que cambiandola además de que se edite de forma especial, también cambia la forma de represantar el campo.

0000-00000000;1;_

tcp_ip_es 14-06-2004 16:27:16

No puedes poner una máscara y obligar al usuario a introducirlo bien??? o tb puedes programartelo tu .. quedaría algo asi... en el evento BeforePost de tu campo (Tfield) :


Código Delphi [-]
var cuatroprimeros,ochosegundos:string;
     i:integer;

i:=0;

while not (encontrado) do
begin
if cadena[i] = '-' then
 encontrado:=true
else
 Cuatroprimeros:= CuatroPrimeros + cadena[i];
i:=i+1;
end;

case length(Cuatroprimeros) of

0: Cuatroprimeros:= '0000' +  Cuatroprimeros;
1: Cuatroprimeros:= '000' +  Cuatroprimeros;
2: Cuatroprimeros:= '00' +  Cuatroprimeros;
3: Cuatroprimeros:= '0' +  Cuatroprimeros;
end;

while i<>length(cadena) do
begin
Ochosegundos:=OchoSegundos +cadena[i];
i:=i+1;
end;

case length(OchoSegundos) of

0: OchoSegundos:= '00000000' +  OchoSegundos;
1: OchoSegundos:= '0000000' +  OchoSegundos;
2: OchoSegundos:= '000000' +  OchoSegundos;
3: OchoSegundos:= '00000' +  OchoSegundos;
4: OchoSegundos:= '0000' +  OchoSegundos;
5: OchoSegundos:= '000' +  OchoSegundos;
6: OchoSegundos:= '00' +  OchoSegundos;
7: OchoSegundos:= '0' +  OchoSegundos;
end;

Tabla.fieldbyname('TuCampoCadena').asstring := CuatroPrimeros + '-' + OchoSegundos;



Saludos, Tony

__cadetill 14-06-2004 17:14:16

Tony, a ver que te parece esto en lugar de esos case ;)

Código Delphi [-]
Cuatroprimeros := FormatFloat('0000', StrToInt(Cuatroprimeros));
OchoSegundos:= FormatFloat('00000000', StrToInt(OchoSegundos));

EDIT: ah, y para separar los trocitos, nada mejor que las funciones Pos y Copy
Código Delphi [-]
if Pos('-', cadena) <> 0 then
begin
  Cuatroprimeros := Copy(cadena, 0, Pos('-', cadena));
  OchoSegundos := Copy(cadena, Pos('-', cadena), length(cadena));
end;
Lo he puesto de cabeza, seguramente se tendrán que retocar las posiciones de inicio o fin

tcp_ip_es 14-06-2004 17:53:59

Yo es que soy un poco rudimentario :D la verdad es que no conocía la función pos ni la de formatfloat.... muy útiles si señor... aun asi mi código funcionaría no ??? ja ja ja :D

__cadetill 14-06-2004 18:12:26

Cita:

Empezado por tcp_ip_es
...aun asi mi código funcionaría no ??? ja ja ja :D

Claro claro, yo no he dicho que lo tuyo esté mal, sólo hacía mención a otra forma de solucionar los problemas ;)

Se nota que yo soy más bago que tu escribiendo :D

tcp_ip_es 14-06-2004 18:14:29

más bien yo no díria que eres más bago sino que tu código es más eficiente ;)

silviodp 17-06-2004 22:52:33

Nº Factura
 
TCP IP ES: a 'Cadena' como la defino?, eso no lo entiendo...
Gracias.

Silvio.-

tcp_ip_es 21-06-2004 11:14:21

la cadena es un string, la puedes definir donde quieras:

Código Delphi [-]
var cadena:string;

Saludos, Tony

Lepe 21-06-2004 20:01:30

Cita:

Empezado por cadetill
Tony, a ver que te parece esto en lugar de esos case ;)

Código Delphi [-]
Cuatroprimeros := FormatFloat('0000', StrToInt(Cuatroprimeros));
OchoSegundos:= FormatFloat('00000000', StrToInt(OchoSegundos));

Curioso lo del FormatFloat, no se me hubiera ocurrido nunca :D

Si teneis las rxlibs, viene una unidad llamada nkstrs.pas, con funciones como PadLeft y padRight, que añade cualquier caracter por la derecha o por la izquierda.

Y ya que usas paradox, echale una visual a la unidad bdeutils que trae las rxlibs, para hacer un pack de las tablas y muchas otras cositas interesantes ;)

Saludos


La franja horaria es GMT +2. Ahora son las 16:32:46.

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