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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2011
DavidSG4 DavidSG4 is offline
Miembro
 
Registrado: oct 2007
Posts: 92
Poder: 17
DavidSG4 Va por buen camino
Arrow Redondeo

Muy buenas y gracias por anticipado.utilizo delphi5 y paradox 7

tengo un problema con un campo de tipo numerico y es que me redondea a 2 digitos y quiero hacer que me redonde a 3 o simplemente que no haga redondeo. ejemplo:
En una tabla metales tengo el campo Niquel(Ni) al que le quiero meter el valor 22,563 y automaticamente me pone en el dbedit 22,56 e probado con mascaras y no se si es que no pongo la mascara correcta pero no me funciona

0.000
#0#.000 y mas y no lo consigo.

Saludos y gracias.
Responder Con Cita
  #2  
Antiguo 07-10-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
y en la tabla cuantos decimales tiene permitidos?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 07-10-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 DavidSG4.

Crear campos calculados:
  • Doble click sobre el TTable o TQuery.
  • Click botón derecho sobre el editor de campos.
  • Elegí la opción Add all fields.
Una vez traídos los campos al editor posicionate sobre tu campo numérico 'Niquel' y en el Object Inspector, propiedad DisplayFormat escribí 0.000 si deseas 3 dígitos decimales. Si dejas el valor vacío, mostrará el número con todas sus cifras decimales.

Si realizas estos pasos y se trata de un campo numérico, tiene que mostrar el valor en el formato que le indiques. Tanto se trate de un tipo Number o de un tipo Money si su propiedad Currency esta en False.

Saludos.

Edito error
: Donde dije: 'campos calculados' es 'campos persistentes'
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 10-10-2011 a las 22:45:25. Razón: Aclarar error: 'campos calculados' por 'campos persistentes'
Responder Con Cita
  #4  
Antiguo 10-10-2011
DavidSG4 DavidSG4 is offline
Miembro
 
Registrado: oct 2007
Posts: 92
Poder: 17
DavidSG4 Va por buen camino
respuesta

Hola y gracias por tu respuesta. He realizado los cambios que me comentas pero al poner el campo calculado no me deja escribir en el dbedit. la otra respuesta que dice que cuantos campos decimales tengo permitidos en la tabla, no se como puedo cambiarlos he mirado y no encuentro esta opcion en paradox 7

Gracias de nuevo. Saludos

Cita:
Empezado por ecfisa Ver Mensaje
Hola DavidSG4.

Crear campos calculados:
  • Doble click sobre el TTable o TQuery.
  • Click botón derecho sobre el editor de campos.
  • Elegí la opción Add all fields.
Una vez traídos los campos al editor posicionate sobre tu campo numérico 'Niquel' y en el Object Inspector, propiedad DisplayFormat escribí 0.000 si deseas 3 dígitos decimales. Si dejas el valor vacío, mostrará el número con todas sus cifras decimales.

Si realizas estos pasos y se trata de un campo numérico, tiene que mostrar el valor en el formato que le indiques. Tanto se trate de un tipo Number o de un tipo Money si su propiedad Currency esta en False.

Saludos.
Responder Con Cita
  #5  
Antiguo 10-10-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 DavidSG4.

Mil disculpas, cometí un 'acto fallido'. Cuando escribí campos calculados, quise decir campos persistentes.
Por favor borra todos los campos calculados que creaste y seguí los pasos que te indiqué (esos son correctos )

Un saludo y nuevamente disculpas.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 10-10-2011 a las 22:55:42.
Responder Con Cita
  #6  
Antiguo 11-10-2011
DavidSG4 DavidSG4 is offline
Miembro
 
Registrado: oct 2007
Posts: 92
Poder: 17
DavidSG4 Va por buen camino
voy a probar

Muchas gracias y de disculpas nada por favor estaria bueno, pruebo y te comento. saludos
Responder Con Cita
  #7  
Antiguo 11-10-2011
DavidSG4 DavidSG4 is offline
Miembro
 
Registrado: oct 2007
Posts: 92
Poder: 17
DavidSG4 Va por buen camino
sin solucion

Nada no encuentro la solucion, pongo en el displayformat 0.000 y currency=false y nada tambien he intentado redondear con una funcion en el oncalcfields y nada me lanza un error de memoria joder es una locura no entiendo... la solucion tiene que ser facil.

lo que ocurre que yo creo que hay alguna funcion por ahi escondida que me esta redondeando, pero el caso que si entro en la bbdd a editar el registro(database desktop) si que me muestra todos los digitos que yo le meti sin redondear aunque si no la edito solo me muestra 2

Gracias acepto todas las ideas posibles.
Responder Con Cita
  #8  
Antiguo 11-10-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 DavidSG4.

Si estás viendo todos los dígitos decimales con el Database Desktop, coincido con vos que algún código está modificando la presentación.
Lo que podrías hacer es poner un break (click sobre el márgen izquierdo no editable del editor) en una línea del código que estés seguro que la función aún no pudo ser invocada (al abrir la tabla por ejemplo) y utilizar Trace Into (F7) para ir línea por línea y así descubrir donde se produce el 'redondeo' no deseado.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 11-10-2011
DavidSG4 DavidSG4 is offline
Miembro
 
Registrado: oct 2007
Posts: 92
Poder: 17
DavidSG4 Va por buen camino
conseguido

no creo que sea la manera mas elegante de conseguirlo pero lo que he hecho a sido forzar la mascara en el formcreate y si que se lo traga, asi que lo que me esta tocando las narices esta antes del form create.

lo que voy hacer para hacerlo un poco mas elegante es un metodo que cualquier tabla que le pases, te coja los campos tipo float y te los de el formato con 3 decimales.

Gracias por tu ayuda.
Responder Con Cita
  #10  
Antiguo 13-10-2011
DavidSG4 DavidSG4 is offline
Miembro
 
Registrado: oct 2007
Posts: 92
Poder: 17
DavidSG4 Va por buen camino
metodo

Hola ecfisa.

como ya te comente estoy intentando hacer el metodo para que al pasarle una tabla me asigne la mascara que te comente. pero no soy capaz ya que cuando pongo table.fields[i].displayformat me dice que no es una propiedad del campo, en el desplegable de los atributos me sale editmask pero no el display format,

for i:=o to tabla.fields.count-1 do
begin
if table.fields[i] is floatfield then // por esta condicion pasa siempre y hay campos que son string
begin
table.fields[i].displayformat:= mascara // este displayformat no me reconoce.
end
end

a ver si me puedes ayudar gracias y un saludo
Responder Con Cita
  #11  
Antiguo 13-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner etiquetas al código, ejemplo:





Hay mucha diferencia de esto:
for i:=o to tabla.fields.count-1 do
begin
if table.fields[i] is floatfield then // por esta condicion pasa siempre y hay campos que son string
begin
table.fields[i].displayformat:= mascara // este displayformat no me reconoce.
end
end

a esto:

Código Delphi [-]
for i:=o to tabla.fields.count-1 do
begin
   if table.fields[i] is floatfield then // por esta condicion pasa siempre y hay campos que son string
   begin
        table.fields[i].displayformat:= mascara // este displayformat no me reconoce.
   end
end

¿no te parece?
Responder Con Cita
  #12  
Antiguo 13-10-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 DavidSG4.

No uso Paradox por lo que no sé si es la mejor forma, pero de este modo funciona correctamente:
Código Delphi [-]
procedure SetDisplayFormat(DataSet: TDataSet; const Mask: string);
var
  i: Integer;
begin
  for i:= 0 to DataSet.FieldCount-1 do
    if DataSet.Fields.Fields[i].DataType = ftFloat then
      TFloatField(DataSet.Fields[i]).DisplayFormat:= Mask;
end;

Ejemplo de llamada:
Código Delphi [-]
   SetDisplayFormat(Query1, '0.00,00');

Las etiquetas... las etiquetas...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 13-10-2011
DavidSG4 DavidSG4 is offline
Miembro
 
Registrado: oct 2007
Posts: 92
Poder: 17
DavidSG4 Va por buen camino
perfecto

funciona perfectamente. lo que no entiendo es porque en el dataset haces referencia 2 veces al campo fields [i]DataSet.Fields.Fields.DataType el dataset es una tabla que tiene campos porque tienes que acceder a ese segundo nivel?

mil gracias y disculpa mi ignorancia.

Cita:
Empezado por ecfisa Ver Mensaje
Hola DavidSG4.

No uso Paradox por lo que no sé si es la mejor forma, pero de este modo funciona correctamente:
Código Delphi [-]
procedure SetDisplayFormat(DataSet: TDataSet; const Mask: string);
var
  i: Integer;
begin
  for i:= 0 to DataSet.FieldCount-1 do
    if DataSet.Fields.Fields[i].DataType = ftFloat then
      TFloatField(DataSet.Fields[i]).DisplayFormat:= Mask;
end;

Ejemplo de llamada:
Código Delphi [-]
   SetDisplayFormat(Query1, '0.00,00');

Las etiquetas... las etiquetas...

Un saludo.
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
Redondeo cesar vidal Varios 30 22-04-2014 23:01:29
Funcion de Redondeo ZiriusB OOP 6 16-12-2010 22:52:16
redondeo pedrito1111 Varios 1 13-11-2009 02:40:23
Redondeo de decimales Cheswar Varios 3 07-10-2007 22:31:10
Redondeo de precios miquellg Varios 6 27-12-2006 18:59:55


La franja horaria es GMT +2. Ahora son las 22:54:01.


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