Fórum formatação de campos no firebird 2.5 #492091

14/09/2014

0

Ola Pessoal ! Estou com um problema ! Dependendo do tipo de formatacao escolhido no windows (painel de controle -> região e idioma-> formato) o firebird muda a formação do campo float. Se for o formato no windows for português , o numero so aceita entrada x,xxxx ou se for formato ingles x.xxxx. a aceitação do ponto e virgula muda de acordo com formato escolhido. Existe uma forma de 'desligar' essa dependência do windows ?


grato.
Norbelino

Norbelino

Responder

Posts

14/09/2014

Anderson

Olá, já tive problemas desta natureza com a minha aplicação desenvolvida em Delphi e não com o Firebird, onde a aplicação mudava "por conta própria" algumas definições (pegando do sistema operacional), o que atrapalhava nas instruções SQL. Como minha aplicação é somente para o português (Brasil), fiz o seguinte:

- Na minha biblioteca de rotinas, criei uma procedure chamada Constantes_Delphi, que é chamada na seção Initialization (é executada no momento em que sua aplicação é iniciada).
- Na procedure Constantes_Delphi também coloquei códigos para que o Delphi não altera-se o que foi feito (não consulta-se novamente o sistema operacional).
- Algumas definições (ex.: ShortDateFormat=LongDateFormat) são critérios de escolha pessoal do desenvolvedor considerando o perfil da aplicação e dos usuários.

{ Define as constantes internas do Delphi - Chamar na Initialization }
procedure Constantes_Delphi;

begin
{ Desabilita as atualizações de formato, que ocorrem quando o usuário altera
as propriedades do Windows e/ou são feitas por outro software/componente de terceiro }
Application.UpdateFormatSettings:=False;

{ Impede a mudança de formato de unidades metricas devido a alterações no windows
ou por outro software/componente de terceiro }
Application.UpdateMetricSettings:=False;

{ Valores defaults para o Delphi - Referência SysUtils.GetFormatSettings }
FormatSettings.ThousandSeparator:='.';
FormatSettings.DecimalSeparator:=',';
FormatSettings.CurrencyDecimals:=4;
FormatSettings.DateSeparator:='/';
FormatSettings.ShortDateFormat:='DD/MM/YYYY'; // Obrigar a mostrar 4 dígitos no ano - 'DD/MM/YY';
FormatSettings.LongDateFormat:='DD/MM/YYYY';
FormatSettings.TimeSeparator:=':';
FormatSettings.ShortTimeFormat:='HH:MM';
FormatSettings.LongTimeFormat:='HH:MM:SS';
FormatSettings.ShortMonthNames[01]:='Jan';
FormatSettings.ShortMonthNames[02]:='Fev';
FormatSettings.ShortMonthNames[03]:='Mar';
FormatSettings.ShortMonthNames[04]:='Abr';
FormatSettings.ShortMonthNames[05]:='Mai';
FormatSettings.ShortMonthNames[06]:='Jun';
FormatSettings.ShortMonthNames[07]:='Jul';
FormatSettings.ShortMonthNames[08]:='Ago';
FormatSettings.ShortMonthNames[09]:='Set';
FormatSettings.ShortMonthNames[10]:='Out';
FormatSettings.ShortMonthNames[11]:='Nov';
FormatSettings.ShortMonthNames[12]:='Dez';
FormatSettings.LongMonthNames[01]:='Janeiro';
FormatSettings.LongMonthNames[02]:='Fevereiro';
FormatSettings.LongMonthNames[03]:='Março';
FormatSettings.LongMonthNames[04]:='Abril';
FormatSettings.LongMonthNames[05]:='Maio';
FormatSettings.LongMonthNames[06]:='Junho';
FormatSettings.LongMonthNames[07]:='Julho';
FormatSettings.LongMonthNames[08]:='Agosto';
FormatSettings.LongMonthNames[09]:='Setembro';
FormatSettings.LongMonthNames[10]:='Outubro';
FormatSettings.LongMonthNames[11]:='Novembro';
FormatSettings.LongMonthNames[12]:='Dezembro';
FormatSettings.ShortDayNames[1]:='Dom';
FormatSettings.ShortDayNames[2]:='Seg';
FormatSettings.ShortDayNames[3]:='Ter';
FormatSettings.ShortDayNames[4]:='Qua';
FormatSettings.ShortDayNames[5]:='Qui';
FormatSettings.ShortDayNames[6]:='Sex';
FormatSettings.ShortDayNames[7]:='Sáb';
FormatSettings.LongDayNames[1]:='Domingo';
FormatSettings.LongDayNames[2]:='Segunda';
FormatSettings.LongDayNames[3]:='Terça';
FormatSettings.LongDayNames[4]:='Quarta';
FormatSettings.LongDayNames[5]:='Quinta';
FormatSettings.LongDayNames[6]:='Sexta';
FormatSettings.LongDayNames[7]:='Sábado';
end;

Após a inclusão desta rotina, acabaram-se meus problemas com as instruções SQL. Com certeza há maneiras mais elegantes de resolver este tipo de problema, mas na época resolvi assim (já estava com a água pelo nariz e de saco cheio com o esta funcionando e de repente deixa de funcionar).

Att.

Anderson.
Responder

Gostei + 0

14/09/2014

Norbelino

Ola Anderson ! Rapaz, fiz do jeito que você disse. Coloquei a função depois do Application.Initialize, porem o problema persiste. Uso o windows 7. Caso em painel de controle - > região e idioma use o português-brasil tudo ocorre normalmente. ponto para separar milha e vincula para casa decimal, mas quando mudo para inglês (EUA), o firebird muda e passa a considerar virgula como separador de milhar e minha rotina que pega dados do XML e preenche a tabela, fica bagunçada, pois a rotina faz certo, mas dentro do banco, o formado muda. De qualquer forma vou usar sua rotina, pois pelo que entendi ela forca, dentro da aplicação, para usar os formato brasileiro.

grato.
Responder

Gostei + 0

14/09/2014

Norbelino

Ps: Deve existe algo que possa ser feito dentro do firebird.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar