Optimiser la Copie d'une table Oracle vers une Base Access
3 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
<xzy000000RolandChristian_Gamom@barry-callebaut.com> wrote in message
news:OxvQtvZvEHA.3916@TK2MSFTNGP10.phx.gbl...
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
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
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
Salut,
<xzy000000RolandChristian_Gamom@barry-callebaut.com> 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
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
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
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
<xzy000000RolandChristian_Gamom@barry-callebaut.com> wrote in message
news:OxvQtvZvEHA.3916@TK2MSFTNGP10.phx.gbl...
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
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