DBNull - VB/VBA/VBS - Programmation
Marsh Posté le 24-02-2004 à 19:58:49
Citation : toto = IIf(lrow(1) Is DbNull.Value,"null",lrow(1)) |
oublie cette notation c'est moche. sinon je sais pas pkoi. peut-être parce que tu écris "if" avec 2 i...
Marsh Posté le 24-02-2004 à 20:35:56
Code :
|
c'est moche ? je vois pas pk c moche
Code :
|
T'est sur ke t'as deja touché du VB.NET ???
Marsh Posté le 24-02-2004 à 22:55:11
pour le iif, sorry je connaissais pas. j'ai fait 4 mois de C#.NET, mais pas de VB.NET (berk)
sinon la notation que tu propose me fais penser à la notation de l'opérateur ternaire "? :" en c++
voilà quoi
Marsh Posté le 24-02-2004 à 23:03:52
ha ouaip ok...
Bah ouaip VB.NET, pas eu le choix... toute l'équipe est deja en VB.NET donc on est obligé de suivre...
Merci kan meme
Marsh Posté le 25-02-2004 à 01:10:39
le Iif c'est tout simple, je vois simplement par ce topic que son comportement n'a pas changé par rapport à VB6: les deux valeurs possibles de retour sont évaluées, et dans l'un des cas, celui qu'on veut éviter, bin ça provoque l'erreur, donc tu dois faire un if/then/else classique
tu peux essayer un truc genre:
Code :
|
et vérifier par breakpoints que tu vas passer dans MaFonctionA (normal) et aussi MaFonctionB (et ça c'est dommage)
J'ai oublié l'équivalent du Debug.Print en .NET mais tu vois l'idée
Marsh Posté le 25-02-2004 à 10:41:48
Ouaip je vois le truc, mais mes deux retours ne sont pas des fonctions hélas....
IIF marche parfaitement, enfin il marche pas avec le system.dbnull.value
G posté dans plein de forums et personne ne m'a trouvé de solution...
C pô grave, on va ouvrir un ticket, je vous tiendrai au courant si on a des news
a+
Et encore merci à tous ;-)
Marsh Posté le 25-02-2004 à 10:47:12
bin lrow c'est comme une fonction, tu l'as vu toi même dans ton premier post puisque une structure classique If fonctionne
pour moi faut pas aller chercher plus loin que ça, je suis certain que c'est ça. Iif essaie d'évaluer l'expression lrow(1) et ça renvoie une erreur (j'ai pris l'exemple de la fonction pour faire ma démonstration mais ça marche aussi avec une variable si elle contient un status d'erreur, ce qui est le cas ici).
Marsh Posté le 25-02-2004 à 18:36:22
JagStang a écrit :
|
iif = operateur ternaire de vb
Marsh Posté le 25-02-2004 à 18:39:37
JagStang a écrit : pour le iif, sorry je connaissais pas. j'ai fait 4 mois de C#.NET, mais pas de VB.NET (berk) |
En fait, c'est la notation access/sql server/postgresql, ça vient de la norme SQL, mais M$ aime bien faire des mic-mac de tout dans VB (et vice-versa
)
Marsh Posté le 25-02-2004 à 18:42:07
drasche a écrit : le Iif c'est tout simple, je vois simplement par ce topic que son comportement n'a pas changé par rapport à VB6: les deux valeurs possibles de retour sont évaluées, et dans l'un des cas, celui qu'on veut éviter, bin ça provoque l'erreur, donc tu dois faire un if/then/else classique
|
Ca m'étonne pas trop...
Parceque Iif c'est bêtement (code en VB tout court, en VB.NET ça doit changer un peu, mais ça reste la même chose)
function Iif(test as bool, expr1 as variant, expr2 as variant) as variant
if test then
Iif = expr1
else
Iif = expr2
end if
end function
=> Du coup, normal qu'il vérifie que le type retourné soit compatible avec le type attendu, car c'est bêtement une fonction, et non un oppérateur
Marsh Posté le 25-02-2004 à 18:44:22
magicbuzz> ton algo n'est pas correct, c'est plutôt ceci:
Code :
|
essaie et tu vas voir
Marsh Posté le 24-02-2004 à 18:07:10
Juste une question....en VB.NET
Lorsqu'on rapatrie d'un dataset certaines valeur sont DBNull
lorsque l'on fait avec ({lrow(1) Is DbNull.Value} = True):
ça marche
par contre avec :
Il plante et sort un "Cast invalide de Dbnull en String"
En effet, malgré que l'expression est "True", il passe dans la clause false...
Si l'un de vous apporte une solution...
Merci d'avance