OVH Cloud OVH Cloud

Vrai ou Faux ???

27 réponses
Avatar
MrChris
Salut !

Je ne comprend plus...
J'ai une checkbox dans une template columns d'un datagrid.

Pour récupérer sa valeur je fait :
LeBool = CType(Datagrid1.Items(x).Cells(1).Controls(1), CheckBox).Checked
Puis j'aimerais bien que LeBool me renvoi 0 ou 1 à la place de True ou
False.

Donc je fait cint(LeBool) et la c'est le drame, quand c'est true il me
sort -1 !!!

Idem si je fait ctype(LeBool,Integer), de même si j'essaye avec double,
short, int16...

Pourquoi chez moi true = -1 !!!!!!!!!!!

Merci
MrChris

7 réponses

1 2 3
Avatar
Pierre Alexis [MVP]
Salut,

Tu as écrit :

blblblblbl... Vrai



LOL

--
Pierre ALEXIS - MVP Visual Basic Classique
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/
Avatar
Ambassadeur Kosh
> Je suis d'accord. En fait, en poussant encore un peu la reflexion, j'irais
jusqu'à dire que je ne vois pas l'intérêt de convertir un booléen en int
quelque soit la méthode. Ca revient à détyper une variable booléenne.



chui assez d'accord.
à part la persistence ou l'affichage dans un TextBox, je vois pas trop
l'interet du truc, ou alors pour ne pas reécrire un autre truc qui a été mal
fait (cad qui attend 0/1)
et encore pour la persistence, on a même pas/plus à le faire si on utilise
une classe un tant sois peu respectable et prevue à cet effet : XmlConvert,
SqlDataAdapter, BinaryFormatter...

donc voila, quelques informations sur la nature et le pourquoi du truc
permettraient même de donner le bon nom à ceci.

static public int f(bool value) { return value?1:0 ; }
Avatar
MrChris
Salut !

Je suis d'accord. En fait, en poussant encore un peu la reflexion, j'irais
jusqu'à dire que je ne vois pas l'intérêt de convertir un booléen en int
quelque soit la méthode. Ca revient à détyper une variable booléenne.



???
Comment je fait alors ???
Checkbox.checked est boolean.
Dans ma base je dois mettre 1 si il est checked et 0 sinon.
Mais je ne dois pas mettre True ou False.
Alors comment faire sans convertir le boolean ???

Je ne demande qu'a comprendre...

Merci
MrChris
Avatar
Zazar
"MrChris" wrote in message
news:#
Salut !

> Je suis d'accord. En fait, en poussant encore un peu la reflexion,


j'irais
> jusqu'à dire que je ne vois pas l'intérêt de convertir un booléen en int
> quelque soit la méthode. Ca revient à détyper une variable booléenne.

???
Comment je fait alors ???
Checkbox.checked est boolean.
Dans ma base je dois mettre 1 si il est checked et 0 sinon.
Mais je ne dois pas mettre True ou False.
Alors comment faire sans convertir le boolean ???



Si votre champ de la base est défini comme étant de type SQL_BIT, vous
créez votre requête d'insertion/de modification en lui passant des
paramètres typés. Vous laissez .NET et le driver faire les conversions
nécessaire.
Si par exemple vous utilisez OLE DB, vous pouvez faire quelque chose du
genre :

OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = myConnection;
myCommand.CommandText = "INSERT INTO mytable VALUES (?)";
OleDbPArameter myParam = new OleDbParameter("macolonne", OleDBType.Boolean);
myPAram.Value= myBool;
myCommand .Parameters.Add(myParam );

Si votre colonne est définie comme étant de type entier qui doit valoir 1
pour dire true et 0 pour dire false, alors vous allez eng.... celui qui a
décidé ça et ensuite vous faîtes quelque chose du même genre, mais vous ne
convertissez pas votre booleén (du moins pas avec les fonctions natives de
.NET ou de votre langage) vous le testez pour décider si vous affectez la
valeur 0 ou 1.

--
Zazar
Avatar
Ambassadeur Kosh
> ???
Comment je fait alors ???
Checkbox.checked est boolean.
Dans ma base je dois mettre 1 si il est checked et 0 sinon.
Mais je ne dois pas mettre True ou False.
Alors comment faire sans convertir le boolean ???

Je ne demande qu'a comprendre...



ben je dirais que tu prends ta base, tu dégages le int, tu mets un bool à la
place, et tu propages les modifs jusqu'à ce que ça soit bon.
jusqu'à ce qu'il n'y ait plus un seul "cast".

mais je me permet de te reposer ma question : à qui/quoi elle sert cette
valeur 0/1 ?
Avatar
Patrice
Non, non !

Je pense que le plus simple est de définir ce champ comme un booléen dans la
base ce qui permettra d"y stocker cette valeur booléenne. Tu n'as même pas
besoin de savoir non plus comment c'est codé dans la base.

La situation est un peu analogue à une date, tu manipules et tu stockes une
date dans la base sans avoir à te soucier de quel est le "nombre" final
stocké qui représente ta date...

Patrice

--

"MrChris" a écrit dans le message de
news:%
Salut !

> Je suis d'accord. En fait, en poussant encore un peu la reflexion,


j'irais
> jusqu'à dire que je ne vois pas l'intérêt de convertir un booléen en int
> quelque soit la méthode. Ca revient à détyper une variable booléenne.

???
Comment je fait alors ???
Checkbox.checked est boolean.
Dans ma base je dois mettre 1 si il est checked et 0 sinon.
Mais je ne dois pas mettre True ou False.
Alors comment faire sans convertir le boolean ???

Je ne demande qu'a comprendre...

Merci
MrChris




Avatar
Ambassadeur Kosh
désolé, j'avais compris base comme this, et pas sgbd.
ceci dit, qu'un type soit inaproprié dans une base de données ou dans un
programme c'est bien pareil.

à supposer que le type soit bien défini, si tu passes par un dataset typé ou
par un parameter de SqlCommand, jamais tu n'as à faire de traduction.

MyDataRow row = ... ;
bool valeur = checkbox.Checked ;
row.nomduchamp = valeur ;
sqlDataAdapter.Update(dataset) ;

ou alors :

SqlCommand command = new SqlCommand("UPDATE ... champ = @param1") ;
bool valeur = checkbox.Checked ;
command.Parameters.Add("@param1",valeur) ;
...

l'exemple de patrice est trés bien. c'est pas à toi de transformer un
DateTime en "#yyyymmdd#" que tu scotches dans ta chaine sql. et encore moins
le format binaire dans lequel l'objet sera stocké. si tu prends cette
traduction à ta charge, elle sera à moitié fausse 99% du temps.

le typage et la bonne fénéantise conduisent mécaniquement à la meilleure
solution. la mauvaise feneantise etant celle de ne pas vouloir faire
l'effort de typer.
1 2 3