IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

ajout d'enregistrement +


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut ajout d'enregistrement +
    salut à tous!
    j'ai besoin de votre aide à vous tous, merci.
    je réalise une application sur la gestion des stocks dans une entreprise. je fais mon application sur visual basic via access. Dans cette application je dois gerer du materiel et des fournisseur qui livre ce materiel. Dans ce cas j'ai déclaré 3 tables: materiel, fournisseur, livrer.
    Dans materiel j'ai: num_materiel, nom_materiel, reference, type, stock.
    dans fournisseur j'ai : num_four, nom, telephone, fax, ville
    dans livrer j'ai: num_materiel, num_four, date_livraison
    Donc dans ce cas si on fait une requête sur materiel, fournisseur, et livrer, on doit pouvoir afficher les fournisseurs qui ont fournis du materiel.

    Le problème c'est que lors de l'enregistrement d'un nouveau materiel, si le fournisseur qui le livre est déjà enregistré dans la base, comment faire pour ne pas l'ajouter dans la liste des fournisseurs mais plutot rentrer le materiel qu'il a livré, et lorsque je vais applelé mes trois tables, je pourrais bel et bien voir que c'est le fournisseur(celui que je n'ai pas rajouté dans la base) qui l'a livré.
    Le code que j'ai reussi a faire est celui-là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    Set cn = OpenDatabase(App.Path & "\DSI.mdb")
    Set rs = cn.OpenRecordset("materiel")
     
    rs.AddNew
     
    rs("designation") = designation.Text
    rs("numero_serie") = serie.Text
    rs("nom_materiel") = passif.Text
    rs("type") = Combo1.Text
    rs("reference") = reference.Text
    rs("stock") = stock.Text
    rs("marque") = marque.Text
    rs("prix_ht") = prix.Text
    ' je recupère le num_materiel pour l'ajouter dans la table fournir
    no_materiel = rs("num_materiel")
     
    rs.Update
     
    Set rs = cn.OpenRecordset("fournisseur")
    ' si le nom que je vais mettre est déjà enregistré dans la base de donnée alors je recupère seulement son numero et je n'ajoute pas son nom
    If LCase(fournisseur.Text) = LCase(rs("nom_fournisseur")) Then
    no_fournisseur = rs("num_fournisseur")
     
    Else
    ' s'il son nom n'est pas à enregistrer alors là je peux enregistrer tous ces champs
    rs.AddNew
     
    rs("nom_fournisseur") = fournisseur.Text
    rs("telephone") = telephone.Text
    rs("fax") = fax.Text
    rs("ville") = ville.Text
    rs("email") = email.Text
    rs("site") = site.Text
    no_fournisseur = rs("num_fournisseur")
     
    rs.Update
     
    End If
     
    Set rs = cn.OpenRecordset("fournir")
    ' j'ajoute dans la table fournir
    rs.AddNew
     
    rs("num_fournisseur") = no_fournisseur
    rs("num_materiel") = no_materiel
     
     
    rs.Update
    Ce code fonctionne, mais le problème est que ça reconnait que le 1er enregistrement. Au bout du 2eme il ne fait plus de comparaison de nom
    Merci!

  2. #2
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    J'ai rien compris

    Tu veux dire que si tu utilises ton code dux fois il n'évalue pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LCase(fournisseur.Text) = LCase(rs("nom_fournisseur")) Then
    ?????

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    non c'est pas du tout ça. ça veut dire que si on n'a deux fournisseur déjà enregistré dans la base. il ne va reconnaitre que le nom du premier fournisseur. en d'autres termes si j'essaye de rajouter le nom du fournisseur qui est enrégistré en 1ere position dans la base, il va faire la comparaison va executer le code et ne va pas rajouter son nom, mais par contre si j'essaye avec le 2eme nom. il va outrepasser la comparaison et va quand meme rajouter le nom de celui-ci

  4. #4
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    ah oui, ca c'est normal puisque tu ne fais pas de find sur le recordset des fournisseurs

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    un find? j'ai encore essayé avec une boucle tant que du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    While rs.EOF
    If LCase(fournisseur.Text) = LCase(rs("nom_fournisseur")) Then
    no_fournisseur = rs("num_fournisseur")
    End If
    rs.MoveNext
    Wend
    mais là j'ai eu des bugs. peux tu me montrer comment on n'utilise le find? stp

  6. #6
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set rs = cn.OpenRecordset("fournisseur")
    With rs
       .FindFirst fournisseur.Text
       If .NoMatch Then
          'code le fournisseur n'existe pas
       Else
          'code le fournisseur existe
       End If
    End With

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    et là j'ai un message d'erreur :on me dit opération non autorisé pour ce type d'objet

  8. #8
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    il faut ouvrir le recordset en snapshot ou en dynaset

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    excuse moi de dire ça. mais pour moi ça ressemble a du chinois, j'ai jamais entendu parler ni essayer. si tu me montraot comment on n'execute cela je serai vraiment content
    merci

  10. #10
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    il suffit de lire l'aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = cn.OpenRecordset("fournisseur",dbOpenSnapshot)

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    ça ne passe toujours pas, on me dis que le contenu de fournisseur.text n'est pas reconnu

  12. #12
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    c'est quoi le message et le numéro d'erreur ?

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    numero 3070 le message est: le moteur de la base de données microsft jet ne reconnait pas 'contenudefournisseur.text' en tant que nom de champs ou expression correct. l'ami essaye un peu de voir le code là et tu me dis qu'est qui ne va pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Set cn = OpenDatabase(App.Path & "\DSI.mdb")
    Set rs = cn.OpenRecordset("fournisseur")
     
    If LCase(fournisseur.Text) <> LCase(rs("nom_fournisseur")) Then
     
    rs.AddNew
     
    rs("nom_fournisseur") = fournisseur.Text
    rs("telephone") = telephone.Text
    rs("fax") = fax.Text
    rs("ville") = ville.Text
    rs("email") = email.Text
    rs("site") = site.Text
    no_fournisseur = rs("num_fournisseur")
     
    rs.Update
     
    Else
     
    While rs.EOF
    If LCase(fournisseur.Text) = LCase(rs("nom_fournisseur")) Then
    no_fournisseur = rs("num_fournisseur")
    End If
    rs.MoveNext
    Wend
     
    End If
     
    Set rs = cn.OpenRecordset("fournir")
    rs.AddNew
     
    rs("num_fournisseur") = no_fournisseur
    rs("num_materiel") = no_materiel
     
    rs.Update
    pourtant avec j'ai une lecture complète de la table.
    Mais là j'ai un message qui dit: vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table materiel et on plus il ajoute toujours le materiel que j'ai rentré mais qui est déjà enregistré dans la base de données

  14. #14
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    il est curieux ce code. Tu fais un AddNew avant d'avoir vérifier dans toute la table si le fournisseur n'existe pas.

    Pour le findfirst, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .FindFirst "nom_fournisseur= '" & strCountry & "'" & fournisseur.Text
    enfin tu as peut être un problême de relation si le num_materiel n'existe pas quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rs.AddNew 
     
    rs("num_fournisseur") = no_fournisseur 
    rs("num_materiel") = no_materiel 
     
    rs.Update

  15. #15
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    qu'est ce que tu me propose. pour la verification avant le addnew

  16. #16
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    J'attends toujours une reponse de votre part

  17. #17
    Membre éprouvé
    Avatar de ridan
    Inscrit en
    Avril 2003
    Messages
    710
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2003
    Messages : 710
    Points : 1 126
    Points
    1 126
    Par défaut
    Salut,

    Si la méthode findfirst ne te plait pas, tu peux essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        Set cn = OpenDatabase(App.Path + "\DSI.mdb")
        Set rs = cn.OpenRecordset("select * from fournisseur where nom = '" & fournisseur.Text & "'")
        If Not rs.EOF Then
            'Le fournisseur existe déjà
            MsgBox "Le fournisseur existe déjà"
        Else
            'Ajout du nouveau fournisseur
            rs.AddNew
     
            rs("nom_fournisseur") = fournisseur.Text
            rs("telephone") = telephone.Text
            rs("fax") = fax.Text
            rs("ville") = ville.Text
            rs("email") = email.Text
            rs("site") = site.Text
            no_fournisseur = rs("num_fournisseur")
     
            rs.Update
        End If
    N'hésite pas à consulter les cours & tutoriels sur le site :

    http://vb.developpez.com/cours/
    @ bientôt

    :: Ressources VB : Cours | FAQ | Sources et surtout La recherche sur le forum

    :: Pour un forum plus propre ...

  18. #18
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Merci je sans que je suis dans la bonne voie. je vous ferais signe pour vous prevenir ce qui ne va pas

  19. #19
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Je vous remercie enormement ça passe comme sur des roulettes.
    mais pouvez vous me dire pourquoi mon code ne passait pas. pourtant quand je l'analyse je constate qu'il n'a pas de problème. svp dites moi qu'est ce qui ne vas pas

  20. #20
    Membre éprouvé
    Avatar de ridan
    Inscrit en
    Avril 2003
    Messages
    710
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2003
    Messages : 710
    Points : 1 126
    Points
    1 126
    Par défaut
    Dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = cn.OpenRecordset("fournisseur")
    Là, ton recordset pointe sur le premier enregistrement (première ligne de la table fournisseur), or dans ton cas il faut tester sur tous les enregistrements juqu'à trouver (ou non) le fournisseur. Pour cela, il existe deux solutions :

    + FindFirst : proposée par bidou
    + Tester avec une requête

    Bon courage

    P.S : Un petit click sur le bouton résolu en bas à gauche
    @ bientôt

    :: Ressources VB : Cours | FAQ | Sources et surtout La recherche sur le forum

    :: Pour un forum plus propre ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/10/2005, 13h46
  2. Réponses: 3
    Dernier message: 11/10/2005, 19h13
  3. ajouter un enregistrement en vba
    Par xtaze dans le forum Access
    Réponses: 4
    Dernier message: 13/06/2005, 20h30
  4. [MFC]CRecordset-Ajouter un enregistrement
    Par dum's dans le forum MFC
    Réponses: 1
    Dernier message: 01/06/2005, 14h20
  5. SQL et Access : ajouter plusieurs enregistrements
    Par Bernard M dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/04/2004, 21h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo