cs_samanta26
Messages postés22Date d'inscriptiondimanche 14 novembre 2010StatutMembreDernière intervention26 février 2012
-
12 févr. 2011 à 12:50
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
11 févr. 2012 à 16:01
bonjour!! j'ai besoin de l'aide slp!!!
j'ai un projet 'gestion de transport' du visual basic, je travaille aussi avec access.
j'ai une form qui s'appelle consultation ville qui permet d'ajouter et de supprimer des villes. Concernant la suppression de la ville, il faut afficher le code de la ville par un combobox dans des zones de texte et après les supprimer sauf que je parviens pas à les afficher...et il me sort une erreur d'exécution 3021 BOF ou EOF est egal à true ou l'enregistrement actuel a été supprimé. L'opération demandé necessite un enregistrement actuel...au niveau de text3.text...voila le code que j'ai programmé
Dim rs1_vil As ADODB.Recordset
Private Sub Combo1_Click()
x = Trim(Combo1.Text)
rs_vil.MoveFirst
rs_vil.Find "codevil='''&x&'''"
Text3.Text = rs_vil!codevil
Text4.Text = rs_vil!nomvil
Set rs1_vil = New ADODB.Recordset
rs1_vil.Open "select all * from ville where ville!codevil='''&x&'''", ct, adOpenDynamic, adLockBatOptimistic
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 févr. 2011 à 15:50
Salut
Syntaxe bizarre ici
rs_vil.Find "codevil='''&x&'''"
et là
where ville!codevil='''&x&'''"
Si tu dois insérer une variable chaine dans une autre chaine, il faut :
- refermer la chaine,
- utiliser & comme tu l'as fait, mais en ajoutant un espace devant et derrière le symbole,
- réouvrir la chaine pour y inscrire la suite
Exemple
Pourquoi se déferlement de symbole ' ?
Un seul suffit.
Les ' sont utilisés comme séparateur de chaine dans une syntaxe SQL, mais là, tu prépares une chaine VB à donner à manger à SQL : Il faut donc dissocier les langages.
En supposant que x vaille "45000", tu veux que ta chaine ressemble à ceci :
codevil = '45000'
Donc, il faut écrire
"codevil = '" & x & "'"
Je te laisse corriger la seconde syntaxe en conséquence.
De plus, après un Find, je te conseille de vérifier qu'il a bien fourni un résultat avant de vouloir les lire, sinon, tu auras l'erreur dont tu parles dans ta question --> C'est expliqué dans l'aide :
Si la recherche n'a pas trouvé de résultat, le RecordSet se positionnera après le dernier enregistrement, c'est à dire sur rien :
If rs.EOF Then MsgBox "Pas trouvé"
Dernière chose :
Select all * ... n'est pas une syntaxe valide
Select * ... suffit
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 févr. 2011 à 04:09
De toute façon, ta méthode n'est pas la bonne :
En faisant un .Delete sur ton RecordSet, tu vas supprimer l'enregistrement, mais pas dans la base, uniquement dans l'image qu'est le RecordSet.
Il faut utiliser une commande directe sur la table :
Syntaxe à revérifier :
ct.Execute "Delete from ville where ..."
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 févr. 2011 à 15:52
Et bah non, c'était pas la dernière chose, lol.
Pour t'aider dans la recherche de problème dans ton code, utilise le mode débogage :
- F9 sur une ligne de code
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement
Tu verras ainsi comment évolue le contenu de tes variables et si chaque instruction donne bien le résultat escompté.
cs_samanta26
Messages postés22Date d'inscriptiondimanche 14 novembre 2010StatutMembreDernière intervention26 février 2012 12 févr. 2011 à 19:30
bonsoir Mr Jack!!!
je voulais te remercier tt d'abord pour votre aide, j'ai corrigé "codevil = '" & x & "'" et ça marche maintenant mais j'ai un autre pb au niveau de la commande supprimer, comme j'ai dis tt à l'heure il faut que je supprime de la table ville tt les attributs concernant le code choisi avec le combobox, voila le code j'ai programmé:
Dim rs1_vil As ADODB.Recordset
Private Sub Command2_Click()
rep = MsgBox("Etes vous sûr de vouloir supprimer cette ville", vbYesNo)
If rep = vbNo Then
MsgBox ("suppression abondonnée!")
Combo1.SetFocus
Else
rs_vil.MoveFirst
x = Trim(Combo1.Text)
Set rs1_vil = New ADODB.Recordset
rs1_vil.Open "select * from ville where ville!codevil = '" & x & "'", ct, adOpenDynamic, adLockOptimistic
rs_vil.Delete
MsgBox ("ville supprimée!")
Unload Me
Me.Show
End If
End Sub
mais lorsque je compile il me sort un msg d'erreur "impossible de supprimer ou de modifier l'enregistrement car la table 'vente' comprend des enregistrements connexes.
pouvez-vous me montrer ou est ce que j'ai commis l'erreur!!!
merci d'avantage!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_samanta26
Messages postés22Date d'inscriptiondimanche 14 novembre 2010StatutMembreDernière intervention26 février 2012 14 févr. 2011 à 14:36
bonsoir Mr Jack!!! merci beaucoup ça marche maintenant mais il y'a deux erreurs la 1ère c'est lorsqu'il supprime un enregistrement de la base de donnés il le remplace avec des (#supprimé#) plus un débogage au niveau du chargement du combo (Combo1.AddItem rs_vil!codevil)avec un message d'erreur "l'enregistrement a été supprimé" et je parviens pas vraiment à détecter l'anomalie!!!!!
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 11 févr. 2012 à 16:01
Une idée ?
J'en ai au moins 3 (les deux premières étant indispensables avant de passer à la troisième)
- installer VB
- apprendre VB
- développer sous VB
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient