Petit problème

Résolu
omartt Messages postés 83 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 3 août 2013 - 29 juin 2010 à 10:29
omartt Messages postés 83 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 3 août 2013 - 29 juin 2010 à 15:22
Bonjour à tous,
En dépit du fait que je suis débutant en matiére de programmation,je suis sur le point de développer une petite application. Mais malheureusement je rencontre pour l'instant un petit problème.
Mon application est lier à une base de donnée access.
Sur ma feuille j'ai un 'cmd-ajouter' dont le code est le suivant:

Private Sub ajouter_Click()Set Rs = New ADODB.Recordset
 If Text1 <> "" Then
    Rs.Open "select * from patient ", DB, adOpenDynamic, adLockOptimistic
        Rs.AddNew
            Rs!Nom = Text1.Text
            Rs!Prenom = Text2.Text
            Rs!somme = Text3.Text
            Rs!verse1 = Text4.Text
            Rs!verse2 = Text5.Text
            Rs!verse3 = Text6.Text
            Rs!reste = Text7.Text
Rs.Update
End If
End Sub

Et j'ai aussi un 'cmd-update' dont le code est le suivant:
Private Sub update_Click()
If Text1.Text <> "" Then
   Set Rs = New ADODB.Recordset
Rs.Open "select * from patient where nom='" _
       & Text1.Text & "'", DB, adOpenDynamic, adLockOptimistic
      If Not Rs.BOF Then
            Rs!Nom = Text1.Text
            Rs!Prenom = Text2.Text
            Rs!somme = Text3.Text
            Rs!verse1 = Text4.Text
            Rs!verse2 = Text5.Text
            Rs!verse3 = Text6.Text
            Rs!reste = Text7.Text
Rs.Update
    Else
     Rs.AddNew
Rs!Nom = Text1.Text
            Rs!Prenom = Text2.Text
            Rs!somme = Text3.Text
            Rs!verse1 = Text4.Text
            Rs!verse2 = Text5.Text
            Rs!verse3 = Text6.Text
            Rs!reste = Text7.Text
Rs.Update
 Exit Sub
 End If
    Rs.MoveNext
   
 End If
End Sub

Tout va bien avec ces deux codes sauf s'il sagit de deux noms qui se ressemble.
Si par exemple j'ajoute un nom 'x' avec prénom 'y'et puis j'ajoute un autre nom 'x' avec prénom 'z' tous se pase bien avec le 'cmd-ajouter'. Mais lorsque je voudrais entrer des nouvelle donnés et je me sert du 'cmd-update' pour enregistrer les nouvelle données le prénom 'z' devient 'y'.
Je vous serais trés reconnaissant et trés heureux si vous m'aidiez à résoudre ce problème.
Merci à tous

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 juin 2010 à 13:03
Salut
En effet : Quand tu fais le update_Click, tu charges les fiches dont le nom est 'x', mais tu ne précises pas le prénom, donc normal qu'il écrase la fiche avec le prénom 'y' existant par le prénom 'z'.
Il faut compléter ta requète de chargement :
Rs.Open "select * from patient " & _
        " where nom    = '" & Text1.Text & "' " & _
        "   and prenom = '" & TextBoxPrenom.Text & "'", _
        DB, adOpenDynamic, adLockOptimistic

Pour l'insertion d'une nouvelle fiche avec ajouter_Click, il faut aussi charger les fiches portant ce nom et prénom.
S'il trouve (au moins) une fiche, tu ne devras pas pouvoir créer de nouvelle fiche avec ces mêmes noms et prénoms :
    ' même requete que si dessus
    Rs.Open "select * from patient " & _
        " where nom    = '" & Text1.Text & "' " & _
        "   and prenom = '" & TextBoxPrenom.Text & "'", _
        DB, adOpenDynamic, adLockOptimistic
    If Rs.RecordCount > 0 Then
        MsgBox "Fiche existante. Impossible de créer."
    Else
        Rs.Close
        ' Charge toute la table
        Rs.Open "select * from patient ", _
                DB, adOpenDynamic, adLockOptimistic
        Rs.AddNew
            Rs!Nom = Text1.Text
            Rs!Prenom = Text2.Text
            Rs!somme = Text3.Text
            Rs!verse1 = Text4.Text
            Rs!verse2 = Text5.Text
            Rs!verse3 = Text6.Text
            Rs!reste = Text7.Text
       Rs.Update
    End If

D'autre part : Dans ta DB, quels sont les champs primaires = les clés ?
Que va t-il se passer si tu as deux patients portant les mêmes noms et prénoms ?

Précaution : Dans ta requète, tu écris (exemple) :
" where nom = '" & Text1.Text & "' " & _
Si ta TextBox contient Toto, la chaine équivalente ressemblera à ceci :
where nom = 'Toto' " & _
Problème auquel il faut faire attention :
Si le nom comporte lui même une apostrophe ', comme par exemple N'Guyen, la chaine équivalente va ressembler à ceci :
where nom = 'N'Guyen' " & _
Et ça, ça va provoquer une erreur car le nombre d'apostrophe ' est impair.
Pour y remédier, il suffit de doubler le nombre d'apostrophe :
    Dim sNom As String
    sNom = Replace(TextBox1.Text, "'", "''")
et remplacer la TextBox1.Text par sNom dans la requète :
where nom = '" & sNom & "' " & _

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)
3
omartt Messages postés 83 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 3 août 2013
29 juin 2010 à 15:22
Je ne sais vraiment comment te remercier jack
Je suis maintenant lhomme le plus heureux du monde aprés avoir résolu ce problème et c'ést grace à toi jack
Que Dieu te benisse.
Grand merci
0
Rejoignez-nous