campo boolean no interbase

Delphi

24/07/2004

gentecomo crio o campo boolean no interbase, exemplo, preciso criar um campo que toda vez que o form for exibido ele faça uma atualização no campo data e marque com o nome vencido os que forem inferior a data atual


Mariocanel

Mariocanel

Curtidas 0

Respostas

Vinicius2k

Vinicius2k

24/07/2004

Colega,
Qual IB? não sei das versões comerciais mais o 6.0, não dá suporte à colunas booleanas... normalmente cria-se uma coluna char(1) e grava-se ´1´ para true e ´0´ para false, mas o tratamento precisa ser via aplicação...

T+


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

24/07/2004

Colega,

Interbase não possui tipo de dados Boolean. Você pode utilizar outros tipos de dados para representar um boolean.
Adicione mais detalhe de sua dúvida, pois não consegui compreendê-la.


GOSTEI 0
Mariocanel

Mariocanel

24/07/2004

Ok meu interbase é o 6.5 eu tenho uma tabela onde preciso listar todos os clientes que se encontram em débito na data em que o grid quecontem os débito é jogado na tela


GOSTEI 0
Bon Jovi

Bon Jovi

24/07/2004

Concordo em usar Char(1), já sobre criar DOMAIN pra dizer que é ´boolean´, neste caso só é uma forma de mascarar o tipo, pois logicamente não vai significar que o Delphi ache que ele é TBooleanField. Não sendo errado essa forma, pelo contrário, mas isso as vezes confunde quem for olhar o script da base.

Nem todos os bancos tem o tipo boolean, o grande Oracle nao tem, então não acho bom usar esse tipo em bancos que dão suporte ao mesmo, pois se mais tarde precisar migrar de banco aí ferrou...

A forma mais fácil é usar um tipo de campo que seja equivalente ao TStringField no Delphi (Char como falou Vinicius ou Varchar dependendo do banco), e entao guardar os valores como ´T´/´F´, ou ´Y´/´N´. Pois qdo vc fizer DataSet.FieldByName(´CAMPO_TESTE´).AsBoolean acontece o seguinte no Delphi (DB.pas):

function TStringField.GetAsBoolean: Boolean;
var
  S: string;
begin
  S := GetAsString;
  Result := (Length(S) > 0) and (S[1] in [´T´, ´t´, ´Y´, ´y´]);
end;

Se for ´T´, ´t´, ´Y´ ou ´y´ retornará True.

E caso esteja usando TDBCheckBox basta alterar as propriedades ValueChecked e ValueUnchecked:

ValueChecked := ´T´;
ValueUnchecked := ´F´;

CREATE TABLE TABELA_TESTE
(
  CAMPO_TESTE CHAR(1) NOT NULL,
  CHECK (CAMPO_TESTE IN (´T´, ´F´))
)

Se quiser usar o CHECK é uma boa, mas eu prefiro tratar isso via aplicação.


GOSTEI 0
Vinicius2k

Vinicius2k

24/07/2004

[quote:06bb250f4d=´Bon Jovi´]Concordo em usar Char(1), já sobre criar DOMAIN pra dizer que é ´boolean´, neste caso só é uma forma de mascarar o tipo, pois logicamente não vai significar que o Delphi ache que ele é TBooleanField. Não sendo errado essa forma, pelo contrário, [color=red:06bb250f4d]mas isso as vezes confunde quem for olhar o script da base[/color:06bb250f4d].[/quote:06bb250f4d]

Bem... nunca parei para analizar como seria esta situação aos olhos de outro desenvolvedor, mas creio que vale a pena pensar no assunto pois posso estar dificultando possível re-trabalho realizado por outra pessoa...
Na verdade, uso 0 e 1 desde que comecei a trabalhar... minha idéia sempre foi de que booleans são na verdade 0 e 1 (ShortBool) e isso, ao menos para mim sempre foi fácil de identificar...
Como compensação desta e de outras situações onde gravo apenas ´Flags´ na base, eu sempre documentei a base e forneci esta documentação aos clientes e isso deve amenizar o impacto...

T+


GOSTEI 0
Bon Jovi

Bon Jovi

24/07/2004

booleans são na verdade 0 e 1

Isso é verdade, a exemplo do SQLServer. É até mais bonito 0 e 1. ´T´ ou ´F´ vale mais pela facilidade que a VCL implementa, sobre o q mostrei do TStringField.GetAsBoolean.


GOSTEI 0
POSTAR