Accueil > > > CLONER UNE TABLE EN ADO
CLONER UNE TABLE EN ADO
Information sur la source
Description
Voila une fonction pour cloner une table en ADO
Source
- Option Explicit
-
- Declare Function timeGetTime Lib "winmm.dll" () As Long
-
- Public ADORefreshCache As JRO.JetEngine
- Public ADOCurrentDb As ADODB.Connection
-
- Set ADORefreshCache = New JRO.JetEngine
-
-
- Public Function ClonerTable(ByVal S_Tname As String, ByVal D_Tname As String) As Boolean 'Version ADO
- On Error Resume Next
- Dim NomChampCle As String
- Dim cat As New ADOX.Catalog
- Dim xCount As Integer, prpLoop As Integer
- Dim TblField As New ADOX.Column
- Dim idxForeign As ADOX.Index
-
- While ADOCurrentDb.State = 5
- DoEvents
- ADORefreshCache.RefreshCache ADOCurrentDb
- Wend
- Set cat.ActiveConnection = ADOCurrentDb
-
- 'Requete pour dupliquer la table
- ADOExecute "SELECT [" & S_Tname & "].* INTO [" & D_Tname & "] FROM [" & S_Tname & "];"
- ADOExecute "DELETE [" & D_Tname & "].* FROM [" & D_Tname & "];"
-
- 'Remet les valeurs par défaut des champs
- xCount = cat.Tables(S_Tname).Columns.Count - 1
- Set TblField.ParentCatalog = cat
- For prpLoop = 0 To xCount
- TblField.Type = cat.Tables(S_Tname).Columns(prpLoop).Type
- FieldDefaultValue D_Tname, cat.Tables(S_Tname).Columns(prpLoop).Name, cat.Tables(S_Tname).Columns(prpLoop).Properties("Default").Value
- Next prpLoop
-
- 'Remet les indexs
- xCount = cat.Tables(S_Tname).Indexes.Count - 1
- For prpLoop = 0 To xCount
- Set idxForeign = New ADOX.Index
-
- NomChampCle = cat.Tables(S_Tname).Indexes.Item(prpLoop).Name
- idxForeign.Name = NomChampCle
- idxForeign.Unique = cat.Tables(S_Tname).Indexes(prpLoop).Unique
-
- idxForeign.Columns.Append NomChampCle
- cat.Tables(D_Tname).Indexes.Append idxForeign
-
- Set idxForeign = Nothing
- Next prpLoop
-
- Set cat = Nothing
- Set TblField = Nothing
- End Function
-
- Public Function ADOExecute(ByVal TmpSql As String) As Boolean
- On Error Resume Next
- Dim bExecute As Boolean
- Dim StartTime As Long
-
- 'Ne me demande pas pourquoi
- 'Mais si on execute des requetes à la file indiennes,
- 'ADOCurrentDb.State à la valeur 5 et une erreur se produit
- 'C'est pour le contrer.
- While ADOCurrentDb.State = 5
- DoEvents
- ADORefreshCache.RefreshCache ADOCurrentDb
- Wend
-
- BoucleADOExecute:
- On Error GoTo ErrADOExecute
-
- Call ADOCurrentDb.Execute(TmpSql, , adCmdText + adExecuteNoRecords + adAsyncExecute)
-
- 'j'attend que la requete est terminée
- StartTime = timeGetTime() + 10000
- Do
- DoEvents
- ADORefreshCache.RefreshCache ADOCurrentDb
- Loop Until ADOCurrentDb.State <> adStateExecuting Or timeGetTime > StartTime
-
- bExecute = True
-
- QuitADOExecute:
- ADOExecute = bExecute
- Exit Function
-
- ErrADOExecute:
- If Err.Number = -2147467259 Then Resume BoucleADOExecute
- Debug.Print Err.Description, , "ADOExecute"
-
- On Error Resume Next
- bExecute = False
- Resume QuitADOExecute
-
- End Function
-
-
- Public Function OuvreBase(ByVal PathBase As String, ByVal pwdBase As String) As Boolean
- Dim ConectBase As String
- Call CloseBase
-
- On Error GoTo ErrOuvreBase
-
- ConectBase = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathBase & ";Jet OLEDB:Database Password=" & pwdBase '& ";Jet OLEDB:UserId=Administrateur"
-
- Set ADOCurrentDb = New ADODB.Connection
- ADOCurrentDb.CursorLocation = adUseClient
- ADOCurrentDb.ConnectionString = ConectBase
- ADOCurrentDb.Open
- Set ADORefreshCache = New JRO.JetEngine
-
- While (ADOCurrentDb.State = adStateClosed)
- DoEvents
- Wend
-
- OuvreBase = True
- Exit Function
-
- ErrOuvreBase:
- OuvreBase = False
- End Function
-
- Public Sub SetFieldDefaultvalue(ByVal TableName As String, ByVal FieldName As String, ByVal DefautValue As Variant)
- On Error Resume Next
- Dim cat As New ADOX.Catalog
- Dim ValueType As ADOX.DataTypeEnum
-
-
- While ADOCurrentDb.State = 5
- DoEvents
- ADORefreshCache.RefreshCache ADOCurrentDb
- Wend
- Set cat.ActiveConnection = ADOCurrentDb
-
-
- ValueType = cat.Tables(TableName).Columns(FieldName).Type
-
- If ValueType = adVarWChar Then 'chaine de caractere
- cat.Tables(TableName).Columns(FieldName).Properties("Default").value = CStr(DefautValue)
- ElseIf ValueType = adCurrency Then 'Monétaire
- cat.Tables(TableName).Columns(FieldName).Properties("Default").value = CCur(DefautValue)
- ElseIf ValueType = adBoolean Then '
- cat.Tables(TableName).Columns(FieldName).Properties("Default").value = CBool(DefautValue)
- Else
- cat.Tables(TableName).Columns(FieldName).Properties("Default").value = DefautValue
- End If
-
- Set cat = Nothing
- End Sub
-
- Public Sub CloseBase()
- On Error Resume Next
- If ADOCurrentDb Is Nothing Then Exit Sub
-
- If ADOCurrentDb.State = adStateOpen Then ADOCurrentDb.Close
- Do
- DoEvents
- Loop Until ADOCurrentDb.State = adStateClosed
-
- Set ADOCurrentDb = Nothing
- Set ADORefreshCache = Nothing
- End Sub
Option Explicit
Declare Function timeGetTime Lib "winmm.dll" () As Long
Public ADORefreshCache As JRO.JetEngine
Public ADOCurrentDb As ADODB.Connection
Set ADORefreshCache = New JRO.JetEngine
Public Function ClonerTable(ByVal S_Tname As String, ByVal D_Tname As String) As Boolean 'Version ADO
On Error Resume Next
Dim NomChampCle As String
Dim cat As New ADOX.Catalog
Dim xCount As Integer, prpLoop As Integer
Dim TblField As New ADOX.Column
Dim idxForeign As ADOX.Index
While ADOCurrentDb.State = 5
DoEvents
ADORefreshCache.RefreshCache ADOCurrentDb
Wend
Set cat.ActiveConnection = ADOCurrentDb
'Requete pour dupliquer la table
ADOExecute "SELECT [" & S_Tname & "].* INTO [" & D_Tname & "] FROM [" & S_Tname & "];"
ADOExecute "DELETE [" & D_Tname & "].* FROM [" & D_Tname & "];"
'Remet les valeurs par défaut des champs
xCount = cat.Tables(S_Tname).Columns.Count - 1
Set TblField.ParentCatalog = cat
For prpLoop = 0 To xCount
TblField.Type = cat.Tables(S_Tname).Columns(prpLoop).Type
FieldDefaultValue D_Tname, cat.Tables(S_Tname).Columns(prpLoop).Name, cat.Tables(S_Tname).Columns(prpLoop).Properties("Default").Value
Next prpLoop
'Remet les indexs
xCount = cat.Tables(S_Tname).Indexes.Count - 1
For prpLoop = 0 To xCount
Set idxForeign = New ADOX.Index
NomChampCle = cat.Tables(S_Tname).Indexes.Item(prpLoop).Name
idxForeign.Name = NomChampCle
idxForeign.Unique = cat.Tables(S_Tname).Indexes(prpLoop).Unique
idxForeign.Columns.Append NomChampCle
cat.Tables(D_Tname).Indexes.Append idxForeign
Set idxForeign = Nothing
Next prpLoop
Set cat = Nothing
Set TblField = Nothing
End Function
Public Function ADOExecute(ByVal TmpSql As String) As Boolean
On Error Resume Next
Dim bExecute As Boolean
Dim StartTime As Long
'Ne me demande pas pourquoi
'Mais si on execute des requetes à la file indiennes,
'ADOCurrentDb.State à la valeur 5 et une erreur se produit
'C'est pour le contrer.
While ADOCurrentDb.State = 5
DoEvents
ADORefreshCache.RefreshCache ADOCurrentDb
Wend
BoucleADOExecute:
On Error GoTo ErrADOExecute
Call ADOCurrentDb.Execute(TmpSql, , adCmdText + adExecuteNoRecords + adAsyncExecute)
'j'attend que la requete est terminée
StartTime = timeGetTime() + 10000
Do
DoEvents
ADORefreshCache.RefreshCache ADOCurrentDb
Loop Until ADOCurrentDb.State <> adStateExecuting Or timeGetTime > StartTime
bExecute = True
QuitADOExecute:
ADOExecute = bExecute
Exit Function
ErrADOExecute:
If Err.Number = -2147467259 Then Resume BoucleADOExecute
Debug.Print Err.Description, , "ADOExecute"
On Error Resume Next
bExecute = False
Resume QuitADOExecute
End Function
Public Function OuvreBase(ByVal PathBase As String, ByVal pwdBase As String) As Boolean
Dim ConectBase As String
Call CloseBase
On Error GoTo ErrOuvreBase
ConectBase = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathBase & ";Jet OLEDB:Database Password=" & pwdBase '& ";Jet OLEDB:UserId=Administrateur"
Set ADOCurrentDb = New ADODB.Connection
ADOCurrentDb.CursorLocation = adUseClient
ADOCurrentDb.ConnectionString = ConectBase
ADOCurrentDb.Open
Set ADORefreshCache = New JRO.JetEngine
While (ADOCurrentDb.State = adStateClosed)
DoEvents
Wend
OuvreBase = True
Exit Function
ErrOuvreBase:
OuvreBase = False
End Function
Public Sub SetFieldDefaultvalue(ByVal TableName As String, ByVal FieldName As String, ByVal DefautValue As Variant)
On Error Resume Next
Dim cat As New ADOX.Catalog
Dim ValueType As ADOX.DataTypeEnum
While ADOCurrentDb.State = 5
DoEvents
ADORefreshCache.RefreshCache ADOCurrentDb
Wend
Set cat.ActiveConnection = ADOCurrentDb
ValueType = cat.Tables(TableName).Columns(FieldName).Type
If ValueType = adVarWChar Then 'chaine de caractere
cat.Tables(TableName).Columns(FieldName).Properties("Default").value = CStr(DefautValue)
ElseIf ValueType = adCurrency Then 'Monétaire
cat.Tables(TableName).Columns(FieldName).Properties("Default").value = CCur(DefautValue)
ElseIf ValueType = adBoolean Then '
cat.Tables(TableName).Columns(FieldName).Properties("Default").value = CBool(DefautValue)
Else
cat.Tables(TableName).Columns(FieldName).Properties("Default").value = DefautValue
End If
Set cat = Nothing
End Sub
Public Sub CloseBase()
On Error Resume Next
If ADOCurrentDb Is Nothing Then Exit Sub
If ADOCurrentDb.State = adStateOpen Then ADOCurrentDb.Close
Do
DoEvents
Loop Until ADOCurrentDb.State = adStateClosed
Set ADOCurrentDb = Nothing
Set ADORefreshCache = Nothing
End Sub
Conclusion
Facilement transposable pour cloner une base entièrement
Si quelq'un sait pourquoi à un moment je trouve dans (ADODB.Connection) ADOCurrentDb.State = 5 alors que cette valeur n'est pas dans les propriétés ni dans l'aide.
Historique
- 14 juillet 2006 08:01:35 :
- Si vous vouler approfondir votre connaissance sur les requetes de création de table
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap18.htm
tous sur les bases de données en général
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/sommaire.htm
- 31 juillet 2006 15:44:36 :
- Voici la référence de FieldDefaultValue
un oubli! ;-)
Public Sub SetFieldDefaultvalue(ByVal TableName As String, ByVal FieldName As String, ByVal DefautValue As Variant)
On Error Resume Next
Dim cat As New ADOX.Catalog
Dim ValueType As ADOX.DataTypeEnum
While ADOCurrentDb.State = 5
DoEvents
ADORefreshCache.RefreshCache ADOCurrentDb
Wend
Set cat.ActiveConnection = ADOCurrentDb
ValueType = cat.Tables(TableName).Columns(FieldName).Type
If ValueType = adVarWChar Then 'chaine de caractere
cat.Tables(TableName).Columns(FieldName).Properties("Default").value = CStr(DefautValue)
ElseIf ValueType = adCurrency Then 'Monétaire
cat.Tables(TableName).Columns(FieldName).Properties("Default").value = CCur(DefautValue)
ElseIf ValueType = adBoolean Then '
cat.Tables(TableName).Columns(FieldName).Properties("Default").value = CBool(DefautValue)
Else
cat.Tables(TableName).Columns(FieldName).Properties("Default").value = DefautValue
End If
Set cat = Nothing
End Sub
- 31 juillet 2006 15:48:14 :
- La référence de FieldDefaultValue rajouté
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
problème d'accès à Access en ADO [ par J-F ]
Bonjour,J'ai un gros problème quand je veux me connecter à une base Access en utilisant ADO. J'ai comme message d'erreur :"Impossible de démarrer votr
ado access, se connecter a une BD qui a unmot de passe [ par hujikole ]
lorsque l'on veux se connecter par VB sans ODBCil nous marque qu'il y a un utilisateur connecter a la BD en mode exclusifon est 3 a se pencher sur le
Connexion ADO de excel VERS ACCESS help !! :'( [ par Metos ]
Sub Connexion() Deconnexion 'Au cas ou ! Objconn.Open "PROVIDER=MSDASQL.1;DSN=" & "TestADO", UserId:="", Password:="" Quel est le Provider
Pb execution requetes avec objets ADO (VBA access) [ par Chico ]
Je voudrais executer une requête qui aurrait, apparament besoin de deux chaines de connection :une pour la table liée dans Access "LDFC" (provient de
ADO et deux connexions BDD [ par nanebac ]
J'ai un petit souci, je souhaite me connecter à une base ACCESS avecADO pour extraire un recordset qui doit être inséré dans une base SQL Pour ce
ADO et requête access avec parameteres [ par wels02 ]
Comment on peut ouvrir une requete access qui porte un parametre avec visual basic en utilisant ADOMerci!
Requete Access et ADO [ par EricH ]
Bonjour,est-il possible d'executer une requete access avec ado ?merci de votre reponse
ADO et Access [ par andrea06 ]
Bonjour,J'ai une question a propos de la connection ado vers une base de donnees access.J'ai remarque qu'il n'est possible de se connecter a une base
Gros pb avec access => ado [ par nicolson ]
Salut tout le monde !J'ai un petit problème...J'ai fait un annuaire, et tout marche bien...Mais à force de tester, j'ai remarqué que quand je laissais
ADO et requêtes paramétré sous Access [ par kpfeu ]
Bonjour,j'aurai bessoin de votre aide, car je ne m'y connais pas du tout en ADO. J'ai fait un petit prog relié a une BD Access 2000. Dans mon Form_Loa
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz 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
Forum
LISTER KEYS.KEYLISTER KEYS.KEY par Onin42
Cliquez pour lire la suite par Onin42
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
|