Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

VBA ACCESS 2003 : NOT TRUE NE VAUT PLUS FALSE !!!


Information sur la source

Catégorie :Système Niveau : Expert Date de création : 25/07/2004 Date de mise à jour : 25/07/2004 16:46:08 Vu : 6 063

Note :
Aucune note

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note


Description

Bong sang, mais c'est pas vrai ! mais si !, Not True reste vrai maintenant ! MS a du redéfinir la valeur interne de True de telle sorte que Not True ne soit plus égal à 0 (qui est la valeur interne de False) ou alors je me demande si ce n'est pas plutôt un problème de traduction en français de True en Vrai, toujours est-il que Not True ne vaut plus toujours False ! En fait, selon la version du moteur VBA, la version d'Access et la version du projet Access qui est ouverte, tantôt le test fonctionne normalement (comme pour les précédentes versions d'Office et de VBA), et tantôt il reste toujours vrai : il n'est donc plus possible de prévoir quand le code va fonctionner ou pas. Du coup toutes les lignes de code telle que If Not MonBooleen Then ... doivent être réécrite en If MonBooleen = False Then ... car Not MonBooleen peut être évalué à vrai quelque soit la valeur de MonBooleen !
Heureusement, un ami m'a donné une idée simple, qui ressemble un peu à la technique de l'injection SQL : il suffit de remplacer toutes les occurrences de [Not] par [False =] mais seulement pour les booléens (de toute façon, on se demande bien qui peut utiliser Not avec autre chose que des booléens, à savoir pour inverser les bits d'un entier !). Sacré farceur ce Bill !

 

Source

  • Public Sub TestNotTrue()
  • Dim bMonBooleen As Boolean
  • bMonBooleen = True
  • If Not bMonBooleen Then
  • MsgBox "Not True ne vaut pas False !!!"
  • Else
  • MsgBox "Ok, Not True vaut bien False."
  • End If
  • End Sub
Public Sub TestNotTrue()

    Dim bMonBooleen As Boolean
    bMonBooleen = True
    If Not bMonBooleen Then
        MsgBox "Not True ne vaut pas False !!!"
    Else
        MsgBox "Ok, Not True vaut bien False."
    End If

End Sub

Conclusion

C'est pas une blague !
 

Historique

25 juillet 2004 16:46:13 :
Correction du texte : apostrophe ne passe pas.

Commentaires et avis

signaler à un administrateur
Commentaire de BruNews le 25/07/2004 23:02:23 administrateur CS

J'ai mis ta Sub de test dans Access 2003.
Il me dit bien "Ok, Not True vaut bien False."
Y a un prob ?

signaler à un administrateur
Commentaire de JoePatent le 26/07/2004 01:12:40

Tout va bien aussi de mon coté avec 2003, 2000 et 97 ...

Je ne comprend pas trop comment vba pourrait interpreter ca différement.

signaler à un administrateur
Commentaire de Patrice99 le 26/07/2004 08:40:15

C'est parce que vous n'avez pas ouvert de base Access avec du code dans des versions antérieures d'Access, une application Access 2000 par exemple. Moi non plus je ne comprend pas comment VBA peut en arriver à interpreter ca différemment, et pourtant c'est bien le cas. Il faudrait trouver le moyen de reproduire le bug à coup sûr, mais comment ? Ce qui est sûr, c'est que j'ai enlevé tous les Not dans mes codes sources Access 2000, car il ne marchait plus depuis debut Juillet, et ce même sur une machine restée en Access XP. C'est peut être le fait d'avoir modifié l'appli sous Access 2003.

signaler à un administrateur
Commentaire de sarl_adc le 26/07/2004 11:05:00

Il n'y a pas de rapports de bugs ou de correctifs sur le site de Microsoft ?

Peut-être est-ce juste un bug des 1ères version d'Access...

signaler à un administrateur
Commentaire de Patrice99 le 26/07/2004 11:49:24

J'ai la dernière version d'Access avec les derniers correctifs, et le problème se produit aussi avec Access XP sur le projet mdb 2000 modifié avec Access 2003.

signaler à un administrateur
Commentaire de Didchr81 le 26/07/2004 13:28:30

Salut !

Comme les problèmes Access reviennent de plus en plus, et que moi même j'y suis confronté, je vous confirme que la compatibilité Access2000 et 2003 est quasiment pas fiable, que la réecriture du code est indispensable, et nécessaire sur des machines de type 2003.
Lorsque que l'on bidouille avec Access ce n'est pas trop grave, mais si c'est une application compléte qui en dépend, je ne saurais que vous conseillé de prévoir une migration vers un autre Langage.

A savoir que même Windev a des soucis de migration de ses applications d'un poste 2000 ne 2003.

?

Salutations.

signaler à un administrateur
Commentaire de Patrice99 le 26/07/2004 16:57:19

C'est bien pour cela que j'ai lancé mon appel à témoin, pour avoir ce genre de retour (et éventuellement au cas où quelqu'un connaîtrait la raison exacte du bug) mais de là à abandonner Access, tout de même...
En fait, pour la migration, j'ai déjà migré 50% de mon application constituée de 2 mdb en VB .Net (encore du Microsoft), mais c'est vrai que je me pose la question pour le reste, car ce genre de bug me fait pas mal douter d'Access. Cela étant dit, Access est quand même un des meilleurs outils qui existe en pure conception de base de données. En attendant un hypothétique VBA .Net ...

signaler à un administrateur
Commentaire de BruNews le 26/07/2004 17:11:10 administrateur CS

Le vba.net est en bonne phase d'avancement. Il y aura un peu de travail de migration mais au moins ça harmonisera avec le vb actuel qui est entierement devenu .net, en avant avec le framework.

signaler à un administrateur
Commentaire de NeerLess le 22/01/2008 01:02:47

Salut à tous !

Du point je code aussi en C/C++, je porte à ta connaissance que ce genre d'interprétation existe !!!

En effet, en C/C++, toute valeur différente de 0 (en binaire) est consdérée comme un True, ceci est du à un test des drapeaux de ALU au coeur du CPU (le drapeau Z [Zero] précisement). Le code source qui suit marche avec Dev-C++ :





#include<stdio.h>

int main()
{
clrscr();

int r=1;

if (r)  printf("R est vrai. R=%d",r);
r=(!r); // l'exclamation est pour le Not
if (r)  printf("R est vrai. R=%d",r);

getch();
}




J'éspère avoir été utile, et à la prochaine.

signaler à un administrateur
Commentaire de Patrice99 le 22/01/2008 08:27:09

Oui mais dans Access, le problème est que la variable était bien un booléen, alors que si tu fais un test avec un int, ce n'est pas la même chose.

signaler à un administrateur
Commentaire de BruNews le 22/01/2008 09:42:58 administrateur CS

NON, en C/C++ différent de 0 n'est pas considéré comme True ni comme rien du tout, c'est 0 OU NON 0 mais rien de plus.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,34 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.