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:
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