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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-06-2003
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Thumbs up dichoso separador decimal

Hola a todos.

He rescatado este mensaje del historico de los foros unicamente con el proposito de "cerrarlo" y aclarar el tema del todo.

En el hilo original preguntaba lo siguiente:
Cita:
Posteado originalmente por Lepe
Holassss.........

El problema que tengo es que no me deja escribir el punto decimal en los controles DBAware de delphi.

al arrancar el programa, pregunto cual es el separador, y me dice que es la coma, así que hago esto:
Código:
   sysutils.CurrencyDecimals:=2; 

   sysutils.decimalseparator:='.'; 

   sysutils.thousandseparator:=',';
Al entrar en un control DB nativo de delphi, pregunto de nuevo cual es el separador decimal, y me responde que es el punto; entonces, ¿Por qué no me deja escribirlo?, unicamente me deja escribir la coma, y por tanto, al salir del control DB, me da el error de que el número con la coma no es un Tfloat válido.
Cita:
Posteado originalmente por andres1569
Hola Lepe:

He investigado un ratito y he llegado a las conclusiones siguientes:

La configuración del BDE no sirve de nada, de hecho ni siquiera afecta al Database Desktop, sino que sigue lo que hayamos definido en la Configuración Regional del Panel de Control, lo mismo que los controles DBAware.

Las propiedades DisplayFormat y EditFormat utilizan "siempre" la coma como indicador de separador de millares, y el punto como separador decimal, por lo que al rellenar estas propiedades le estamos indicando si queremos incluirlos y en el caso del separador decimal en qué posición (nº de decimales), pero "nunca" le estamos indicando qué caracter queremos usar para cada cosa.

La única forma de sobreecribir esas variables de entorno es mediante ThousandSeparator y DecimalSeparator. ¿Qué ocurre? Que al cambiarlas afectan a la visualización, de hecho tú sí ves el punto como separador decimal pero no te deja introducirlo, y la coma sí.

SOLUCION: Urgando en el código te enteras de que los controles DBAware, al comprobar si una tecla es válida llaman al método IsValidChar del campo relacionado TField, ese método comprueba si la tecla está permitida según el tipo de campo (difiere de un Integer a un Float ...) mirando una cadena de caracteres que es inicializada cuando se crea el campo en cuestión y que SÍ mira el DecimalSeparator; lo que ocurre es que cuando se crean estos objetos TField, tú aún no has cambiado esas variables de entorno; por lo tanto los campos que se creen antes de asignar tú por código esta variable se comportarán de forma diferente a los creados después, por ejemplo los que se crean dinámicamente en ejecución. Como solución he creado una unit que hace esto:


Código:
UnitAnticipa; 

interface 

uses SysUtils; 

implementation 

initialization 
  ThousandSeparator  := ','; 
  DecimalSeparator := '.'; 

end;
Ahora en el MainForm declaro esa unit justo detrás de SysUtils y entonces sí me coge esas variables como yo quiero incluso antes de que se creen los controles DBAware (había probado en el OnCreate del form, y poniendo OldCreateOrder a TRUE, pero no funcionaba).

Un saludo

La solución de crear una unit aparte puede ser excesiva, es posible que poniendo lo mismo en la sección Initialization del DataModule principal, o incluso en mismo archivo .dpr ya sirva.

Saludos
Exacto Andres, poniendolo en la inicialización del datamodule ya funciona.
Código:
initialization
  ThousandSeparator  := ',';
  DecimalSeparator := '.';

Esta última es la aclaración que queria hacer

Gracias andres
Responder Con Cita
 



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 15:45:52.


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