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

VBA Access Discussion :

[VBA-A] liaison entre deux tables


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de lumbroso
    Inscrit en
    Décembre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2003
    Messages : 239
    Points : 79
    Points
    79
    Par défaut [VBA-A] liaison entre deux tables
    bonjour voila mon probleme
    j'ai une table client et une table intervention
    dans la table client est inscrit la reference du client ainsi que le nombre d'heure voulu pour effectue une tache.
    dans l'autre table j'ai entre autre le numero du dossier.
    mon probleme est que dans un formulaire "test" j'ai 3 champs le premier est le champs ou je dois saisir le num client, le second champs est celui ou je dois inscrire le numero dedossier

    est dans le 3 eme champs doit estre inscrit automatiquement le nombre d'heure desire en rapport au num client et a la ref client saisie et ca je ne sais pas le faire ya quel qu'un qui pourrai m'aider ?

  2. #2
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    c'est du sql ça...

    Dans ta table client, y-a-t-il une réf intervention, ou dans intervention une réf Client?
    Xavier

  3. #3
    Membre régulier Avatar de lumbroso
    Inscrit en
    Décembre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2003
    Messages : 239
    Points : 79
    Points
    79
    Par défaut [VBA-A] liaison entre deux tables
    dans ma table client j'ai une ref client et dans ma table intervention j'ai un num intervention une ref dossier et un num client
    je sais que c du sql mais je suis bloque

  4. #4
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    Ca c'est le B-A-BA de la base de données, mais quand on n'en a jamais fait, je conçois que ce sois un peu nébuleux. Je suis précisément en train d'aider un de mes amis qui a le même problème. Le hic, c'est que la "leçon" qui dure une demi-heure quand on est côte à côte sur le même PC, risque de prendre des jours sur un forum tel que celui-ci.

    La solution de ton problème est de faire une requête sur les deux tables de façon à récupérer les infos de chacune, de façon synchronisée. Pour cela, il faut un champ commun aux deux tables (une clé). Par exemple il faudrait que le champ ref client de la table intervention corresponde au champ num client de la table Client - ce qui marquerait déjà une faute d'ergonomie, car il serait fort souhaitable que les deux champs portent le même nom.

    Utilise l'assistant requête d'Access (parce que je suppose que c'est d'Access qu'il s'agit, tu ne le précise même pas !) pour faire une requête. Il faut ajouter les tables à la requête, puis faire un lien entre elles et sélectionner les champs à afficher. Termine en enregistrant la requête (après avoir vérifié qu'elle donne des résultats).

    Ensuite, il reste à lier le formulaire à cette requête au lieu d'une des tables.

    Avant de relancer un appel au secours, consulte l'aide en ligne en cherchant les mots en gras. Et si tu ne trouve toujours pas, je conseille la lecture d'un bon ouvrage d'initiation du genre "Access pour les nuls". Ce genre de truc doit se trouver dans les premières pages...

    Ensuite seulement, reviens sur ce forum en précisant l'environnement : Version de base de données, structure des tables, champs utilisés dans le formulaire, etc.

    Bon courage.

  5. #5
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    essaye un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Client.REfCLient, Intervention.refDossier, Intervention.numClient, Intervention.Heure 
    FROM CLIENT, INTERVENTION
    WHERE Client.REfClient = Intervention.numClient
    AND Intervention.refDossier = 'refDossier'
    AND Client.REFCLIENT = 'refCLient'
    Xavier

  6. #6
    Membre régulier Avatar de lumbroso
    Inscrit en
    Décembre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2003
    Messages : 239
    Points : 79
    Points
    79
    Par défaut [vab - a] liaison entre deux table
    je n'arrive pas a faire ce que je veux je suis entrin de criser je comprend rien
    je rexpliqu emon problème

    j'ai une table client avec tous le renseignement luit concernant à savoir nom, prenom, ref cli,..., nombre d'heure voulues.

    dans une autre table intervention se trouvent numinter, numero de dossier, ref cli,...nombre d'heure voulues.

    dans un formulaire qui se nomme gestion des heures je veux en saisisant un num dossier et une ref cli que le champs nbrheurevoule.txt soit remplie automatiquement par rapport au numero client.


    je suis désespére

  7. #7
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    eh ben, tu fais ta requête, tu récupères le résultat et tu l'affiches dans ta textbox.
    Xavier

  8. #8
    Membre régulier Avatar de lumbroso
    Inscrit en
    Décembre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2003
    Messages : 239
    Points : 79
    Points
    79
    Par défaut [vab - a] liaison entre deux tables
    Asdorve aurais tu un exemple concré faisant resortir mon probleme afain que je puisse l'etudier ?

  9. #9
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    sais-tu déjà faire une requête simple en vb et récupérer le résultat?
    Xavier

  10. #10
    Membre régulier Avatar de lumbroso
    Inscrit en
    Décembre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2003
    Messages : 239
    Points : 79
    Points
    79
    Par défaut [vab - a] liaison entre deux tables
    asdorve voila ce que j'ai recupere d'une aplication que j'airealise su vb mai la j'essai de le mettre en forme en vba a c pas gagne tu peut me filer un coup de main ?
    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
     
    Private Sub txtfour_KeyPress(KeyAscii As Integer)
     
    If KeyAscii = 13 Then
        Set rs = db.OpenRecordset("select [Refournisseur],[Nomfour] from Fournisseur")
        Dim str3, str4 As String
        str3 = "[Refournisseur] = '" & txtfour & "'"
        str4 = txtfour
        rs.FindFirst str3
        If CStr(rs("Refournisseur")) = str4 Then
            txtfour.Text = CStr(rs("Refournisseur"))
            txtnom.Text = CStr(rs("Nomfour"))
            txtnom.Enabled = False
        Else
            MsgBox "Ce fournisseur n'existe pas verifiez votre saisie...", vbCritical, "Erreur de saisie"
            txtfour = ""
            txtnom = ""
            lstfour.Show
        End If
    End If
    End Sub

  11. #11
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Citation Envoyé par jacma
    Bonjour

    Comme moult fois , je rappelle l'existence du provider MS DataShape permettant de créer des recordsets hiérarchiques.

    C'est la meilleurs façon que je connaisse pour traiter les aspects de liaisons hiérarchiques de tout type. De plus, la chaîne SQL est "récupérable" car elle est créée automatiquement par un DataEnvironment doté de d'objets Command hiérarchiques. C'est un bon support pour apprendre à écrire le code et le vérifier. Et je vous rappelle que ceci ce fait simplement par le biais d'une interface graphique, en utilisant une souris. Plus simple, je crois pas...

    A l'utilisation, aucun problème de synchronisation entre les tables parents et enfants. La synchro n'est pas à gérer, c'est le provider Ms DataShape qui s'en charge. Chaque enregistrement parent est lié à tous ses enregistrements enfants, et eux seuls.

    Ainsi, pour une deux tables (Mouvents', la table parent et DetailsMouvement, la table enfant, tu aurais une chaîne SQL comme ci-après. A toi d'adapter avec tes deux propres tables. Il n'y a qu'à modifier les noms (et mettre les guillements), ou mieux, le faire réellement avec un DataEnvironment.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SHAPE {SELECT * FROM `Mouvements`}  AS cmdMouv _ 
    APPEND ({SELECT * FROM `DetailsMouvement`}  AS cmdDetailsMvt _ 
    RELATE 'Num_Mvt' TO 'Num_Mvt') AS cmdDetailsMvt
    Pour plus de renseignements, voir notemment mon praticiel sur les recordsets hiérarchiques, accessible par la signature.
    PS: tu peux t'abstenir des alias, bien qu'ils soient pratiques lors de l'utilisation.

  12. #12
    Membre régulier Avatar de lumbroso
    Inscrit en
    Décembre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2003
    Messages : 239
    Points : 79
    Points
    79
    Par défaut [vab - a] liaison entre deux tables
    salut je e comprend pas trrop bien ce que tu m'as explique enfin j'ai essayer de travailler sur le code si precedament dit et ca ne marche pas quelqu'un pourrai me dire d'ou vien l'erreur

    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
     
    Private Sub txtnumclient_BeforeUpdate(Cancel As Integer)
     
    Dim sql As String
    Dim str3, str4 As String
        rs = "select [Réference client],[Heures voulue] from [Fiche d'identité client];"
        str3 = "[Réference client] = '" & txtnumclient & "'"
        str4 = txtheure
        rs.FindFirst str3
        If CStr(rs("[Réference client]")) = str4 Then
            txtheure.Text = CStr(rs("[Heures voulue]"))
         Else
            MsgBox "Cette référence client n'existe pas verifiez votre saisie...", vbCritical, "Erreur de saisie"
          End If
    End Sub

  13. #13
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    Le problème vient de ce que manifestement rs n'est pas un objet de type recordset, mais une chaine de caractères. De toutes façons, rs n'est même pas déclaré (en tout cas dans ce bout de code).

    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs = "select [Réference client],[Heures voulue] from [Fiche d'identité client];"
    mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim rs as recordset
    ...
    set rs=db.openrecordset("select [Réference client],[Heures voulue] from [Fiche d'identité client];")
    ou encore (puisque la variable sql est déclarée mais non utilisée, autant s'en servir)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim rs as Recordset
    ...
    sql = "select [Réference client],[Heures voulue] from [Fiche d'identité client];"
    set rs=db.openrecordset(sql)
    db est soit la base de données (ouverte précédemment ?) soit, si tu es sous Access, la base courante, qui s'appelle CurrentDb.

    Et prend surtout la bonne habitude de mettre "Option Explicit" en tête de TOUS tes modules. Cela t'évitera ce genre de gag. Il y a une option qui permet que ça se fasse automatiquement à la création des modules de code (dans VB, menu Outils/Options, onglet Editeur, case "Déclaration des variables obligatoire")

  14. #14
    Membre régulier Avatar de lumbroso
    Inscrit en
    Décembre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2003
    Messages : 239
    Points : 79
    Points
    79
    Par défaut [vab - a] liaison entre deux tables
    j'ai une erreur au niveau de la ligne
    message d'erreur:"membres de methodes ou de données introuvable"

    je pense que le mot FidFirst ne fonctionne pas en vba enfin si y a quel qu'un qui sait n'esitez pas

  15. #15
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    La méthode FindFirst n'existe que dans le modèle DAO. Manifestement, le recordset n'est pas reconnu comme tel (le modèle par défaut d'Access est ADO)

    Il suffit de spécifier le modèle DAO en écrivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim rs as DAO.Recordset
    Et si ça coince encore (surement dans la ligne ci-dessus), c'est sans doute que DAO n'est pas déclaré dans les références. Dans ce cas, dans l'éditeur VB, utliser le menu Outils/Références et cocher la ligne Microsoft DAO 3.6 Object Library.

    Ce coup là, il ne devrait plus y avoir d'erreur. Ce qui ne veut pas dire que le code fasse ce que tu veux...

  16. #16
    Membre régulier Avatar de lumbroso
    Inscrit en
    Décembre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2003
    Messages : 239
    Points : 79
    Points
    79
    Par défaut [vab - a] liaison entre deux tables
    merci pour l'info

    en mode pas a pas je trouve ce que je veux mais quand j'execute le code sans interruption(f8) j'obtient le message d'erruer que j'ai écri à savoir
    "ce client n'existe pas..."

    voici le code ai der moi svp
    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
     
     
    Private Sub txtnumclient_BeforeUpdate(Cancel As Integer)
     
    Dim sql As String
    Dim rs As DAO.Recordset
    'If KeyAscii = 13 Then
        Set rs = CurrentDb.OpenRecordset("select [Réference client],[Heures voulue] from [Fiche d'identité client];")
        'rs = "select [Réference client],[Heures voulue] from [Fiche d'identité client];"
        Dim str3, str4 As String
        str3 = "[Réference client] = '" & txtnumclient & "'"
        str4 = txtheure
        rs.FindFirst str3
        If CStr(rs("[Réference client]")) = str3 Then
            Me.txtheure.Value = CStr(rs("[Heures voulue]"))
            'txtnom.Text = CStr(rs("Nomfour"))
            'txtnom.Enabled = False
        Else
            MsgBox "Ce clent n'existe pas verifiez votre saisie...", vbCritical, "Erreur de saisie"
     
        End If
    End Sub

  17. #17
    Membre régulier Avatar de lumbroso
    Inscrit en
    Décembre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2003
    Messages : 239
    Points : 79
    Points
    79
    Par défaut [vab - a] liaison entre deux tables
    en travaillant un peut et en bouquinant sur internet j'ai trouve ma reponse voici le code qui mantenant fonctionne nikel

    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
     
    Dim sql As String
    Dim rs As DAO.Recordset
    On Error GoTo fin
        Set rs = CurrentDb.OpenRecordset("select [Réference client],[Heures voulue] from [Fiche d'identité client];")
          Dim str3, str4 As String
        str3 = "[Réference client] = '" & txtnumclient & "'"
        str4 = txtnumclient
        rs.FindFirst str3
        If rs("[Réference client]") = str4 Then
            Me.txtheure.Value = CStr(rs("[Heures voulue]"))
            'txtnom.Text = CStr(rs("Nomfour"))
            'txtnom.Enabled = False
        Else
            MsgBox "Ce clent n'existe pas verifiez votre saisie...", vbCritical, "Erreur de saisie"
         End If
    fin:
    If Err.Number = 3021 Then
     MsgBox "Ce clent n'existe pas verifiez votre saisie...", vbCritical, "Erreur de saisie"
     
    End If
    End Sub

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

Discussions similaires

  1. [MySQL] Liaison entre deux tables
    Par nikco dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/06/2009, 12h48
  2. [MySQL] Liaison entre deux table et affichage par php
    Par fr3do dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/05/2009, 23h10
  3. Liaison entre deux tables
    Par souhila2007 dans le forum WinDev
    Réponses: 6
    Dernier message: 19/01/2008, 08h06
  4. Probleme de liaison entre deux tables d'une base de donnees
    Par blondelle dans le forum C++Builder
    Réponses: 32
    Dernier message: 12/04/2007, 18h09
  5. Liaison entre deux tables
    Par knoll dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/02/2007, 17h23

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