Pb code vba

mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention   -  
 x140 -
bonjour a tous,
voila je suis censée ecrire un code vba qui doit me permettre qd je rentre les coordonnée d'un client (nom, prenom, code postal) de me renvoyer automatiquement son numero de client s'il existe dans ma base de donnée ou sinon lui cree un nouveau numero. (base de donnée access 2000 formulaire de saisie access)
voici mon code mais ya un bug ca ne marche pas et comme je suis nulle en vb je capte pas mon erreur

Private Sub num_client_Click()

Dim i As Integer
Dim rst As Recordset
Dim Intx As Integer

Intx = DCount("*", "CLIENT")

If Intx > 0 Then

Set rst = rst.OpenRecordset("SELECT num_client FROM CLIENT WHERE nom = &zonenom.value& And prenom = &zoneprenom.Value&And code_postal = zonecode_postal..Value;")

Else
i = 1 + Intx
rst.Execute "INSERT INTO CLIENT ([num_client])VALUES('i');"

End If
End Sub

ya pas quelqun qui saurai ou ets le proleme????
Merci de votre aide
A voir également:

27 réponses

WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Set rst = CURRENTDB.OpenRecordset("SELECT num_client FROM CLIENT WHERE nom = &zonenom.value& And prenom = &zoneprenom.Value&And code_postal = zonecode_postal..Value;")

;-)
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
merci bcp tu m as resolu mon probleme avec le recordset mais la j ai un autre soucis pour le

Else
i = 1 + Intx
rst.Execute "INSERT INTO CLIENT ([num_client])VALUES('i');"

tu vois pas ce que c'est par hasard????
merci d avance
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

rst.Execute "INSERT INTO CLIENT ([num_client])VALUES('" &i &"');"

;-)
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
alors le code est bon mais voila ca m enregistre dans la base de donnee juste un "i" dans la colonne num_client et le reste du formulaire de saisie non????
je comprend plus la
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Bin, si j'ai bien lu, et c'est pour cela que je te l'ai passé en variable, ton i sert à compter quelque chose ?

Pour vérifier, met la ligne "insert.." dans une variable, avant le rs execute, et lance en mode debug, pour voir si le i évolue...

;-)
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
desolee mais je suis une ... en vb et je ne sais pas comment faire pour mettre la ligne "insert.." dans une variable???
il faut que je fasse une declaration de variable "Dim ....."????
:-)
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

VerifTexte="INSERT INTO CLIENT ([num_client])VALUES('" &i &"');"
rst.Execute VerifTexte

Comme ça, en positionnant ta souris sur le mot VerifTexte, quand rst.execute est en jaune, tu vois le contenu... Cela te permettra de vérifier si i est bon...

;-)
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
ca me met pour

VerifTexte="INSERT INTO CLIENT ([num_client])VALUES('" &i &"');"
rst.Execute VerifTexte

"membre de methode ou de donnée introuvable"

je crois pas que access 2000 ne reconnaisse cette fonction????
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Bin, cela veut dire que cela n'existe pas (execute) pour l'objet rst....

;-)

Maintenant, si tu veut rajouter un enregistrement à ta table, tu a la méthode AddNew : Rst.Addnew

;-)
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
oui, j ai essayé avec DoCmd.RunSQL ce qui me donne comme code :

Private Sub num_client_Click()
Dim i As Integer
Dim rst As Recordset
Dim Intx As Integer

Intx = DCount("*", "CLIENT", " nom = " & zonenom.Value & " And prenom = " & zoneprenom.Value & " And code_postal = " & zonecode_postal.Value & " ")

If Intx > 0 Then

Set rst = CurrentDb.Openrecordset("SELECT num_client FROM CLIENT WHERE nom = " & zonenom.Value & " And prenom = " & zoneprenom.Value & " And code_postal = " & zonecode_postal.Value & " ")

Else
i = 1 + Intx

DoCmd.RunSQL "INSERT INTO CLIENT ([num_client])VALUES('" & i & "');"

End If
End Sub

Mais le pb est la ligne:
Intx = DCount("*", "CLIENT", " nom = " & zonenom.Value & " And prenom = " & zoneprenom.Value & " And code_postal = " & zonecode_postal.Value & " ")

j ai essye avec le where et sans mais elle reste surligné en jaune???
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
alors oki j ai reecrit la ligne de code

Intx = DCount("*", "CLIENT", [nom] = " & zonenom.value & " And [prenom] = " & zoneprenom.value & " And [code_postal] = [nom] = " & zonecode_postal.value & ")

cette ligne ne semble plus buger mais maintenant c celle la

DoCmd.RunSQL " INSERT INTO CLIENT ([num_client] VALUES ('" & i & "'); "
elle est devient surlignee jaune qd je lance le debogage
que ce passe t il?????
aidez moi svp
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
aidez moi svp
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Ce qu'il te faut savoir : Quand tu passes en mode "debug", l'interpréteur "évalue" chaque ligne avant de l'exécuter, et te passe la ligne en "inverse vidéo" jaune.. A chaque fois que tu appuie sur la touche F8, la ligne est exécutée, ligne à ligne...

Donc, quand tu veux effectuer un "debug" de ton appli, tu appuies à chaque fois sur la touche F8 pour exécuter chaque ligne...

Si tu veux repasser en mode normal, d'exécution, de fonctionnement de ton code, tu appuies sur la touche F5 et l'exécution se poursuit...

La phase suivante étant d'utiliser les événements...

Si une ligne "reste" en jaune et que l'exécutiion du code "bloque" à ce niveau, c'est qu'il y a un problème de "logique" (pas de syntaxe), d'objet, de fonction inconnue...

;-)
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Perso, je pense que tu pars dans tous les sens et que tu te mélanges les crayons... Prends pas mal, c'est gentil ;-)

Apparemment, tu as une boîte qui contient des valeurs de Nom, prénom, blablabla... Et que si cela n'existe pas dans la table, tu dois en créer un nouveau...

Pour moi, c'est simple !! (pour moi !) : Ton recordset, tu le fais basé sur tes zones de texte (si y'a, y'auras des enregistrements), et donc, ton Dcount, tu le bases sur le recordset, et si c'est = à 0, tu fais un AddNew... Logique... Non ?

;-)
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
lol, en effet je m enmele les pinceaux mais cela est du au fait que c'est la premiere fois que je fais du vba et que je capte plus parce que ca devient complique pour moi!!! lol
alors je vais essyer d expliquer mon probleme car je pense avoir compris ce qui se passe (je pense):

Dim rst As Recordset
Dim Intx As Integer
Dim i As Integer
Intx = DCount("*", "CLIENT", [nom] = " & zonenom.value & " And [prenom] = " & zoneprenom.value & " And [code_postal] = " & [zonecode_postal.value] & ")

If Intx > 0 Then

Set rst = CurrentDb.Openrecordset("SELECT num_client FROM CLIENT WHERE nom = " & zonenom.Value & " And prenom = " & zoneprenom.Value & " And code_postal = " & zonecode_postal.Value & " ")

Else
Inty = DCount("*", "CLIENT")
i = 1 + Inty
DoCmd.RunSQL (" INSERT INTO CLIENT ([num_client]) VALUES ('" & i & "');")

End If

1) en affat mon premier dcount... est=0 alors qu il y ai ou pas dans ma table client des client ou pas qui correspondent aux conditions

2) admettons que les coordonnées saisie dans le formulaire ne correspondent a aucun client de la table alors ca me renvoie a la 2eme partie de mon code et la la requete marche mais ca m insert la valeur de 'i' dans la table client mais pas le reste des donnees saisie dans le formulaire/ca ne m affiche pas non plus dans le formulaire au champ num_client la valeur de 'i'

Mais pourquoi?????
je pete un plomb et par contre je capte pas ton histoire de addnews ce que tu veux dire???
merci de ton aide!!!
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Pour le AddNew, voilà une petite idée de code, à rajouter/adapter à ton code, surtout pour remplacer ton DoCmd :

Dim LaTable As Recordset
'Ca, c'est la vraie table, que l'on ouvre...
Set LaTable = CurrentDb.OpenRecordset("NomDeTaTable", dbopentable)
'On passe en mode ajout d'enregistrement (enregistrement vide)
LaTable.AddNew
'On remplit les champs
LaTable!NomDuChamp1 = ContrôleFormulaire1 'les objets de ton formulaire (ex : Nom)
LaTable!NomDuChamp2 = ContrôleFormulaire2 '...etc...
'... etc....
'Et on met la table à jour (si pas update, enregistrement pas écrit...)
LaTable.Update
'On referme la table et le tour est joué... ;-)
LaTable.Close

;-)
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
merci bcp mais pour le point 1 tu vois pas pq ca marche pas????
0
WhiteFang Messages postés 2063 Date d'inscription   Statut Membre Dernière intervention   204
 
;-)

Bon, avant d'expliquer pourquoi cela ne fonctionne pas, as-tu essayé avec le code que je t'ai donné ? Juste pour voir si ton problème est résolu ?

;-)
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
couocu White Fang
en effet et je t en remercie mille fois, ton code marche ca enregistre tout dans les table et ca les met a jour, :-)

mais la premiere partie de mon code ne marche pas, le DCount... ne veut pas fonctionner les criteres bloque le dcount g essaye differente syntaxe mais ca bug a chaque fois ca me met que c'est =0 alors que dans ma table client g un client qui a les meme coordonnee ?????

merci encore pour ton aide
0
mymym Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
a oui je comprend pas pourquoi dans mon formulaire ya un champ:ref qui correspond a une requete sql mais ca ca ne s'enregistre pas dans la table qui est source de ce champs???
0