OVH Cloud OVH Cloud

Access2000 - Absence dans liste

20 réponses
Avatar
mission
Bonjour tout le monde et bonne année.
Soit une table tblFournisseurs contenant (entre autres) un champ
CodeFournisseur (unique) et un champ Fournisseur (index avec doublons).
Soit un formulaire frmFournisseurs contenant quelques champs de
tblFournisseurs plus une liste modifiable indépendante lstFournisseurs basée
sur la requête SELECT [tblFournisseurs].[Fournisseur], * FROM
tblFournisseurs ORDER BY [tblFournisseurs].[Fournisseur];
Avec le code
Private Sub lstFournisseurs_AfterUpdate()
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[tblFournisseur] = '" & Me.[lstFournisseurs] & "'"
Me.Bookmark = rs.Bookmark
End Sub
je peux choisir mon fournisseur et afficher les éléments le concernant.
Jusque là, tout marche bien.
Par contre, je suis incapable de créer un nouvel enregistrement dans
tblFournisseurs!
Le code (merci http://access.developpez.com/)
Private Sub lstFournisseurs_NotInList(NewData As String, Response As
Integer)
DoCmd.RunSQL "INSERT INTO tblFournisseurs ( Fournisseur ) SELECT ""
& NewData & "";"
Response = acDataErrAdded
End Sub
ne fonctionne pas. L'expérience renvoit systématiquement le premier
enregistrement de tblFournisseurs.
Est-ce que quelqu'un(e) saurait m'aider à résoudre mon problème, sachant que
je ne cherche qu'à créer le nouvel enregistrement ? Le but est de ne pas
laisser l'utilisateur bloqué. Il complètera sa fiche Fournisseur par la
suite si besoin est.
Merci d'avance.
PG

10 réponses

1 2
Avatar
ze Titi
Bonjour mission

N'aurais-tu pas défini des champs obligatoires dans ta table
Fournisseur ? Par ailleurs, l'identifiant de cette même table, est-il
un numéro automatique ou bien un numéro géré par tes soins ?

Enfin, à la place de :

DoCmd.RunSQL "INSERT INTO tblFournisseurs ( Fournisseur ) SELECT "" &
NewData & "";"

j'aurais mis:

DoCmd.RunSQL "INSERT INTO tblFournisseurs ( Fournisseur ) VALUES(" &
chr(34) & NewData & chr(34) & ");"

Mais je peux me tromper...

Dans ton message du vendredi
Bonjour tout le monde et bonne année.
Soit une table tblFournisseurs contenant (entre autres) un champ
CodeFournisseur (unique) et un champ Fournisseur (index avec doublons).
Soit un formulaire frmFournisseurs contenant quelques champs de
tblFournisseurs plus une liste modifiable indépendante lstFournisseurs basée
sur la requête SELECT [tblFournisseurs].[Fournisseur], * FROM tblFournisseurs
ORDER BY [tblFournisseurs].[Fournisseur];
Avec le code
Private Sub lstFournisseurs_AfterUpdate()
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[tblFournisseur] = '" & Me.[lstFournisseurs] & "'"
Me.Bookmark = rs.Bookmark
End Sub
je peux choisir mon fournisseur et afficher les éléments le concernant.
Jusque là, tout marche bien.
Par contre, je suis incapable de créer un nouvel enregistrement dans
tblFournisseurs!
Le code (merci http://access.developpez.com/)
Private Sub lstFournisseurs_NotInList(NewData As String, Response As Integer)
DoCmd.RunSQL "INSERT INTO tblFournisseurs ( Fournisseur ) SELECT "" &
NewData & "";"
Response = acDataErrAdded
End Sub
ne fonctionne pas. L'expérience renvoit systématiquement le premier
enregistrement de tblFournisseurs.
Est-ce que quelqu'un(e) saurait m'aider à résoudre mon problème, sachant que
je ne cherche qu'à créer le nouvel enregistrement ? Le but est de ne pas
laisser l'utilisateur bloqué. Il complètera sa fiche Fournisseur par la suite
si besoin est.
Merci d'avance.
PG


--
Voilou !
Cordialement,

Ze Titi

Avatar
mission
Bonjour et merci pour cette prompte réponse.
J'ai essayé ton code sql, sans plus de succès.
Ma table tblFournisseurs ne contient aucun champ faisant référence à une
autre table.
Le champ CodeFournisseur (unique) est un numéro auto, servant de lien dans
une relation (1-n avec contrôle d'intégrité) avec une seule autre table (1
fournisseur = plusieurs produits mais 1 produit = 1 fournisseur).
Le champ Fournisseur ne contient qu'une obligation d'index avec doublon.
Les autres champs sont complètement neutres.
En fait, on dirait que l'évênement "sur absence dans liste" ne fonctionne
pas.
Bonne journée.
PG

Dans son message ,
l'honorable ze Titi écrivait
Bonjour mission

N'aurais-tu pas défini des champs obligatoires dans ta table
Fournisseur ? Par ailleurs, l'identifiant de cette même table, est-il
un numéro automatique ou bien un numéro géré par tes soins ?

.... j'aurais mis:

DoCmd.RunSQL "INSERT INTO tblFournisseurs ( Fournisseur ) VALUES(" &
chr(34) & NewData & chr(34) & ");"


Avatar
ze Titi
As-tu bien mis la propriété "Limiter à liste" de ta liste à "Oui" ?
C'est indispensable...

Dans ton message du vendredi
Bonjour et merci pour cette prompte réponse.
J'ai essayé ton code sql, sans plus de succès.
Ma table tblFournisseurs ne contient aucun champ faisant référence à une
autre table.
Le champ CodeFournisseur (unique) est un numéro auto, servant de lien dans
une relation (1-n avec contrôle d'intégrité) avec une seule autre table (1
fournisseur = plusieurs produits mais 1 produit = 1 fournisseur).
Le champ Fournisseur ne contient qu'une obligation d'index avec doublon.
Les autres champs sont complètement neutres.
En fait, on dirait que l'évênement "sur absence dans liste" ne fonctionne
pas.
Bonne journée.
PG

Dans son message ,
l'honorable ze Titi écrivait
Bonjour mission

N'aurais-tu pas défini des champs obligatoires dans ta table
Fournisseur ? Par ailleurs, l'identifiant de cette même table, est-il
un numéro automatique ou bien un numéro géré par tes soins ?

.... j'aurais mis:

DoCmd.RunSQL "INSERT INTO tblFournisseurs ( Fournisseur ) VALUES(" &
chr(34) & NewData & chr(34) & ");"



--
Voilou !
Bon courage !
Cordialement,
ze Titi


Avatar
mission
Bingo !
C'est bien cette propriété la responsable. Etrange définition : pour
permettre d'ajouter une valeur inexistante, il faut limiter à la liste...
:-(
Accessoirement, ton code sql est correct. Celui que j'avais ne fonctionne
pas.
Puis-je abuser ? Je n'arrive pas à rafraîchir ma liste après ajout.
J'ai essayé :
Me.Refresh
Me.lstFournisseurs.Requery
dans la propriété Form_AfterUpdate() sans succès.
Où dois-je le mettre ? A moins que ce ne soit pas le bon code.
Cordialement. Et encore mille mercis.
PG

Dans son message ,
l'honorable ze Titi écrivait
As-tu bien mis la propriété "Limiter à liste" de ta liste à "Oui" ?
C'est indispensable...


Avatar
ze Titi
A la fin de l'évènement NotInList, tu fais juste un

lstFournisseurs.Requery

Théoriquement, ça fonctionne...

Dans ton message du vendredi
Bingo !
C'est bien cette propriété la responsable. Etrange définition : pour
permettre d'ajouter une valeur inexistante, il faut limiter à la liste... :-(
Accessoirement, ton code sql est correct. Celui que j'avais ne fonctionne
pas.
Puis-je abuser ? Je n'arrive pas à rafraîchir ma liste après ajout.
J'ai essayé :
Me.Refresh
Me.lstFournisseurs.Requery
dans la propriété Form_AfterUpdate() sans succès.
Où dois-je le mettre ? A moins que ce ne soit pas le bon code.
Cordialement. Et encore mille mercis.
PG

Dans son message ,
l'honorable ze Titi écrivait
As-tu bien mis la propriété "Limiter à liste" de ta liste à "Oui" ?
C'est indispensable...



--
Voilou !
Bon courage !
Cordialement,
ze Titi


Avatar
mission
Euh ! Non. Ca ne fonctionne pas. J'ai même une erreur qui réclame un
débogage, s'arrêtant sur cette ligne.
J'ai essayé aussi Me.lstFournisseurs.Requery sans succès.
Tant pis.
PG

Dans son message ,
l'honorable ze Titi écrivait
A la fin de l'évènement NotInList, tu fais juste un

lstFournisseurs.Requery

Théoriquement, ça fonctionne...


Avatar
ze Titi
Quel est le message d'erreur ? Tu as bien laissé le

response¬DataErrAdded

?

Le Requery doit se trouver après.

Dans ton message du vendredi
Euh ! Non. Ca ne fonctionne pas. J'ai même une erreur qui réclame un
débogage, s'arrêtant sur cette ligne.
J'ai essayé aussi Me.lstFournisseurs.Requery sans succès.
Tant pis.
PG

Dans son message ,
l'honorable ze Titi écrivait
A la fin de l'évènement NotInList, tu fais juste un

lstFournisseurs.Requery

Théoriquement, ça fonctionne...



--
Voilou !
Bon courage !
Cordialement,
ze Titi


Avatar
mission
Voici le code :
Private Sub lstFournisseurs_NotInList(NewData As String, Response As
Integer)
If MsgBox("Voulez-vous ajouter " & NewData & " à la liste des
fournisseurs ?", _
vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") =
vbYes Then
DoCmd.RunSQL "INSERT INTO tblFournisseurs ( Fournisseur ) VALUES(" &
Chr(34) & NewData & Chr(34) & ");"
Response = acDataErrAdded
Else
Response = acDataErrContinue
lstFournisseurs.Undo
End If
Me.lstFournisseurs.Requery
End Sub
Et le code erreur : http://cjoint.com/?bmqHYca8td
PG


Dans son message ,
l'honorable ze Titi écrivait
Quel est le message d'erreur ? Tu as bien laissé le

response¬DataErrAdded

?

Le Requery doit se trouver après.

Dans ton message du vendredi
Euh ! Non. Ca ne fonctionne pas. J'ai même une erreur qui réclame un
débogage, s'arrêtant sur cette ligne.
J'ai essayé aussi Me.lstFournisseurs.Requery sans succès.
Tant pis.
PG

Dans son message ,
l'honorable ze Titi écrivait
A la fin de l'évènement NotInList, tu fais juste un

lstFournisseurs.Requery

Théoriquement, ça fonctionne...






Avatar
3stone
Salut,

"mission"
| Voici le code :
| Private Sub lstFournisseurs_NotInList(NewData As String, Response As
| Integer)
| If MsgBox("Voulez-vous ajouter " & NewData & " à la liste des
| fournisseurs ?", _
| vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") | vbYes Then
| DoCmd.RunSQL "INSERT INTO tblFournisseurs ( Fournisseur ) VALUES(" &
| Chr(34) & NewData & Chr(34) & ");"
| Response = acDataErrAdded
| Else
| Response = acDataErrContinue
| lstFournisseurs.Undo
| End If
| Me.lstFournisseurs.Requery
| End Sub
| Et le code erreur : http://cjoint.com/?bmqHYca8td


Tu n'as rien dans la "source controle" de ta liste ?


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
mission
Dans son message %,
l'honorable 3stone écrivait

Tu n'as rien dans la "source controle" de ta liste ?


Non, c'est un contrôle ajouté à la main. Je ne sais plus d'où vient cette
méthode : sans doute self-access ou office system.
Je pense que le plus simple est ces 3 images (ensemble 240ko) :
http://cjoint.com/?bmtaeQ4D0n
http://cjoint.com/?bmtaHyAzXF
http://cjoint.com/?bmta3OWQlQ

Merci encore pour ton attention.
A tout hasard, bon week-end.
PG

1 2