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

Modélisation Discussion :

regrouper les informations de plusieurs dorsales en une dorsale mère. [AC-2013]


Sujet :

Modélisation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de bertiny
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 282
    Points : 1 831
    Points
    1 831
    Billets dans le blog
    1
    Par défaut regrouper les informations de plusieurs dorsales en une dorsale mère.
    Bonjour
    J'ai un problème très urgent sous la main. Certainement ce problème a déjà été débattu dans ce forum mais c'est une question de temps qui me presse.

    Je vais essayer d'être plus précis.

    J'ai créé une application que j'ai installé dans différentes régions. Ces applications sont identiques et ont une base de données identique aussi. L'utilisateur de la région enregistrer un grand nombre d'informations. Après cet enregistrement il est question de copier la dorsale et de la renvoyer au ministère pour faire la synthèse. Autrement dit de récupérer les informations de chaque dorsale apportée afin de les regrouper dans une seule base de données. Cette base de données mère est identique (les mêmes tables) que les dorsales apportées.

    Je voudrais donc, s'il existe un moyen facile, d'avoir toutes ces informations dans une seule base de données.
    Le monde évolue et nous avec. La technologie change les idées de ceux qui s'intéressent et pensent qu'il est nécessaire de changer.
    Oh là!! Que c'est bien de trouver la solution à un problème

    Pensons à améliorer nos connaissances en toute humilité car on apprend tous tous les jours !!!

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    voici une approche
    il faut gérer 3 choses: l'intégration des bases, la liaison des tables et le chargement des données

    pour l'intégration des bases, soit tu les rapatries dans le même répertoire et elles ont un nom différent, soit tu les rapatries dans des sous-répertoires différents (préconisé).
    comme ces bases locales ont la même structure, il faudra les charger une à une dans la base centrale
    pour charger une base, tu te crées une base client avec 2 tables
    - Tables des Bases : ID, Description, Sous Répertoire
    - Tables des Table: ID, Nom de la table

    Pour l'intégration des données, il te faut une tables de regroupement pour chaque table locale, cette tables comprend les même champs que la table locale plus 2 champs: IDBase (qui vient de la table des bases) et un ID local (Autonumber)
    note que si ta base locale contient un Autonumber il faudra changer le type du champ dans la base centrale
    les liaisons d'intégrité doivent être adaptées dans la base centrale

    Il te faut aussi pour chacune des tables locale une requête de chargement pour la création des nouveaux record, et une requête de mise à jour pour prendre en compte les modifications locales des record déjà présents en central

    Ensuite tu crées un formulaire pour déclencher un chargement d'une base à partir de tblClientBase, ça déclenche un code VBA pour effacer les tables liées existantes puis lier les tables de la base locale sélectionnée puis lancer les requêtes.

  3. #3
    Modérateur
    Avatar de bertiny
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 282
    Points : 1 831
    Points
    1 831
    Billets dans le blog
    1
    Par défaut
    Bonjour et merci pour votre réponse rapide.
    Juste quelques questions.

    1-A quoi me servira la base client que je dois créer car j'ai déjà une base mère qui doit recevoir les données de chaque base reçue?

    2-Puis-je avoir plus d'informations sur
    Pour l'intégration des données, il te faut une tables de regroupement pour chaque table locale, cette tables comprend les même champs que la table locale plus 2 champs: IDBase (qui vient de la table des bases) et un ID local (Autonumber)
    3-N'y a-t-il pas plus simple que ce qui suit car le temps presse et que pour pondre un bon code vba il faut du temps.
    Ensuite tu crées un formulaire pour déclencher un chargement d'une base à partir de tblClientBase, ça déclenche un code VBA pour effacer les tables liées existantes puis lier les tables de la base locale sélectionnée puis lancer les requêtes.
    Cordialement.
    Le monde évolue et nous avec. La technologie change les idées de ceux qui s'intéressent et pensent qu'il est nécessaire de changer.
    Oh là!! Que c'est bien de trouver la solution à un problème

    Pensons à améliorer nos connaissances en toute humilité car on apprend tous tous les jours !!!

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    1) je me suis mal exprimé, ma base client c'est ta base mère

    2) si ta table locale comprend les champs No (Autonumber), Description, Attributs1,2,3,4
    ta table mère comprendra ID (Autonumber), NoBaseLocale, et les champs de la table locale: No (Number), Description, Attributs1,2,3,4
    c'est à dire 2 champs en plus

    3) ci joint du code pour faire tes liaisons
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    Private Sub SupprimerLesTablesLiées()
    Dim tb As DAO.TableDef
    Dim rst As DAO.Recordset
    Exit Sub
     
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM Tbl_Connection_Table", dbOpenSnapshot)
    While Not rst.EOF
        For Each tb In CurrentDb.TableDefs
            If tb.Name = rst("Table") Then
                DoCmd.RunSQL "DROP TABLE [" & tb.Name & "] ;"
            End If
        Next tb
        rst.MoveNext
    Wend
    Set tb = Nothing
    rst.Close: Set rst = Nothing
    End Sub
     
     
     
    Public Function MS_Connection_Refresh() As Boolean
    Dim rst As DAO.Recordset
    Dim rst2 As DAO.Recordset
    Dim MonChemin As String
    Exit Function
     
        MS_Connection_Refresh = True
        Call SupprimerLesTablesLiées
        DoCmd.RunSQL "Update Tbl_Connection set UnSuccess=False"
        Set rst = CurrentDb.OpenRecordset("SELECT * FROM Tbl_Connection", dbOpenSnapshot)
        While Not rst.EOF
            If Left(rst("Path"), 2) = ".\" Then
                MonChemin = CurrentProject.Path & Right(rst("Path"), Len(rst("Path")) - 1)
            Else
                MonChemin = rst("Path")
            End If
            If existeFileFSO(MonChemin) Then
                Set rst2 = CurrentDb.OpenRecordset("SELECT * FROM Tbl_Connection_Table WHERE Connection=" & rst("ID"), dbOpenSnapshot)
                While Not rst2.EOF
                    Call MS_LinkOneTable(MonChemin, rst2("Table"))
                    rst2.MoveNext
                Wend
            Else
                DoCmd.RunSQL "Update Tbl_Connection set UnSuccess=True WHERE ID=" & rst("ID")
                'MsgBox "files not found: " & MonChemin
                MS_Connection_Refresh = False
            End If
            rst.MoveNext
        Wend
    End Function
     
     
    Public Function existeFileFSO(ByVal Fichier As String) As Boolean
    Dim FS As FileSystemObject
    Set FS = CreateObject("Scripting.FileSystemObject")
        existeFileFSO = FS.FileExists(Fichier)
    Set FS = Nothing
    End Function
     
     
    Public Sub MS_LinkOneTable(MonChemin As String, MyTable As String)
    Dim strMotPasse As String
    Dim strCheminBd As String
    Dim strConnect As String
    Dim strNomsTables() As String
    Dim strTemp As String
    Dim i As Integer
    Dim oDb As DAO.Database
    Dim oDbSource As DAO.Database
    Dim oTbl As DAO.TableDef
    Dim oTblSource As DAO.TableDef
     
     
    strMotPasse = "pass"
    strCheminBd = MonChemin
     
    'Définit la chaine de connexion permettant la liaison des tables
    strConnect = "MS Access;pwd=" & strMotPasse & ";DATABASE=" & strCheminBd
     
    'Instancie l'objet Database de la base courante
    Set oDb = CurrentDb
     
    'Instancie l'objet Database de la base protégée
    Set oDbSource = DBEngine.OpenDatabase(strCheminBd, True, True, strConnect)
     
    'Parcours l'ensemble des tables de la base de données protégée
    'et stocke leur nom
    For Each oTblSource In oDbSource.TableDefs
        If (oTblSource.Attributes And dbSystemObject) = 0 Then
            If Len(oTblSource.Connect) = 0 Then
                strTemp = strTemp & oTblSource.Name & "|"
            End If
        End If
    Next
     
    'Ferme la base de données sources (impératif pour la liaison)
    oDbSource.Close: Set oDbSource = Nothing
     
    'parcours le tableau de noms de tables
    strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
    For i = 0 To UBound(strNomsTables)
    '    MsgBox strNomsTables(i)
        If strNomsTables(i) = MyTable Then
    '    If Left(strNomsTables(i), 3) = MonPrefixe Then
            'Crée une nouvelle table dans la base de données courante
            Set oTbl = oDb.CreateTableDef(strNomsTables(i))
            'Lie les deux tables
            oTbl.Connect = strConnect
            oTbl.SourceTableName = strNomsTables(i)
            'Ajoute la table à la base de données
            oDb.TableDefs.Append oTbl
        End If
    Next i
    'Rafraichit la liste des tables
    oDb.TableDefs.Refresh
     
    End Sub

  5. #5
    Modérateur
    Avatar de bertiny
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 282
    Points : 1 831
    Points
    1 831
    Billets dans le blog
    1
    Par défaut
    Je vais regarder çà de plus près.
    Juste une question avant de m'y lancer.
    Si j'ai un utilisateur qui a saisie dans la table T_A
    Nu Con sta
    1 AB BC
    2 AA BD
    Et un autre a saisie dans la même table (bien évidemment dans des bases différentes)
    Nu Con sta
    1 PM SS
    2 PN OD
    Est-ce qu'au finale dans la base de données mère j'aurai dans la table T_A?
    Nubase Nu Con sta
    1 1 AB BC
    1 2 AA BD
    2 1 PM SS
    2 2 PN OD

    Et ceci est un exemple dans l'une des tables de la BD parmi n.
    Le monde évolue et nous avec. La technologie change les idées de ceux qui s'intéressent et pensent qu'il est nécessaire de changer.
    Oh là!! Que c'est bien de trouver la solution à un problème

    Pensons à améliorer nos connaissances en toute humilité car on apprend tous tous les jours !!!

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    À peu près, tu devrais avoir quelque chose comme

    ID Nubase Nu Con sta
    1 X 1 AB BC
    2 X 2 AA BD
    3 Y 1 PM SS
    4 Y 2 PN OD

    ID est un NumAuto

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

Discussions similaires

  1. [XL-2013] Regrouper les colones de plusieurs fichiers dans une meme feuille
    Par The bagel Analyst dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/08/2016, 17h18
  2. [AC-2010] Requête: Rassembler les informations de plusieurs lignes en une seule
    Par albayt dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 21/11/2013, 22h05
  3. [SQL2005] Regrouper les données de plusieurs bases dans une seule
    Par oliviera63 dans le forum Développement
    Réponses: 7
    Dernier message: 07/02/2012, 10h40
  4. Regrouper les données de plusieurs feuilles dans une
    Par djinero dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/10/2011, 23h47
  5. Réponses: 7
    Dernier message: 06/03/2009, 17h35

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