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
| Sub ExempleADO_CopyAccessVersSQLServer()
Dim oCnSqlSvr As ADODB.Connection, oCnAcc As ADODB.Connection
Dim rsDest As ADODB.Recordset, rsSce As ADODB.Recordset
' Connexion Access (Base en cours)
' Réutilise la connexion existante - Pas besoin de créer un nouvel objet
Set oCnAcc = CurrentProject.Connection
' Connexion à base SQL Server
' Crée objet Connection
Set oCnSqlSvr = New ADODB.Connection
' Définit chaîne de connexion
' Provider SQLOLEDB = fournisseur de données pour SQL Server
oCnSqlSvr.ConnectionString = "Provider=SQLOLEDB" & _
";Data Source=Nom_du_Serveur_Sql" & _
";User ID=Nom_Utilisateur;Password=Mot_de_passe" & _
";Initial Catalog=Base_de_données;"
' Ouvre la connexion SQL Server
oCnSqlSvr.Open
' Vider table SQL Server
oCnSqlSvr.Execute "TRUNCATE TABLE Clients"
' Ouvrir recordset sur table (source) Access - ClientsComptoirs
Set rsSce = New ADODB.Recordset
rsSce.Open "SELECT * FROM ClientsComptoirs", oCnAcc, adOpenKeyset, adLockOptimistic, adCmdText
' Ouvrir recordset sur table (destination) SQL Server - User1.Clients
Set rsDest = New ADODB.Recordset
rsDest.CursorLocation = adUseClient
rsDest.Open "SELECT * FROM Clients", oCnSqlSvr, adOpenStatic, adLockOptimistic, adCmdText
' Boucle sur les enregistrements sources
Do While Not rsSce.EOF
' Créer nouvel enregistrement dans recordset destination
rsDest.AddNew
' Copie champ à champ
rsDest.Fields("CodeClient") = rsSce.Fields("Code client")
rsDest.Fields("Societe") = rsSce.Fields("Société")
rsDest.Fields("Contact") = rsSce.Fields("Contact")
rsDest.Fields("Fonction") = rsSce.Fields("Fonction")
rsDest.Fields("Adresse") = rsSce.Fields("Adresse")
rsDest.Fields("Ville") = rsSce.Fields("Ville")
rsDest.Fields("Région") = rsSce.Fields("Région")
rsDest.Fields("CodePostal") = rsSce.Fields("Code postal")
rsDest.Fields("Pays") = rsSce.Fields("Pays")
rsDest.Fields("Téléphone") = rsSce.Fields("Téléphone")
rsDest.Fields("Fax") = rsSce.Fields("Fax")
' Facultatif car le prochain rsDest.AddNew fera un .Update de manière implicite
' mais c'est plus lisible :
' ajoute nouvel enregistrement
'rsDest.Update
' Enregistrement Source suivant
rsSce.MoveNext
Loop
FIN:
' Fermeture recordset destination
If Not rsDest Is Nothing Then
' rsDest.BOF et rsDest.EOF sont vrais quand il n'y a aucun enregistrement en cours
' Si c'est le cas on ne peut pas tester .EditMode
If Not (rsDest.BOF And rsDest.EOF) Then
' Au cas où un enregistrement a été créé par AddNew mais n'a pas été ajouté,
' on met à jour avec .Update
If rsDest.EditMode <> adEditNone Then rsDest.Update
End If
If rsDest.State <> adStateClosed Then rsDest.Close
Set rsDest = Nothing
End If
' Fermeture source
If Not rsSce Is Nothing Then
If rsSce.State <> adStateClosed Then rsSce.Close
Set rsSce = Nothing
End If
' Fermeture connexion Serveur SQL
If Not oCnSqlSvr Is Nothing Then
If oCnSqlSvr.State <> adStateClosed Then oCnSqlSvr.Close
Set oCnSqlSvr = Nothing
End If
' Libération variable objet connexion Access locale
Set oCnAcc = Nothing
End Sub |
Partager