Mise à jour incomplète de ma base de données (DAO/VB6) [Résolu]

Signaler
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
-
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
-
Bonjour tout le monde,

J'essaie d'ajouter une ligne à ma table Access en DAO (VB6).

Pour cela, j'utilise ce code simple :

Private Sub AjouterIngredientDansCompositionRecette(QuantiteDe As Integer, RecetteSelectionnee As Integer, IDDeLIngredient As Integer)
    Dim sql As String    sql "SELECT * FROM detail_recette WHERE detail_recette.ref_recette " & listRecettes(0).ItemData(listRecettes(0).ListIndex) & " AND detail_recette.ref_ingredient = " & IDDeLIngredient
    Set rsAjoutIngredient = BDOuvrirTable(sql, False)
    If rsAjoutIngredient.RecordCount > 0 Then 'si je trouve un enregistrement dans la table qui a comme référence de recette ET comme référence d'ingrédient les données passées en paramètre, alors j'ai au moins un recordset
        rsAjoutIngredient.Edit
        rsAjoutIngredient("quantite") = 0 'je remets à zéro la quantité de l'ingrédient pour cette recette
        rsAjoutIngredient("quantite") = rsAjoutIngredient("quantite") + QuantiteDe 'je met ensuite comme quantité la quantité choisie par le user
        rsAjoutIngredient.Update
    Else 'si je n'ai aucun enreigstrement avec la référence de la recette ET la référence de l'ingrédient alors j'ajoute un nouvel enregistrement
        rsAjoutIngredient.AddNew
        rsAjoutIngredient("ref_recette") = RecetteSelectionnee
        rsAjoutIngredient("ref_ingredient") = IDDeLIngredient
        rsAjoutIngredient("quantite") = QuantiteDe
        rsAjoutIngredient.Update
    End If
End Sub

Le problème se passe ici :

Else 'si je n'ai aucun enreigstrement avec la référence de la recette
ET la référence de l'ingrédient alors j'ajoute un nouvel enregistrement

        rsAjoutIngredient.AddNew

        rsAjoutIngredient("ref_recette") = RecetteSelectionnee

        rsAjoutIngredient("ref_ingredient") = IDDeLIngredient

        rsAjoutIngredient("quantite") = QuantiteDe

        rsAjoutIngredient.Update

    End If

Tout se remplis sauf rsAjoutIngredient("ref_recette") = RecetteSelectionnee

RecetteSelectionnee vaut toujours un entier positif

id => NuméroAuto
ref_recette => numérique
quantité => numérique
ref_ingrédient => numérique

Je ne comprends pas du tout pourquoi il n'encode pas la ref_recette qui je le rappelle est un simple numérique.

Merci d'avance.

beegeezzz

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Fais un test :
Place ton curseur de souris sur la ligne incriminée et appuies sur F9 pour créer un point d'arrêt.
Lance ton programme et attends qu'il s'arrête sur la ligne.
Survole avec ta souris tes variables pour en connaitre le contenu.
Eventuellement, continue à avancer avec F8 pour n'exécuter qu'une seule ligne à la fois; quelques fois, on est surpris de passer par ici ou par là ... (F5 pour continuer normalement)

Après ton Update, ajoute un DoEvents pour laisser le système respirer, on ne sait jamais.

Vérifie aussi que tu n'as pas de "On Error Resume Next" quelque part (à utiliser avec parcimonie)

Une de ces lignes est en trop ou surchargée :
Tu remets à zéro un champ et tu le réutilises derrière pour y ajouter quelque chose : bizarre et inutile
        rsAjoutIngredient("quantite") = 0
        rsAjoutIngredient("quantite") = rsAjoutIngredient("quantite") + QuantiteDe
Je pense que ceci doit suffire :
        rsAjoutIngredient("quantite") = QuantiteDe

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Salut Jack,

Merci pour ta loooooooooooongue réponse.

J'ai trouvé le problème.

Je passais à la fonction l'ID de la valeur sélectionnée dans la liste déroulante :

Par exemple :

Rouge
Noir
Bleu
Vert

Je choisis bleu, j'envoie 2 (car l'indice commence à zéro) avec ce code :

listRecettes(0).ListIndex

j'envoyais donc 2 à la fonction de mise à jour de la table, 2 n'étant pas l'indice, ça ne fonctionnait pas.

J'ai donc utilisé ceci :
Set rsRecettes BDOuvrirTable("SELECT id FROM recette WHERE id " & listRecettes(0).ItemData(listRecettes(0).ListIndex), True)

listRecettes(0).ItemData(listRecettes(0).ListIndex) m'a donné le bon indice.

Je ne comprends pas bien la différence, mais ça fonctionne.

C'est quoi au juste un DoEvents ?

Encore un grand merci pour ton aide.

beegees