[VB6 + Requête sur base Access] Erreur: "Utilisation non autorisée de Null"

Résolu
NeT_SlipKnoT Messages postés 62 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 10 décembre 2005 - 7 juin 2005 à 13:06
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 - 7 juin 2005 à 14:32
Bonjour à tous!

Je vous écris car j'ai un problème au niveau d'une requête pour attaquer une base Access 2002 sous Visual Basic 6.

Je commence tout d'abord par présenter globalement la structure de mon projet.

La base Access se compose de trois tables: "Service", "Poste" et "Office".
Le but de mon programme VB est de sélectionner dans une ListBox le service puis après sélection du service, on sélectionne le poste dans une seconde ListBox. Après sélection du service et du poste, on doit afficher des infos concernant le poste à savoir la version d'Office installée sur le poste et le numéro de licence. Informations qui se trouvent dans la base Access en question.
Pour celà j'effectue donc des requêtes.
Je tiens à préciser que je suis en DAO (non pas que je préfère à l'ADO, mais je ne sais pas faire de l'ADO... )

1ère requête: Version d'Office

Je vous mets ce que j'ai écris pour la 1ère requête qui me permet d'avoir la version d'Office installée sur le poste sélectioné. Je tiens à préciser que cette requête fonctionne et que je n'ai aucun problème avec celle-ci:

Set req_ent = db.OpenRecordset("select LibOffice from Office,Poste where Office.CodeOffice=Poste.CodeOffice and Poste.CodePoste='" & lst_poste & "'")
If req_ent.EOF = True Then
lbl_office2.Caption = "Non définie"
Else
req_ent.MoveFirst
While req_ent.EOF = False
lbl_office2.Caption = req_ent!LibOffice
req_ent.MoveNext
Wend
End If

Comme vous pouvez le voir dans la requête il y a une jointure entre la table Office et Poste car dans la table "Poste" il y a le code de la version d'Office qui est une clé étrangère correspondant au code office de la table "Office" permettant d'avoir le libellé Office.
Lorsque le champs LibOffice est vide, req_ent.EOF = True et ça marque sans problème "Non définie".

2e requête: Numéro de licence Office

Ma 2e requête sert à obtenir le numéro de licence d'Office et n'utilise qu'une seule table:

Set req_ent = db.OpenRecordset("select LicOffice from Poste where Poste.CodePoste='" & lst_poste & "'")
If req_ent.EOF = True Then
lbl_licence2.Caption = "Non définie"
Else
req_ent.MoveFirst
While req_ent.EOF = False
lbl_licence2.Caption = req_ent!LicOffice
req_ent.MoveNext
Wend
End If

Cette requête ne fonctionne pas lorsque le champ "LicOffice" de la base de donnée est vide, un message d'erreur apparait: "Erreur d'exécution '94': Utilisation non autorisée du Null" ...
Je ne comprends pas le problème étant donné que la requête précédente fonctionnait.
En faisait un pas à pas, je me rends compte que contrairement à la requête précédente, lorsque le champ est vide, req_ent.EOF est toujours "False" et ne bascule pas en "True" d'où l'erreur avec le Null puisqu'apparement req_ent!LicOffice ne peut pas être Null. Je ne comprends donc pas pourquoi req_ent.EOF n'est pas "True" lorsque le champ est vide comme c'était le cas avec la requête précédente.

Je demande donc de l'aide SVP!!!!!!

NB: les "lst_" sont le nom de mes ListBox
les "lb_" sont le nom de mes labels
Les champs nulls sont autorisés dans ma base Access pour "LibOffice" et "LicOffice"

4 réponses

tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
7 juin 2005 à 13:16
tu peux mettre :
if isNull(req_ent) = true then

lbl_licence2.Caption = "Non définie"
Else
req_ent.MoveFirst
While req_ent.EOF = False
lbl_licence2.Caption = req_ent!LicOffice
req_ent.MoveNext
Wend
End If
Ca devrait marcher....


Il y a plusieurs facon d'être con ,mais un con choisit toujours la pire
3
NeT_SlipKnoT Messages postés 62 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 10 décembre 2005
7 juin 2005 à 14:00
Merci beaucoup!!!! Ca marche!
Sauf que c'était pas: if isNull(req_ent) true then mais if isNull(req_ent!LicOffice) true then mais ça j'ai trouvé tout seul, l'essentiel c'était de m'avoir mis sur la piste d'une nouvelle méthode que je ne connaissais pas.

Cela dit, je ne comprends tout de même pas pourquoi ma méthode ne fonctionne pas pour ma 2e requête... Si quelqu'un a une explication?

Sinon, ne saurais-tu pas comment faire pour que des références soit automatiquement cochées à l'ouverture du projet VB? Par exemple là je dois utiliser la référence "Microsoft DAO 3.6" et à chaque fois je dois cocher cette référence à l'ouverture de mon projet ce qui est TRES chiant... Gross avait le même problème lorsqu'il avait voulu corriger nos TPs...

NB: si t'as même pas vu que c'était moi, ça prouve à quel point t'es investi sur ce forum pour aider les gens ^-^
3
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
7 juin 2005 à 13:17
ah ben j'avais meme pas vu que c t toi!!!! Ben essaie ma technique, g eu le meme prob et je l'ai arrangé comme ca....

Il y a plusieurs facon d'être con ,mais un con choisit toujours la pire
0
tof008 Messages postés 695 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 5 janvier 2010 33
7 juin 2005 à 14:32
ben en fait ca marche pas parce que quand il recupere les données, il y en a une qui est vide et du coup il ne trouve pas de valeurs à assigner... et il ne peut pas mettre Null comme valeur...
Par contre pour tes references, je ne sais pas du tout comment faire... Perso je les ai cochées une fois et depuis ca reste coché... Mais envoie un mail à Gross, il répond vite!!!

Encore une chose, quand la réponse te convient, appuie sur réponse acceptée, comme ca les gens qui ont le même prob que toi peuvent voir la solution qui marche!

Hesite pas si ta un autre prob... Il faut bien que je fasse partager le peu de savoir que j'ai ! loool

Il y a plusieurs facon d'être con ,mais un con choisit toujours la pire
0
Rejoignez-nous