begin process at 2012 02 16 15:09:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

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

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


 Information sur la source

Note :
Aucune note
Catégorie :Système Niveau :Expert Date de création :25/07/2004 Date de mise à jour :25/07/2004 16:46:08 Vu :8 644

Auteur : Patrice99

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
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.

 Sources du même auteur

Source avec Zip FREEBOOK : MODELE ET MACRO WORD EBOOK POUR LES LISEUSES ELEC...
Source avec Zip Source avec une capture Source .NET (Dotnet) VBFILEFIND : RECHERCHE DE FICHIERS POUR REMPLACER CELLE DE W...
Source avec Zip Source avec une capture Source .NET (Dotnet) VBWINDIFF : INTERFACE D'OPTIONS POUR LE COMPARATEUR WINDIFF
Source avec Zip Source .NET (Dotnet) VBEXCELLIBRARY : LIRE RAPIDEMENT UN CLASSEUR EXCEL SANS EXCE...
Source avec Zip Source .NET (Dotnet) CRÉER UN VRAI OCX EN DOTNET

 Sources de la même categorie

Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER par ShareVB
Source avec Zip Source avec une capture DESACTIVER / ACTIVER LES MISES EN VEILLES PC par Arsena

Commentaires et avis

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 ?

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.

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.

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...

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.

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.

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 ...

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.

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.

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.

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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 10,343 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales