Fórum campo boolean no interbase #244320
24/07/2004
0
Mariocanel
Curtir tópico
+ 0Posts
24/07/2004
Vinicius2k
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
24/07/2004
Aroldo Zanela
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
24/07/2004
Mariocanel
Gostei + 0
25/07/2004
Bon Jovi
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
25/07/2004
Vinicius2k
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
26/07/2004
Bon Jovi
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
Clique aqui para fazer login e interagir na Comunidade :)