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.NET Discussion :

Importe une base Access et la mettre dans une base Access identique.


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 254
    Points : 123
    Points
    123
    Par défaut Importe une base Access et la mettre dans une base Access identique.
    Bonjour,

    J’ai une base de donnée Access centrale, et plusieurs bases secondaires (Access), la structure des bases est identique pour la base centrale et secondaires, je veux faire un module qui importe les données des bases secondaires et les mettre dans la base principale, je n’ai aucune idée pour la faire !!

    Merci.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    si les 2 sont accessibles en même temps (dossier partagé par exemple) tu peux alors copier de l'une à l'autre
    sinon il faut exporter les données à importer dans une autre base ou un fichier sur une clé usb par exemple et faire un menu d'import

    si la synchronisation doit se faire souvent, il te faut un mécanisme permettant de savoir ce qui a été modifié, ca éviterra de perdre du temps à copier toute la base dans la nouvelle, mais juste les lignes nécessaires
    par exemple une table avec la liste des modifs (NomTable, CléDeLigne, TypeModif {Ajout, Suppression, Modification})

    ensuite il faut faire un traitement en vb qui lit dans une base, stocke les données dans un tableau, puis insert/update/delete les données dans l'autre base


    sinon il existe surement des mécanismes de synchronisation de base access automatiques
    et il faut aussi réfléchir au sens des données, si des données peuvent être modifiées sur la base centrale, doivent elles redescendre sur les bases secondaires ? une modification sur une base doit elle repartir sur les autres bases (en passant par la centrale) ?
    si les données des bases secondaires sont partagées, que faire lorsque 2 utilisateurs modifie chacun la même ligne sur leur base ?

    bref ce n'est pas forcément trivial selon le cas et il faudrait nous en dire plus
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 254
    Points : 123
    Points
    123
    Par défaut
    merci Pol63, y'a une base propre pour chaque secteur (les bases secondaires), alors les utilisateurs secondaires sont indépendants (chaque utilisateur saisie ses propres données) et dans l'application centrale ses utilisateurs secondaires envoyant ces bases a utilisateur centrale, ce dernier va faire l'importation des données secondaires vers la base principale. au moment de l'importation ces bases seront au local sur le même pc ou se trouve la base centrale, j'ai fait un bouton ou l'utilisateur navigue vers l'emplacement de la base secondaire et je récupère le chemin de la base, je crée un OleDbConnection et j'ai le OleDbConnection de la base centrale, et je pense faire une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into base_centrale.table value (select * from base_secondaire.table)
    et je ne sais pas comment faire une requête entre deux base de donnée?

    Merci.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    si tu veux faire ca en une seule requete, il faut que les bases soient liées
    dans access on peut faire des tables liées (tables qui viennent d'une autre base)

    sinon pourquoi ne pas utiliser un sql server express (gratuit et plus performant qu'access) sur le central, qui lui permet plus facilement d'intégrer des données d'une autre base en une seule requete ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 254
    Points : 123
    Points
    123
    Par défaut
    merci Pol63,

    mais l'emplacement de la base secondaire n'est pas fixe pour lié les bases.
    et pour Access c'est le client qui exige Access.
    est ce que c'est possible par Merci.

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    sur sql server il est possible de faire une créer une liaison par le code, et donc de la rendre temporaire avec le chemin actuel du ficher
    pour access je ne sais pas trop, il faudrait demander sur le forum access ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut IMPORTER UNE DATABASE
    Bonjour kika
    si tes tables (bd centrale) ont la meme structure que les tables (bd secteur) c'est une requete Ajout quand les 2 tables à fusionner sont
    1/sur la meme bd ou
    2/ou dans des bd differentes mais le meme PC.

    le code:
    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
     
    Public Class Form1
        Dim cheminBdCentrale As String = "C:\dossier1\BdCentrale.mdb"
        Dim cheminBdSecteur As String = "C:\dossier2\BdSecteur.mdb"
        Dim mdp As String = "kika"
        'ajouter un textbox pour saisir le password pour la bd source (secteur)
        'pas besoin pour la bd destination(bd centrale)
        '
        'Button btnOpenFile
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenFile.Click
            Dim dlg1 As New OpenFileDialog
            'etc....pour recuperer cheminBdCentrale
            Dim dlg2 As New OpenFileDialog
            'etc....pour recuperer cheminBdSecteur 
     
     
        End Sub
     
        Private Sub btnImportData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImportData.Click
            If cheminBdCentrale Is String.Empty Or cheminBdSecteur Is String.Empty Or mdp Is String.Empty Then
                Exit Sub
            End If
     
            Dim AccessConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                                             "Data Source=" & Me.cheminBdCentrale)
     
            AccessConnection.Open()
     
            Dim AccessCommand As New System.Data.OleDb.OleDbCommand()
            AccessCommand.CommandText = "INSERT INTO [TableBdCentrale] SELECT * FROM [MS Access;DATABASE=" & cheminBdSecteur & ";" & mdp & "].[TableSecteur]"
            AccessCommand.ExecuteNonQuery()
     
            AccessConnection.Close()
        End Sub
    End Class
    - les 2 tables ont le meme champ cle .
    -Select * veut dire tous les champs.
    Si on veut certains champs simplement il faut les taper un à un separes par des virgules en commencant par le champ cle.

    Attention dans ta chaine de connection mettre le chemin d'access complet et ne pas oublier le champs "Pwd" si la bd source(secteur) est dote d'un mdp...

    bon code....

  8. #8
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 254
    Points : 123
    Points
    123
    Par défaut
    Bonjour,
    Merci MABROUKI,
    1. mes tables ont la meme structure (bd central et bd secteur).
    2. dans des bd differentes mais le meme PC.
    3. oui mes table ont les meme champs.
    votre code marche mais il faut juste associe ma commande a ma connexion central.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim AccessConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                              "Data Source=" & Me.cheminBdCentrale)
     
            AccessConnection.Open()
     
            Dim AccessCommand As New System.Data.OleDb.OleDbCommand()
     
            AccessCommand = New OleDbCommand("", maconnecxion_centrale)
     
            AccessCommand.CommandText = "INSERT INTO [TableBdCentrale] SELECT * FROM [MS Access;DATABASE=" & cheminBdSecteur & ";" & mdp & "].[TableSecteur]"
            AccessCommand.ExecuteNonQuery() 
            AccessConnection.Close()
    mais maintenant il faut vérifier avant d’insérer les données est ce que ces données existe dans la base centrale ou pas, je veux la faire dynamiquement, je veux faire une seul requête après la généraliser sur toutes mes table, je modifie juste le nom de ma table, c'est pour ça j'utilise et pour toutes mes table les deux premier champs sont des clés.

    Merci.

  9. #9
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut update et insert a la fois
    bonjour kika
    la tu change le probleme puisque tu veux faire une "espece de maj avec ajout uniquement des lignes de secteur qui n'existent pas dans centrale".
    Il faut passer par l'ouverture de 2 connections et 2 datasets chacun pour une BD.
    Et par le code ("dynamiquement comme tu le dis").
    voici un code qui ajoute à tabledbCentrale uniquement les lignes de tablebdSecteur qui n'existent pas dans tabledbCentrale
    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
     
    Imports System.Data.OleDb
    Public Class Form2
        Dim cheminBdCentrale As String = "C:\dossier1\BdCentrale.mdb"
        Dim cheminBdSecteur As String = "C:\dossier2\BdSecteur.mdb"
     
           'Button btnOpenFile
        Private Sub btnOpenFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenFile.Click
            Dim dlg1 As New OpenFileDialog
            'etc....pour recuperer cheminBdCentrale
            Dim dlg2 As New OpenFileDialog
            'etc....pour recuperer cheminBdSecteur
        End Sub
     
        Private Sub btnImportData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImportData.Click
            If cheminBdCentrale Is String.Empty Or cheminBdSecteur Is String.Empty Or mdp Is String.Empty Then
                Exit Sub
            End If
            'variable Centrale
            Dim centralDS As New DataSet
            Dim centralDT As New DataTable
            Dim centralDA As New OleDb.OleDbDataAdapter
            Dim centralCommand As New OleDbCommand()
     
            'CommandBuilder  necessaire pour repercuter modif
            ' du dataset centralDS dans BD . 
            Dim builderCentral As OleDbCommandBuilder = _
                   New OleDbCommandBuilder(centralDA)
     
            'variable Secteur
            Dim secteurDS As New DataSet
            Dim secteurDT As New DataTable
            Dim secteurDA As New OleDb.OleDbDataAdapter
            Dim secteurCommand As New OleDbCommand()
     
     
            'Connection à BDCENTRALE
            '------------------------
            Dim conCentrale As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                                             "Data Source=" & Me.cheminBdCentrale)
            conCentrale.Open()
            centralCommand.CommandText = "SELECT * FROM BDCENTRALE;"
            centralCommand.Connection = conCentrale
            centralDA.SelectCommand = centralCommand
     
            centralDA.Fill(centralDS, "Destination")
            centralDT = centralDS.Tables(0)
     
            'Connection à BDSECTEUR
            '------------------------
            Dim ConSecteur As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                                     "Data Source=" & Me.cheminBdSecteur)
            ConSecteur.Open()
     
     
            secteurCommand.CommandText = "SELECT * FROM  [SECTEUR1];"
            secteurCommand.Connection = ConSecteur
            secteurDA.SelectCommand = secteurCommand
     
            secteurDA.Fill(secteurDS, "Source")
            secteurDT = secteurDS.Tables(0)
     
            'Met à Jour les champs des "Lignes Existantes" &
            'Ajoute les "Lignes qui n'existant pas " à DataTable Centrale 
     
            For Each ligneSource As DataRow In secteurDT.Rows
                Dim newRow() As Object = ligneSource.ItemArray
                Call AjoutMAJ(centralDT, newRow)
            Next
     
            ' Code pour repercuter modif dans la BD(fichier disque) . 
            ' car le dataset & datatable sont des tableaux en memoire seulement
            centralDA.Update(centralDS, "Destination")
            MsgBox("Data updated")
     
            DataGridView1.DataSource = centralDS
            DataGridView1.DataMember = centralDS.Tables(0).TableName
            conCentrale.Close()
            ConSecteur.Close()
     
        End Sub
        ' Sub AjouteEtMetAjour
        Private Sub AjoutMAJ(ByVal table As DataTable, ByVal newRow() As Object)
     
            Dim row As DataRow
            table.BeginLoadData()
     
            ' Add the new row to the rows collection.
            row = table.LoadDataRow(newRow, True)
            table.EndLoadData()
        End Sub
    End Class
    bon code....

  10. #10
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 254
    Points : 123
    Points
    123
    Par défaut
    Merci beaucoup MABROUKI,

    Mais dans votre exemple vous prenez l’union des données secondaire et les données centrale, c’est ça ce qui s’affiche dans le datagridview1.

    Il y’a un nouveau problème c’est que quand on supprimer des données dans la base secondaire il faut la supprimer dans la base principale.

    J’ai pensé d’utiliser une nouvel datatable on le mis dedans les données a modifier, et dans la procédure AjoutMAJ on ajouter les données qui n’existe pas, par ce que je sais que les 2 premier champs sont des clés alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (ligneSource.ItemArray(0).ToString = newRow(0).ToString) And (ligneSource.ItemArray(1).ToString = newRow(1).ToString) Then
    j'insère dans ma table sinon j'insère dans ma base.
    pour la suppression je parcours ma base principale et si je trouve pas une donnée dans ma base secondaire je fait une requête delete.

    après je modifie ma base a l'aide de datatable et j'ai même les noms des champs (les noms des entêtes de datagrid) pour exécuter la requête update.

    mais je sais pas comment remplir ma table? j'ai essayé avec ça :
    mais marche pas
    Input array is longer than the number of columns in this table.
    merci.

  11. #11
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut importer des datatables
    bonjour kika
    Effectivement c'est une fusion et ce malgre la doc MSDN qui dit que le parametre "True" de table.LoadDataRow(Row, True) permet d'apporter la mise à jour des lignes communes sans les ajouter.
    Bref.
    Oui c'est tres bien tu peux faire un nouveau datable qui est un "clone" de secteurDT,copier dedans les lignes "nouvelles ajout" .
    Ensuite ajouter ce nouveau databl(il contient uniquement les lignes "nouvelles" de l'ajout) à ta base centralDT

    Pour la suppression je ne comprends pas ta strategie parce qu il faut distinguer l'initialisation de la base centrale et la maj à un stade de temps -k-Sauf si tu pars comme ceci:
    1/Initialiser Base Centrale qui ne contient rien au depart.
    - ajout des bases de tous les secteurs
    3/Procedure Maj à l'etape -k -(mois ou le trimestre etc...)
    - pour chaque base secteur tu fais ta procedure ajout +suppression.
    Mais si ta base centrale contient "quelque chose" à l'etat initial ,là ca ne marche .
    voici le code pour l'ajout et la suppression.

    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
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
     
    Imports System.Data.OleDb
    Public Class Form3
     
        Dim cheminBdCentrale As String = "C:\dossier1\BdCentrale.mdb"
        Dim cheminBdSecteur As String = "C:\dossier2\BdSecteur.mdb"
        'Dim cheminBdCentrale As String = My.Settings.BDCENTRALECnStr
        'Dim cheminBdSecteur As String = My.Settings.BDSECTEURCnStr
        Dim mdp As String = "kika"
        'ajouter un textbox pour saisir le password pour la bd source (secteur)
        'pas besoin pour la bd destination(bd centrale)
        '
        'Button btnOpenFile
        Private Sub btnOpenFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenFile.Click
            Dim dlg1 As New OpenFileDialog
            'etc....pour recuperer cheminBdCentrale
            Dim dlg2 As New OpenFileDialog
            'etc....pour recuperer cheminBdSecteur
        End Sub
     
        Private Sub btnImportData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImportData.Click
            If cheminBdCentrale Is String.Empty Or cheminBdSecteur Is String.Empty Or mdp Is String.Empty Then
                Exit Sub
            End If
            'variable Centrale
            Dim centralDS As New DataSet
            Dim centralDT As New DataTable
            Dim centralDA As New OleDb.OleDbDataAdapter
            Dim centralCommand As New OleDbCommand()
     
            'CommandBuilder  necessaire pour repercuter modif
            ' du dataset centralDS dans BD . 
            Dim builderCentral As OleDbCommandBuilder = _
                   New OleDbCommandBuilder(centralDA)
     
            'variable Secteur
            Dim secteurDS As New DataSet
            Dim secteurDT As New DataTable
            Dim secteurDA As New OleDb.OleDbDataAdapter
            Dim secteurCommand As New OleDbCommand()
     
     
            'Connection à BDCENTRALE
            '------------------------
            Dim conCentrale As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                                             "Data Source=" & Me.cheminBdCentrale)
            conCentrale.Open()
     
            centralCommand.CommandText = "SELECT * FROM BDCENTRALE;"
            centralCommand.Connection = conCentrale
            centralDA.SelectCommand = centralCommand
     
            centralDA.Fill(centralDS, "Destination")
            centralDT = centralDS.Tables(0)
     
     
            'Connection à BDSECTEUR
            '------------------------
            Dim ConSecteur As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                                     "Data Source=" & Me.cheminBdSecteur)
            ConSecteur.Open()
     
     
            secteurCommand.CommandText = "SELECT * FROM  [SECTEUR1];"
            secteurCommand.Connection = ConSecteur
            secteurDA.SelectCommand = secteurCommand
     
            secteurDA.Fill(secteurDS, "Source")
            secteurDT = secteurDS.Tables(0)
     
            'L'AJOUT  ( "Lignes nouvelles ") à DataTable Centrale 
            '1-CREER UN DATATABLE TEMPORAIRE( meme structure & vide) QUE secteurDT
            Dim nouvDataTable As DataTable = secteurDT.Clone
            Dim dr As DataRow
     
            '2- DEFINIR DES CLES PRIMAIRES AVEC 2 CHAMPS centralDT
            Dim centralCle(1) As DataColumn
            centralCle(0) = centralDT.Columns(0)
            centralCle(1) = centralDT.Columns(1)
            centralDT.PrimaryKey = centralCle
            '3-POPULATE nouvDataTable
            For Each ligneSource As DataRow In secteurDT.Rows
                'le champ cle  devient helas un tableau
                Dim champCle() As Object = New Object(1) {}
                champCle(0) = ligneSource.Item(0)
                champCle(1) = ligneSource.Item(1)
                'si la ligne avec la cle n'existe pas,l'ajouter
                If (centralDT.Rows.Find(champCle) Is Nothing) Then
                    'cree nouvel. ligne dans nouvDataTable
                    dr = nouvDataTable.NewRow
                    dr.ItemArray = ligneSource.ItemArray.Clone
                    'MessageBox.Show(dr(0).ToString & dr(1).ToString & dr(2).ToString)
                    nouvDataTable.Rows.Add(dr)
                End If
            Next
            'AFFICHE LE nouvDataTable
            Me.DataGridView2.DataSource = nouvDataTable
            '4-AJOUTE LE nouvDataTable à centralDS
            For Each ligneSource As DataRow In nouvDataTable.Rows
                Dim newRow() As Object = ligneSource.ItemArray
                Call AjoutMAJ(centralDT, newRow)
            Next
     
            'SUPPRESSION 
            '1-AJOUTER DEFINITION DES CLES PRIMAIRES AVEC 2 CHAMPS secteurDT
            Dim secteurCle(1) As DataColumn
            secteurCle(0) = secteurDT.Columns(0)
            secteurCle(1) = secteurDT.Columns(1)
            secteurDT.PrimaryKey = secteurCle
     
            '2-RECHERCHE LES LIGNE A SUPPRIMER
            'BERRAH IGOUL OUI AOUED  KIKA: on ne peut pas supprimer un element collection 
            ' à l 'interieur  d'une boucle For Each...Next .c'est pour ca la liste.
            Dim lstRowSuppr As List(Of DataRow) = New List(Of DataRow)
            For Each ligneCible As DataRow In centralDT.Rows
                Dim champCle() As Object = New Object(1) {}
                champCle(0) = ligneCible.Item(0)
                champCle(1) = ligneCible.Item(1)
                'si ligne avec cle n'existe pas dans secteurDT
                If Not secteurDT.Rows.Contains(champCle) Then
                    'memorise  ligne centralDT
                    lstRowSuppr.Add(ligneCible)
                    MessageBox.Show("ligne deleted :" & ligneCible(0).ToString & ligneCible(1).ToString & ligneCible(2).ToString)
                End If
            Next
            '2-SUPPRESSION DES LIGNES DANS centralDT
            For Each ligneSuppr In lstRowSuppr
                centralDT.Rows.Remove(ligneSuppr)
            Next
            centralDS.AcceptChanges()
     
            ' CODE POUR REPERCUTER MODIF DANS LA BD(fichier disque) . 
            ' car le dataset & datatable sont des tableaux en memoire seulement
     
            centralDA.Update(centralDS, "Destination")
            MsgBox("Data updated")
     
            DataGridView1.DataSource = centralDS
            DataGridView1.DataMember = centralDS.Tables(0).TableName
            conCentrale.Close()
            ConSecteur.Close()
     
        End Sub
        ' Sub AjouteEtMetAjour
        Private Sub AjoutMAJ(ByVal table As DataTable, ByVal newRow() As Object)
     
            Dim row As DataRow
            table.BeginLoadData()
     
            ' Add the new row to the rows collection.
            row = table.LoadDataRow(newRow, True)
     
            table.EndLoadData()
     
        End Sub
    Sans etre indiscret la ,ou est-tu base en algerie......
    bon code....

  12. #12
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 254
    Points : 123
    Points
    123
    Par défaut
    meeeeeeeeeeeeeeerci MABROUKI, ça marche.

    la base centrale ne contient rien au départ mais l'importation va se faire plusieurs fois, et dans les base secondaire y'a la possible de supprimer des données déjà saisi.

    mais cette méthodes est lourd surtout après un certaine temps quand on va avoir des base secondaire rempli par des milliers d'enregistrement dans chaque table, chaque base a 37 table et on a 48 base secondaire!!!!!!

    est ce que y'a pas un utilitaire pour fusion des bases qui ont les même tables, même structure, même champs????

    PS: oui je suis avec mes bases en algerie.

    Merci.

  13. #13
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut galere de la mise à jour,milliers d'enregistrement ,37 tables
    bonjour kika
    C'est à cause du probleme de la mise à jour de donnees decentralisees que j'ai dit quelle est ta strategie .
    Car la conception de la BD ne depend pas seulement de sa programmation et de son codage c'est la partie la plus facile .
    C'est sa gestion et sa maintenance au jour le jour qui est un grand probleme .
    Des le depart il faut avoir une "stategie" pour la gerer,avant de tout coder .
    Si tu la decentralises comme tu l'as fait ,tu vas passer 10 dix jours avec 8 heures bien pleines a lancer uniquement des mises à jour par exemple mensuelles .

    Aussi je te recommende ,si tu as un bon intranet(dzpac par exemple) de la mettre sur un dossier share (partage) auquel les utilisateurs se connectent directement.
    En plus pour eviter un engorgement de reseau ,quand il y a beaucoup de transactions , programmer les temps de connexion des utilisateurs pour les etaler.
    En plus si tu regardes de pres il y a surement des tables qui ne sont utiles que localement (elles ne seront donc pas chez toi sur le dossier central share) ce qui allege la connexion.

    Au niveau central tu te contenteras à faire un "backup.mdb" de ta base tous 15 jours (ou une fois mois par mesure de securite).
    Pendant le backup la base centrale sera deconnecte pour un temps tres court.

    Les utilisateurs quant à eux ,a chaque fin de saisie sur la base centrale,ils peuvent en plus faire un "saveasxml" du dataset modifie chez eux localement ,par mesure de securite egalement.

    Maintenant des utilitaires payants , surement il doit en exister
    Ifaut discuter avec les specialistes des BD de developpez.com.
    Ca te donneras des idees pour eclairer ta strategie.
    bon code.....

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/05/2014, 08h41
  2. Réponses: 6
    Dernier message: 09/04/2014, 14h05
  3. Réponses: 5
    Dernier message: 04/12/2008, 15h58
  4. Réponses: 2
    Dernier message: 05/10/2007, 23h49
  5. Réponses: 2
    Dernier message: 10/07/2006, 16h10

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