Accueil > > > MISE À JOUR STRUCTURE BASE ACCESS AVEC ADOX
MISE À JOUR STRUCTURE BASE ACCESS AVEC ADOX
Information sur la source
Description
Cette procédure permet de mettre à jour la structure d'une base de donnée en utilisant la structure d'une base référence tout en conservant les données incluses dans la première base. (Si vous coprenez pas, relisez une fois :-) ) Pour cela j'utilise ADOX, cela me permet de créer des tables et de champs et d'en supprimer.
Source
- Private Sub Maj_Struct(Dbutilisateur As String, DBReference As String)
-
- '"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- 'Procédure de maj de structure d'une base par rapport à une base référence
- '
- 'Note:
- 'Les tableaux deltable et delcolumn sont utilisés pour mémoriser les éléments à supprimer, la suppression directe
- 'étant impossible étant donné qu'une suppression directe boulverse les indices des tables rendant impossible
- 'la navigation entre les tables de la base
- 'La suppression intervient donc après avoir mémorisé tous les élements à supprimer
- '"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- Dim org_connection As New ADODB.Connection
- Dim RcOrg As New ADODB.Recordset
- Dim orgcat As New ADOX.Catalog
- Dim myconnection As New ADODB.Connection
- Dim myrc As New ADODB.Recordset
- Dim mycat As New ADOX.Catalog
-
- Dim cu_items() As String
- Dim cu_item As Integer
- Dim cu_table As Integer
- Dim cu_tables() As String
- Dim deltable() As String
- Dim delcolumn() As String
- Dim nbtable As Integer
- Dim nbcolumn As Integer
- Dim i As Integer
- Dim j As Integer
- Dim k As Integer
- Dim l As Integer
- Dim m As Integer
- Dim newtable As ADOX.Table
-
- myconnection.Provider = "Microsoft.jet.oledb.4.0"
- myconnection.ConnectionString = Dbutilisateur '"c:\stages\patrice\boadataold.mdb"
- myconnection.Open
-
- org_connection.Provider = "Microsoft.jet.oledb.4.0"
- org_connection.ConnectionString = DBReference '"c:\stages\patrice\boadataref.mdb"
- org_connection.Open
-
- mycat.ActiveConnection = myconnection
- orgcat.ActiveConnection = org_connection
- cu_table = 0
- nbtable = 0
- nbcolumn = 0
-
- For i = 0 To orgcat.tables.count - 1
- If orgcat.tables(i).TYPE = "TABLE" Then
- ' on a trouvé une table dans la base de référence
- 'recherche de la même table dans la base user
- nbcolumn = 0
- ReDim Preserve cu_tables(cu_table)
- cu_tables(cu_table) = orgcat.tables(i).Name
- cu_table = cu_table + 1
- k = 0
- While k < mycat.tables.count - 1 And mycat.tables(k).Name <> orgcat.tables(i).Name
- k = k + 1
- Wend
- cu_item = 0
- If mycat.tables(k).Name = orgcat.tables(i).Name Then 'si table trouvée dans base user
- 'énumération des champs pour ajout
- For j = 0 To orgcat.tables(i).Columns.count - 1 'tq kil y a des champs dans base de références
- ReDim Preserve cu_items(cu_item)
- cu_items(cu_item) = orgcat.tables(i).Columns(j).Name
- cu_item = cu_item + 1
- l = 0
- While l < mycat.tables(k).Columns.count - 1 And mycat.tables(k).Columns(l).Name <> orgcat.tables(i).Columns(j).Name
- l = l + 1
- Wend
- If mycat.tables(k).Columns(l).Name = orgcat.tables(i).Columns(j).Name Then 'si champ trouvé
- 'rien pour l'instant (possibilité peut-être de modification de champ)
- Else
- 'si pas trouvé : Création du champ dans la table
- mycat.tables(k).Columns.Append orgcat.tables(i).Columns(j).Name, orgcat.tables(i).Columns(j).TYPE, orgcat.tables(i).Columns(j).DefinedSize
- End If
- Next
-
- 'suppression des champs dans base user non existant dans base référence
- For j = 0 To (mycat.tables(k).Columns.count - 1)
- m = 0
- While m < cu_item - 1 And cu_items(m) <> mycat.tables(k).Columns(j).Name
- m = m + 1
- Wend
- If mycat.tables(k).Columns(j).Name = cu_items(m) Then
- 'si champ trouvé
- Else
- ReDim Preserve delcolumn(nbcolumn)
- delcolumn(nbcolumn) = mycat.tables(k).Columns(j).Name
- nbcolumn = nbcolumn + 1
- End If
- Next
-
- For j = 0 To nbcolumn - 1
- m = 0
- While m < mycat.tables(k).Columns.count - 1 And mycat.tables(k).Columns(m).Name <> delcolumn(j)
- m = m + 1
- Wend
- If mycat.tables(k).Columns(m).Name = delcolumn(j) Then
- mycat.tables(k).Columns.Delete m
- End If
- Next
-
- Else
- 'Création de la table
- Set newtable = New ADOX.Table
- With newtable
- .Name = orgcat.tables(i).Name
- With .Columns
- For j = 0 To orgcat.tables(i).Columns.count - 1
- .Append orgcat.tables(i).Columns(j).Name, orgcat.tables(i).Columns(j).TYPE, orgcat.tables(i).Columns(j).DefinedSize
- Next
- End With
- End With
- mycat.tables.Append newtable
- Set newtable = Nothing
- End If
- End If
- Next
-
-
- For j = 0 To mycat.tables.count - 1
- If mycat.tables(j).TYPE = "TABLE" Then
- m = 0
- While m < cu_table - 1 And cu_tables(m) <> mycat.tables(j).Name
- m = m + 1
- Wend
- If mycat.tables(j).Name = cu_tables(m) Then
- 'si table trouvée
- Else
- ReDim Preserve deltable(nbtable)
- deltable(nbtable) = mycat.tables(j).Name
- nbtable = nbtable + 1
- End If
- End If
- Next
-
- For j = 0 To nbtable - 1
- m = 0
- While m < mycat.tables.count - 1 And mycat.tables(m).Name <> deltable(j)
- m = m + 1
- Wend
- If mycat.tables(m).Name = deltable(j) Then
- mycat.tables.Delete m
- End If
- Next
-
- MsgBox "Import structure terminé", vbInformation, "Import réussi"
- org_connection.Close
- myconnection.Close
- Set org_connection = Nothing
- Set myconnection = Nothing
- DoCmd.Close acForm, "frmmodifstruct", acSaveNo
-
- End Sub
Private Sub Maj_Struct(Dbutilisateur As String, DBReference As String)
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
'Procédure de maj de structure d'une base par rapport à une base référence
'
'Note:
'Les tableaux deltable et delcolumn sont utilisés pour mémoriser les éléments à supprimer, la suppression directe
'étant impossible étant donné qu'une suppression directe boulverse les indices des tables rendant impossible
'la navigation entre les tables de la base
'La suppression intervient donc après avoir mémorisé tous les élements à supprimer
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Dim org_connection As New ADODB.Connection
Dim RcOrg As New ADODB.Recordset
Dim orgcat As New ADOX.Catalog
Dim myconnection As New ADODB.Connection
Dim myrc As New ADODB.Recordset
Dim mycat As New ADOX.Catalog
Dim cu_items() As String
Dim cu_item As Integer
Dim cu_table As Integer
Dim cu_tables() As String
Dim deltable() As String
Dim delcolumn() As String
Dim nbtable As Integer
Dim nbcolumn As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim m As Integer
Dim newtable As ADOX.Table
myconnection.Provider = "Microsoft.jet.oledb.4.0"
myconnection.ConnectionString = Dbutilisateur '"c:\stages\patrice\boadataold.mdb"
myconnection.Open
org_connection.Provider = "Microsoft.jet.oledb.4.0"
org_connection.ConnectionString = DBReference '"c:\stages\patrice\boadataref.mdb"
org_connection.Open
mycat.ActiveConnection = myconnection
orgcat.ActiveConnection = org_connection
cu_table = 0
nbtable = 0
nbcolumn = 0
For i = 0 To orgcat.tables.count - 1
If orgcat.tables(i).TYPE = "TABLE" Then
' on a trouvé une table dans la base de référence
'recherche de la même table dans la base user
nbcolumn = 0
ReDim Preserve cu_tables(cu_table)
cu_tables(cu_table) = orgcat.tables(i).Name
cu_table = cu_table + 1
k = 0
While k < mycat.tables.count - 1 And mycat.tables(k).Name <> orgcat.tables(i).Name
k = k + 1
Wend
cu_item = 0
If mycat.tables(k).Name = orgcat.tables(i).Name Then 'si table trouvée dans base user
'énumération des champs pour ajout
For j = 0 To orgcat.tables(i).Columns.count - 1 'tq kil y a des champs dans base de références
ReDim Preserve cu_items(cu_item)
cu_items(cu_item) = orgcat.tables(i).Columns(j).Name
cu_item = cu_item + 1
l = 0
While l < mycat.tables(k).Columns.count - 1 And mycat.tables(k).Columns(l).Name <> orgcat.tables(i).Columns(j).Name
l = l + 1
Wend
If mycat.tables(k).Columns(l).Name = orgcat.tables(i).Columns(j).Name Then 'si champ trouvé
'rien pour l'instant (possibilité peut-être de modification de champ)
Else
'si pas trouvé : Création du champ dans la table
mycat.tables(k).Columns.Append orgcat.tables(i).Columns(j).Name, orgcat.tables(i).Columns(j).TYPE, orgcat.tables(i).Columns(j).DefinedSize
End If
Next
'suppression des champs dans base user non existant dans base référence
For j = 0 To (mycat.tables(k).Columns.count - 1)
m = 0
While m < cu_item - 1 And cu_items(m) <> mycat.tables(k).Columns(j).Name
m = m + 1
Wend
If mycat.tables(k).Columns(j).Name = cu_items(m) Then
'si champ trouvé
Else
ReDim Preserve delcolumn(nbcolumn)
delcolumn(nbcolumn) = mycat.tables(k).Columns(j).Name
nbcolumn = nbcolumn + 1
End If
Next
For j = 0 To nbcolumn - 1
m = 0
While m < mycat.tables(k).Columns.count - 1 And mycat.tables(k).Columns(m).Name <> delcolumn(j)
m = m + 1
Wend
If mycat.tables(k).Columns(m).Name = delcolumn(j) Then
mycat.tables(k).Columns.Delete m
End If
Next
Else
'Création de la table
Set newtable = New ADOX.Table
With newtable
.Name = orgcat.tables(i).Name
With .Columns
For j = 0 To orgcat.tables(i).Columns.count - 1
.Append orgcat.tables(i).Columns(j).Name, orgcat.tables(i).Columns(j).TYPE, orgcat.tables(i).Columns(j).DefinedSize
Next
End With
End With
mycat.tables.Append newtable
Set newtable = Nothing
End If
End If
Next
For j = 0 To mycat.tables.count - 1
If mycat.tables(j).TYPE = "TABLE" Then
m = 0
While m < cu_table - 1 And cu_tables(m) <> mycat.tables(j).Name
m = m + 1
Wend
If mycat.tables(j).Name = cu_tables(m) Then
'si table trouvée
Else
ReDim Preserve deltable(nbtable)
deltable(nbtable) = mycat.tables(j).Name
nbtable = nbtable + 1
End If
End If
Next
For j = 0 To nbtable - 1
m = 0
While m < mycat.tables.count - 1 And mycat.tables(m).Name <> deltable(j)
m = m + 1
Wend
If mycat.tables(m).Name = deltable(j) Then
mycat.tables.Delete m
End If
Next
MsgBox "Import structure terminé", vbInformation, "Import réussi"
org_connection.Close
myconnection.Close
Set org_connection = Nothing
Set myconnection = Nothing
DoCmd.Close acForm, "frmmodifstruct", acSaveNo
End Sub
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|