Bonjour
J'utilise un checkbox avec les composants Interbase de Borland, le checkbox ecrit les valeurs dans la table mais à la lecture il n'affiche rien
Une idée ?
Bonjour
J'utilise un checkbox avec les composants Interbase de Borland, le checkbox ecrit les valeurs dans la table mais à la lecture il n'affiche rien
Une idée ?
1) Vérifier si le champ lié au DBCheckBox est null. Si c'est le cas, le composant doit être informé de la façon de représenter une valeur null (grisé par défaut de mémoire).
2) Vérifier si la propriété AllowGrayed du DBCheckBox est à True. Dans ce cas, la valeur grisée est utilisée pour représenter la valeur null.
Cdlt
Verifié tout est ok
Champs n'est pas null
AllowGrayed du DBCheckBox est à True
Le champ lié au DBCheckbox est bien de type booléen ?
Y'a pas ce type avec Firebird
La réponse à ton problème est surement dans la méthode suivante :
Par déduction, ta case est grisée soit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 function TDBCheckBox.GetFieldState: TCheckBoxState; var Text: string; begin if FDatalink.Field <> nil then if FDataLink.Field.IsNull then Result := cbGrayed else if FDataLink.Field.DataType = ftBoolean then if FDataLink.Field.AsBoolean then Result := cbChecked else Result := cbUnchecked else begin Result := cbGrayed; Text := FDataLink.Field.Text; if ValueMatch(FValueCheck, Text) then Result := cbChecked else if ValueMatch(FValueUncheck, Text) then Result := cbUnchecked; end else Result := cbUnchecked; end;
1) Ton champ est null
2) Ton champ n'est pas du type booléen et les valeurs stockées dans ton champ ne correspondent pas aux valeurs des propriétés ValueChecked, ValueUnchecked du TDBCheckBox ...
Par exemple
Si ton champ est de type entier, indique 1 pour ValueChecked et 0 pour ValueUnchecked
Si ton champ est de type chaîne, indique "vrai" pour ValueChecked et "faux" pour ValueUnchecked.
Bien sûr ce ne sont que des conventions que je donne à titre d'exemple, à toi de choisir quelle est la valeur pour cocher ou pour décocher.
Merci, On peut contourner ça avec ses propres procédures & fonctions , le problème que depuis mon passage sous firebird, je ne fais que reprogrammer avec propres fonction, ce ma tracasse énormément vu le temps que ça prend.
Merci en tout cas.
Je ne suis pas sûr d'avoir bien compris cette phrase.
Je pense qu'il n'y a pas de contourner le fonctionnement standard du TDBCheckBox. Il suffit juste de renseigner les propriétés ValueChecked, ValueUnchecked et AllowGrayed pour définir le comportement du composant.
Si ton champ prend les valeurs de 1 à 5 et que tu veux cocher la case uniquement pour les valeurs 1 et 3, il suffit de renseigner la propriété ValueChecked avec "1;3" et ValueUnchecked avec "2;4;5"
Cdlt
ça ne marche pas, j'ai déjà essayer il faux toucher le checkbox car il a besoin d'un champs booléen pour tourner correctement.
Ah ? Quels sont les symptomes ? La case reste grisée ?ça ne marche pas, j'ai déjà essayer il faux toucher le checkbox car il a besoin d'un champs booléen pour tourner correctement.
Exactement,Merci pour ton aide.
je ne comprends pas . J'utilise les TDBCheckBox sans problèmes avec un Champ ayant les valeurs 'O' ou 'N' déclaré Char(1) en Interbase donc non boolean au sens strict du terme et cela fonctionne parfaitement
bien sûr si la valeur est null la case est grisée mais là c'est un problème de 'gestion' de Default Value . Dans mon , mes , cas et sauf rares exceptions le champ ne peut avoir que ces deux valeurs (apres tout il n'y a que deux etats possible , coché ou non , 'O' ou 'N',)
lors de la creation d'un champ de ce type je le declare donc
, et pour betonner je rajoute une contrainte de valeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part CHAMP_BOOLEAN CHAR(1) NOT NULL DEFAULT 'O'
ou le rattache a un DOMAIN
Code : Sélectionner tout - Visualiser dans une fenêtre à part CONSTRAINT UNBOOLEAN CHECK CHAMP_BOOLEAN IN ('O','N')
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
C'est résolu après avoir changé le type 'Char' en 'VarChar'.
Explication ???
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager