begin process at 2008 08 22 01:46:38
1 229 747 membres
19 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Probleme ecriture sur base de données [ Base de données / ADO & DAO ] (Plazadel62)

Probleme ecriture sur base de données le 18/03/2007 15:55:21

Plazadel62

Bonjour à toutes et à tous !

Voila j'ai un probleme : je dois concevoir un logiciel sous VB 6.0 capable de gerrer une base de données contenant les infos sur une série de films. J'ai tout codé mais j'ai toujours le même probleme : rien ne s'ajoute à ma base ni se modifie. J'ai des erreurs du type 3201 qui m'informent du fait que je ne peux pas écrire sur la base car elle comprend des enregistrements connexes.

Car en fait sur ma base de donnée je joue avec la table [Présentation des films] et [Acteurs principaux].

La table [Présentation des films] est composée de :
               TITRE
               GENRE
               ANNEE
               PAYS
               REALISATEUR
               ACTEUR PRINCIPAL
               OSCAR
               NBRE ENTREE

La table [Acteurs principaux] est composée de :
               NOM
               PRENOM
               NAISSANCE
               NATIONALITE
               NBRE FILMS



Voici ma fonction Ajouter un film, qui ne fonctionne pas car n'écrit rien dans la base :


Private Sub Command2_Click() 'C'est le bouton "Ajouter"

If Text1.Text = "" Then

    rep = MsgBox("Vous n'avez pas saisi le titre du film !", vbCritical, "Erreur")
   
End If

   
        If Check1.Value = 1 Then 'Si on choisi d'enregistrer également un acteur
       
            Set db = OpenDatabase("C:\\Program Files\\Microsoft Visual Studio\\VB98\\Mes Projets\\Gestion de films\\Vidéo2002.mdb")
            SQL = "select * from [Présentation des films]"
            Set rs = db.OpenRecordset(SQL, dbOpenDynaset)
           
            'Ajout d'un enregistrement
            rs.AddNew
           
            'On rempli à présent l'enregistrement précédemment créé :
            rs.Fields("TITRE") = Text1.Text
            rs.Fields("GENRE") = ComboGenre.Text
           
            annee = ("01/01/" & ComboAnnee.Text)
            rs.Fields("ANNEE") = annee
            rs.Fields("PAYS") = ComboPays.Text
            rs.Fields("REALISATEUR") = Text2.Text
            rs.Fields("ACTEUR PRINCIPAL") = Text3.Text
            rs.Fields("ENTREES (en millions)") = Val(Text4.Text)
            rs.Fields("RESUME") = Text8.Text
           
            'Gestion des deux OptionButton pour l'oscar :
                    If Option1.Value = True Then
                        rs.Fields("OSCAR") = True
                    ElseIf Option2.Value = True Then
                        rs.Fields("OSCAR") = False
                    End If
           
           
            rs.Close
            Set rs = Nothing
           
           
           
            'Enregistrement de l'acteur
           
            SQL2 = "select * from [Acteurs principaux]"
            Set rs2 = db.OpenRecordset(SQL2, dbOpenDynaset)
               
                    'Contrôle si l'acteur existe déjà
                    While Not rs2.EOF
                        If rs2.Fields("NOM") = Text3.Text Then
                            existe = True
                        End If
                   
                        rs2.MoveNext
                    Wend
                   
            If existe = True Then 'L'acteur existe
                    rep = MsgBox("L'acteur existe déjà !", vbDefaultButton1, "Attention")
            Else
                    rs2.AddNew
               
                    rs2.Fields("NOM") = Text3.Text
                    rs2.Fields("PRENOM") = Text6.Text
                    rs2.Fields("NAISSANCE") = Text9.Text
                    rs2.Fields("NATIONALITE") = Combo4.Text
                    rs2.Fields("NBRE FILMS") = Text7.Text
                   
                    rs2.Update
                    rs2.Close
                   
                    Set rs2 = Nothing
               
            End If
               
                db.Close

Form3.Hide
Form1.List1.Refresh

End If
End Sub




En éspérant que vous puissiez m'aider, merci d'avance


Re : Probleme ecriture sur base de données le 18/03/2007 17:35:01

chaibat05

Bonjour,
l' erreur vient du fait que tu tentes d' ajouter un Titre dont
l' acteur principal n' éxiste pas encore
(contrainte d' une liaison certaine)
Solution:
Inverses le traitement.
 commence par ajouter l' acteur (s' il n' existe pas encore bien sûr)
ensuite ajoutes le film.

Remarque:
Dans la procédure
'Contrôle si l'acteur existe déjà
                    While Not rs2.EOF
                        If rs2.Fields("NOM") = Text3.Text Then
                            existe = True
                            Exit Do ' pas la peine de continuer
                       End If
                   
                        rs2.MoveNext
                    Wend


Re : Probleme ecriture sur base de données le 18/03/2007 17:52:30

Plazadel62
Merci pour la réponse!
J'avai déjà en effet procédé à cette inversion mais uniquement dans mon "Modifier un film" donc au moins c'est rétabli dans le "Ajouter un film"
Cependant, même si l'erreur est résolue (dieu merci) le film ne s'ajoute toujours pas dans la base de donnée même apès rafraichissement de cette derniere... et j'ai le même probleme pour le "Modifier" donc j'ai du mal rédiger quelque chose..

Re : Probleme ecriture sur base de données le 18/03/2007 18:20:18

chaibat05
c' est parce que tu as oublié un rs.Update
 dans la procédure Ajout d' un film

Re : Probleme ecriture sur base de données le 18/03/2007 18:40:09

Plazadel62
AHHHH.... ça fonctionne ! =)
Merci ! Je vais enfin pouvoir me concentrer sur le modifier... ça devrait pouvoir fonctionner avec ce que tu viens de me dire !
Bonne soirée!! et merci =)

Re : Probleme ecriture sur base de données le 18/03/2007 19:01:07

chaibat05

Bien, bien...!
un conseil cependant...
Pour le champ Acteur principal, au lieu d' un TextBox
choisis un ComboBox que tu rempli à partir de ta table Acteurs

Ainsi, l' utilisateur pourra en sélectionner un.
Avantages :
 
1° Tu es sûr que l' acteur éxiste
     
 2 ° Pas d' erreur possible sur l' orthographe du Nom

Mais prévois tout de même une procédure Ajouter un
nouvel acteur au cas ou il ne figure pas dans la liste

Bonne soirée et bonne continuation...



Classé sous : base, text, fields, rs, rs2

Participer à cet échange

Pub



Appels d'offres

Snippets en rapport

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS