begin process at 2012 02 13 05:26:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de Donnees

 > CLONER UNE TABLE EN ADO

CLONER UNE TABLE EN ADO


 Information sur la source

Note :
Aucune note
Catégorie :Base de Donnees Classé sous :ado, clone, access Niveau :Initié Date de création :12/07/2006 Date de mise à jour :31/07/2006 15:48:14 Vu :6 383

Auteur : Tropic

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 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

Source avec Zip Source avec une capture SPYKEE LE ROBOT
Source avec Zip Source avec une capture WIIMOTE ET VB6
Source avec Zip DÉCODEUR DTMF SUR LA CARTE SON
Source avec Zip MONITEUR DREAMBOX
Source avec Zip Source avec une capture DOMOTIQUE X10 POUR MODULE CM11

 Sources de la même categorie

Source avec Zip Source avec une capture BIEN ADMINISTRER LES ETUDIANTS ET LEURS CÔTES par okosa
Source avec Zip VBA EXEL GESTION DE PERSONEL NOUVEAU CONTRAT DE TRAVAI par oudlarbi
Source avec Zip Source avec une capture CREATION D'UN OBJET D'ACCÈS AUX DONNÉES par okosa
Source avec Zip Source .NET (Dotnet) MISAHORAIRE par MdelM
Source avec Zip Source avec une capture BASEDEDONNEES,GESTIONDEMALADES,DATABASSE par shadkitenge

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture OPEN ACCESS MDB par MALIKcpp
Source avec Zip DLLSEGURIDAD par ramuel
Source avec Zip CONNECTION VB A L'ACCES AVEC ADO par ch_wa
IMPORTER UNE FEUILLE EXCEL VERS UNE TABLE ACCESS EXISTANTE par pifou25
Source avec Zip GESTION CV AGENCE INTERIM par marouanem2010

Commentaires et avis

Commentaire de loulou69 le 27/07/2006 09:00:25

Bonjour
Comment résoudre la référence FieldDefaultValue dans le code ci-dessus ? Si quelqu'un sait merci d'avance

Commentaire de m2rtech le 26/05/2008 15:11:49

Bonjour,
quelle est la procédure qu'il faut lancer ?
ouvre_base ne semble pas appeler une autre procédure.

merci de donner un plus d'info à ce sujet.

Commentaire de Tropic le 27/05/2008 14:50:01

à m2rtech.????????

if OuvreBase(PathBase,pwdBase) then
  call ClonerTable(SourcenNameBase, DestinationNameBase)
  call CloseBase
end if

TOUT SIMPLEMENT !!!!!!!!

N'oublis pas d'inlure la référence FieldDefaultValue
(voir Historique du 31 juillet 2006 15:44:36)

 Ajouter un commentaire


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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,373 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales