Modification et enregistrement

spamito Messages postés 183 Date d'inscription samedi 24 mars 2007 Statut Membre Dernière intervention 30 mars 2013 - 21 juin 2008 à 10:32
JPGVB Messages postés 96 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 10 mars 2011 - 21 juin 2008 à 16:19
Bonjour,

J'ai créé un seul bouton capable d'enregistrer et de modifier les données. J'ai réalisé un code pour le faire mais cela ne marche pas.
Pouviez-vous m'aider ? Voici mon code :




Private Sub Command3_Click()If medic(1) "" Or medic(2) "" Or medic(3) = "" Then
MsgBox "Veuillez remplir tous les champs", vbCritical, "ATTENTION"
Exit Sub
End If
Set cn = New Connection
cn.Provider = "microsoft.jet.oledb.4.0"
cn.Mode = adModeReadWrite
cn.ConnectionString = "File name=" & App.Path & "\CONNECT.udl"
cn.Open

req = "SELECT * FROM t_medicament;"

Set rs = New Recordset
rs.Open req, cn, adOpenDynamic, adLockOptimistic

If medic(0).Text = rs!code_medicament Then
    GoTo edit
End If

rs.AddNew
rs!code_medicament = medic(0)
rs!libelle_medicament = medic(1)
rs!famille = medic(2)
rs!forme = medic(3)
rs.Update
rs.Requery
MsgBox "Enregistrement effectué avec succès", vbInformation, "OPERATION EFFECTUEE"
vider

edit:
    k = MsgBox("Voulez-vous vraiment modifier cet enregistrement ?", vbYesNo, "INFORMATION")
        If k = 6 Then
            rs!code_medicament = medic(0)
            rs!libelle_medicament = medic(1)
            rs!famille = medic(2)
            rs!forme = medic(3)
            rs.Update
            rs.Requery
            MsgBox "Modification effectuée avec succès", vbInformation, "OPERATION EFFECTUEE"
            vider
        End If
cn.Close
End Sub

1 réponse

JPGVB Messages postés 96 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 10 mars 2011 2
21 juin 2008 à 16:19
Bonjour, à priori il me semble reperer deux pb:
quand tu fais req = "SELECT * FROM t_medicament;" tu extrais la liste de tous les médicaments, tu ne peux pas comparer une table à un enregistrement quand tu fais
If medic(0).Text = rs!code_medicament Then
il faut plutot faire qqchose du genrereq "SELECT * FROM t_medicament WHERE code_medicament" & medic(0)
(mettre medic(0) entre ' si il s'agit d'une zone de texte)
ensuite si le resultat de ta requete est vide, tu passes en mode ajout, si tu as un résultat positif (rs.recordcount=1) tu peux passer en mode modification.

Par ailleurs evite goto, c'est une source d'erreurs : dans ton exemple: si medic(0).Text <> rs!code_medicament alors tu effectues d'abord le code du bloc addnew, puis tu passes dans edit ? est-ce volontaire.
Il est plus simple d'utiliser une structure de type
if medic(0).Text = rs!code_medicament then
   
else
   
end if

Evite d'utiliser EDIT comme nom d'étiquette c'est un mot clé reservé. 

Bon WE.
0
Rejoignez-nous