OVH Cloud OVH Cloud

Optimiser la Copie d'une table Oracle vers une Base Access

3 réponses
Avatar
xzy000000RolandChristian_Gamom
Bonjour,
Je travaille avec une base Oracle et je voudrais copier le contenu des=20
tables vers Access afin d'y travailler plus librement
Comment utiliser une requ=EAte SQL pour transf=E9rer rapidement les donn=E9=
es de=20
mes tables=20
Voici le code que j'utilise d=E9j=E0 avec VBA
Sub CopyTable(strSource As String, strDest As String, Optional strCrit As=20
String)
'22-10-2004
'Permet de mettre =E0 jour une table locale =E0 partir
'des donn=E9es du serveur
On Error GoTo ErrCopy
Dim rsOraTable As Recordset, rsAccTable As Recordset
Dim strSQL As String
Dim cnAcc As Connection
Dim fld As ADODB.Field

If strCrit =3D "" Then
strSQL =3D strSource
Else
strSQL =3D "select * from " & strTable & " where " & strCrit
End If
ConnectDelta
Set cnAcc =3D CurrentProject.Connection
Set rsAccTable =3D New ADODB.Recordset
Set rsOraTable =3D New ADODB.Recordset
rsAccTable.Open strDest, cnAcc, adOpenKeyset, adLockPessimistic
rsOraTable.CursorLocation =3D adUseClient
rsOraTable.Open strSQL, cnx, adOpenForwardOnly
'on ajoute les donn=E9es =E0 la table de destination
If Not rsAccTable.EOF Then rsAccTable.MoveLast
Do Until rsOraTable.EOF

'cette routine copy tous les champs de m=EAme nom
'de la table Oracle vers la table Access
rsAccTable.AddNew
For Each fld In rsAccTable.Fields
rsAccTable.Fields(fld.Name) =3D rsOraTable.Fields(fld.Name)
'Debug.Print fld.Name; " "; fld.Value;
Next
rsAccTable.Update
rsOraTable.MoveNext
DoEvents
Loop
ExitCopy:
cnx.Close
cnAcc.close
Exit Sub
ErrCopy:
Dim Errcode As Long
Errcode =3D Err.Number
MsgBox Err.Description
Stop:
'Resume
Resume ExitCopy
End Sub


Merci de m'aider car ce code bien qu'il marche est tr=E8s lent

3 réponses

Avatar
Patrick Fredin
Bonjour,

J'imagine que le nombre d'enregistrements doit être important. Dans ce cas,
il n'est pas anormal que ce soit long.

Éventuellement, tu pourrais enregistrer les données de Oracle dans un
fichier Texte ou XML car tu pourrais rapidement les importer dans Access.
Mais ce qui risque d'être long dans ce cas c'est le temps d'écriture du
fichier intermédiaire.

A voir.

--
Patrick

wrote in message
news:
Bonjour,
Je travaille avec une base Oracle et je voudrais copier le contenu des
tables vers Access afin d'y travailler plus librement
Comment utiliser une requête SQL pour transférer rapidement les données de
mes tables
Voici le code que j'utilise déjà avec VBA
Sub CopyTable(strSource As String, strDest As String, Optional strCrit As
String)
'22-10-2004
'Permet de mettre à jour une table locale à partir
'des données du serveur
On Error GoTo ErrCopy
Dim rsOraTable As Recordset, rsAccTable As Recordset
Dim strSQL As String
Dim cnAcc As Connection
Dim fld As ADODB.Field

If strCrit = "" Then
strSQL = strSource
Else
strSQL = "select * from " & strTable & " where " & strCrit
End If
ConnectDelta
Set cnAcc = CurrentProject.Connection
Set rsAccTable = New ADODB.Recordset
Set rsOraTable = New ADODB.Recordset
rsAccTable.Open strDest, cnAcc, adOpenKeyset, adLockPessimistic
rsOraTable.CursorLocation = adUseClient
rsOraTable.Open strSQL, cnx, adOpenForwardOnly
'on ajoute les données à la table de destination
If Not rsAccTable.EOF Then rsAccTable.MoveLast
Do Until rsOraTable.EOF

'cette routine copy tous les champs de même nom
'de la table Oracle vers la table Access
rsAccTable.AddNew
For Each fld In rsAccTable.Fields
rsAccTable.Fields(fld.Name) = rsOraTable.Fields(fld.Name)
'Debug.Print fld.Name; " "; fld.Value;
Next
rsAccTable.Update
rsOraTable.MoveNext
DoEvents
Loop
ExitCopy:
cnx.Close
cnAcc.close
Exit Sub
ErrCopy:
Dim Errcode As Long
Errcode = Err.Number
MsgBox Err.Description
Stop:
'Resume
Resume ExitCopy
End Sub


Merci de m'aider car ce code bien qu'il marche est très lent
Avatar
3stone
Salut,

a écrit dans:
Je travaille avec une base Oracle et je voudrais copier le contenu des
tables vers Access afin d'y travailler plus librement
Comment utiliser une requête SQL pour transférer rapidement les données de
mes tables
Voici le code que j'utilise déjà avec VBA
<snip>


Regarde dans l'aide: Insert Into

CurrentDb.Execute "Insert Into..."


qui s'utilise...

INSERT INTO target [IN externaldatabase] [(field1[, field2[, ...]])]
SELECT [source.]field1[, field2[, ...]
FROM tableexpression


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome
Avatar
Patrick Fredin
Si tu peux lier les tables de la base Oracle avec un lien ODBC par exemple,
les tables Oracle seront visibles depuis ta base Access. De ce fait, tu
pourras utiliser une requête Access pour récupérer les infos.

--
Patrick

wrote in message
news:
Bonjour,
Je travaille avec une base Oracle et je voudrais copier le contenu des
tables vers Access afin d'y travailler plus librement
Comment utiliser une requête SQL pour transférer rapidement les données de
mes tables
Voici le code que j'utilise déjà avec VBA
Sub CopyTable(strSource As String, strDest As String, Optional strCrit As
String)
'22-10-2004
'Permet de mettre à jour une table locale à partir
'des données du serveur
On Error GoTo ErrCopy
Dim rsOraTable As Recordset, rsAccTable As Recordset
Dim strSQL As String
Dim cnAcc As Connection
Dim fld As ADODB.Field

If strCrit = "" Then
strSQL = strSource
Else
strSQL = "select * from " & strTable & " where " & strCrit
End If
ConnectDelta
Set cnAcc = CurrentProject.Connection
Set rsAccTable = New ADODB.Recordset
Set rsOraTable = New ADODB.Recordset
rsAccTable.Open strDest, cnAcc, adOpenKeyset, adLockPessimistic
rsOraTable.CursorLocation = adUseClient
rsOraTable.Open strSQL, cnx, adOpenForwardOnly
'on ajoute les données à la table de destination
If Not rsAccTable.EOF Then rsAccTable.MoveLast
Do Until rsOraTable.EOF

'cette routine copy tous les champs de même nom
'de la table Oracle vers la table Access
rsAccTable.AddNew
For Each fld In rsAccTable.Fields
rsAccTable.Fields(fld.Name) = rsOraTable.Fields(fld.Name)
'Debug.Print fld.Name; " "; fld.Value;
Next
rsAccTable.Update
rsOraTable.MoveNext
DoEvents
Loop
ExitCopy:
cnx.Close
cnAcc.close
Exit Sub
ErrCopy:
Dim Errcode As Long
Errcode = Err.Number
MsgBox Err.Description
Stop:
'Resume
Resume ExitCopy
End Sub


Merci de m'aider car ce code bien qu'il marche est très lent