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