Fórum campo boolean no interbase #244320

24/07/2004

0

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

Responder

Posts

24/07/2004

Vinicius2k

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+


Responder

Gostei + 0

24/07/2004

Aroldo Zanela

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.


Responder

Gostei + 0

24/07/2004

Mariocanel

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


Responder

Gostei + 0

25/07/2004

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, 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.


Responder

Gostei + 0

25/07/2004

Vinicius2k

[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+


Responder

Gostei + 0

26/07/2004

Bon Jovi

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.


Responder

Gostei + 0

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

Aceitar