Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2011, 18h11   #1
Nouveau Membre du Club
 
Homme
Inscription : décembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Aube (Champagne Ardenne)

Informations forums :
Inscription : décembre 2010
Messages : 115
Points : 38
Points : 38
Envoyer un message via MSN à Kisty10
Par défaut erreur après compactage de la base de donnée

Bonjour

j'explique mon problème :
j'ai supprimé toutes les champs de mes tables et j'ai compacté ma base de donnée.
après, j'ai lancé mon projet et je voulais ajouter un client.
bon j'ai remplis les champs du Formulaire et quand j'ai basculé vers le sous formulaire pour remplir la commande de client,j'ai eu un message d'erreur : "Un index ou une clé principale ne peut pas contenir une valeur Null"

PS :
j'ai un champ (Numfacture) sur ce formulaire au format numérique de style (20110001) qui remet a zero chaque debut d'anné, je pense que le problème est la!!!
Kisty10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 22h29   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Je ne pense pas que le compactage soit le coupable, plutôt le vidage de table.

Regarde la source de données de ton formulaire et vérifie que tu entres bien des données dans le ou les champs qui composent ta ou tes clefs primaires et tes indexs uniques.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 05h47   #3
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 606
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 606
Points : 30 952
Points : 30 952
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Regardes également dans ton code s'il n'y a pas incrémentation d'un champ (de type numéro de facture) qui soit programmé par VBA.

En effet, lorsque tu veux faire l'incrément et que la table est vide il arrive que l'on ait ce genre d'erreurs, car on veut prendre pour référence un enregistrement qui n'existe pas.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 13h57   #4
Nouveau Membre du Club
 
Homme
Inscription : décembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Aube (Champagne Ardenne)

Informations forums :
Inscription : décembre 2010
Messages : 115
Points : 38
Points : 38
Envoyer un message via MSN à Kisty10
Oui j'ai une incrémentation de (numéro de facture), c'est ici l'erreur, parce que j'ai remplis le champ NumFacture manuellement dans ma table et j'ai plus l'erreur.
Mais, ce n'est pas une solution, parce que j'ai juste essayé de remplir ce champ pour savoir s'il provoque l'erreur ou pas.
Alors dois-je faire quoi? est ce qu'il faut changer le type de ce champ?
Kisty10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 18h02   #5
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Peux-tu poster le code qui fait l'incrémentation ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 18h13   #6
Nouveau Membre du Club
 
Homme
Inscription : décembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Aube (Champagne Ardenne)

Informations forums :
Inscription : décembre 2010
Messages : 115
Points : 38
Points : 38
Envoyer un message via MSN à Kisty10
Voila le code :

Code :
1
2
3
4
5
6
 
Function num_fac()
Dim dern_fac
dern_fac = DLast("NumFacture", "Facture")
If Year(Date) > dern_fac / 10000 Then num_fac = Year(Date) * 10000 + 1 Else num_fac = dern_fac + 1
End Function

Et je fait appel à cette fonction dans la propriété "valeur par défaut" de mon champ (NumFacture).

Donc si je vide mes tables, le champ (NumFacture)n'incrémente pas?
Kisty10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 18h27   #7
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Code :
1
2
3
4
5
Function num_fac()
Dim dern_fac
dern_fac = Nz(DMax("NumFacture", "Facture"),0)
If Year(Date) > dern_fac / 10000 Then num_fac = Year(Date) * 10000 + 1 Else num_fac = dern_fac + 1
End Function
S'il n'y a pas de de données DLast retourne Null, le NZ() permet de remplacer ce null par un 0, mais je l'ai remplacé par DMax() car il n'est pas du tout sur que le dernier enregistrement de la table soit celui qui ai le numéro de facture maximum. C'est TRÈS probable mais ce n'est pas CERTAIN :o). J'ai perdu une après-midi avec une erreur de ce type avant de comprendre pourquoi mon code marchait parfois mais pas tout le temps.

Et si tu as plusieurs utilisateurs qui peuvent générer des factures en même temps alors ton code risque de retourner deux fois le même numéro de facture.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2011, 18h48   #8
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 606
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 606
Points : 30 952
Points : 30 952
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Re

Citation:
Envoyé par Kisty10 Voir le message
Oui j'ai une incrémentation de (numéro de facture), c'est ici l'erreur, parce que j'ai remplis le champ NumFacture manuellement dans ma table et j'ai plus l'erreur.
Mais, ce n'est pas une solution, parce que j'ai juste essayé de remplir ce champ pour savoir s'il provoque l'erreur ou pas.
Alors dois-je faire quoi? est ce qu'il faut changer le type de ce champ?
C'est bien ce que je pensais pour m'être fait avoir une fois.

La fonction NZ que t'indique marot_r est une bonne réponse à ce genre de problème.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 18h53   #9
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Salut à toi Philippe :-).

Un point avec NZ() ne pas l'utiliser avec un nombre décimal car parfois elle tronque les décimales !!! Par exemple : 10.5 devient 10 ... pas cool.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 19h01   #10
Nouveau Membre du Club
 
Homme
Inscription : décembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Aube (Champagne Ardenne)

Informations forums :
Inscription : décembre 2010
Messages : 115
Points : 38
Points : 38
Envoyer un message via MSN à Kisty10
Je viens d'essayé ce que t'as proposé et ça marche bien

Citation:
J'ai perdu une après-midi avec une erreur de ce type avant de comprendre pourquoi mon code marchait parfois mais pas tout le temps.
Donc dans ce cas la cette solution n'est pas sur à 100%? est ce qu'elle provoque des erreurs de temps en temps ?
Kisty10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 13h23   #11
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Je parlais de DLast() vs DMax(), j'avais utilisé DLast() au lieu de DMax() et cela m'a pris du temps avant de découvrir mon erreur. Avec DMax() ça marche tout le temps, avec DLast() ça marche si tu as de la chance.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 13h30   #12
Nouveau Membre du Club
 
Homme
Inscription : décembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Aube (Champagne Ardenne)

Informations forums :
Inscription : décembre 2010
Messages : 115
Points : 38
Points : 38
Envoyer un message via MSN à Kisty10
Ah d'accord,
Désolé marot_r j'ai pas vu ta réponse
Merci
Kisty10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 13h32   #13
Nouveau Membre du Club
 
Homme
Inscription : décembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Aube (Champagne Ardenne)

Informations forums :
Inscription : décembre 2010
Messages : 115
Points : 38
Points : 38
Envoyer un message via MSN à Kisty10
Merci a toi aussi Philippe
Kisty10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h10.


 
 
 
 
Partenaires

Hébergement Web