Espero com este artigo definir de uma vez por todas a melhor maneira de simular o tipo Boolean inexistente até a versão 1.5 do FireBird para ser usado com o Delphi e principal problema daqueles.quem migra do Paradox/DBX para o FireBird.

As sugestões encontradas nas maioria dos artigos sobre este assunto sugestionam para usarmos (0) para falso e (1) para verdadeiros em campos Smallint/Integer ou (T) para verdadeiro e (F) para Falso em Campos CHAR, levando em consideração apenas o objetivo de armazenar um valor (Verdadeiro/Falso) em um campo e consultar o valor armazenado, esquecendo do principal, que é a praticidade e compatibilidade com objetos que se destinam a armazenar valores lógico como o TCheckBox e o TRadioButton, que possui a propriedade Checked. Este artigo é eficiente se você não usa os Componentes da Paleta  DataControl para entrada de dados.

Não quero parecer pretensioso  mas, a experiência é a mãe de todas as verdades.

Você deve usar o valor (0) para False/Falso e (-1) para True ou Verdadeiro em campo do tipo Smallint por um simples motivo, não é necessário nenhuma conversão para gravar ou carregar um valor lógico (Falso/Verdadeiro) se for armazenado como (0/-1) nos componentes acima mencionados: (TCheckBox / TRadioButton) (TDBCheckBox (Observação: Configure as propriedades ValueChecked e ValueUnChecked para 0 e -1))

Exemplo:

imagem.JPG

 

Em um Formulário de entrada de dados com o campo Bolsa Família do Tipo TCheckBox não é necessário efetua conversãos do tipo:

IF CheckBox1.Checked

     then Parambyname(_BOLSAFAM).AsInteger:=1

     Else Parambyname(_BOLSAFAM).AsInteger:=0;

ou

IF CheckBox1.Checked

     then Parambyname(_BOLSAFAM).AsString:=’T’

     Else Parambyname(_BOLSAFAM).AsString:=’F’;

 

Para Gravar a informação ou pior ainda, tem que usar esta conversão para cada campo que existir no seu formulário, deixando o seu código gigante sem falar que na hora da leitura dos dados para disponibilizar os dados para alteração tem que fazer a conversão toda novamente, um grande transtorno que nos leva a perder tempo precioso.

Mesmo o FB/IB não tendo o Campo Boolean ela exite no Delphi e ele converte automaticamente em (0/-1) com perfeição , parece inacreditavelmente simples  mas funciona sim. Exemplo:

 

Para Gravar:

       Parambyname(_BOF).AsBoolean:=CB_Fam.Checked;

 

Caso Cheched=True será gravado o Valor -1 / Falso será gravado o Valor 0.

 

Para Carregar :

       CB_Fam.Checked:=Fieldvalues[BolFam];

Receberá o Valor True caso o valor em BolFam seja = -1 ou Falso para 0.

 

Eu uso campos do tipo Smallint para armazenar meu valores lógicos que ocupam pouco espaço.

 

Espero que no seu próximo sistema use esta dica pois, reduzirá o seu trabalho em muito e se gostar passe para seus companheiros (nossos parceiros de profissão).

 

Antonio Ennio de Jesus

11/08/64

Graduando em Sistemas de Informação (FTC/Jequié-BA) e comecei a programa em 1980 com o TK82c. na era do Bit Lascado.

Ipiaú-Bahia

eia_99@ig.com.br

www.eiainfo.hpg.com.br