OVH Cloud OVH Cloud

Utilisation d'un recordset ADO

6 réponses
Avatar
Fabrice
bonjour à tous,

Je travaille sous Access 2002. Par le biais du code ci-dessous, j'arrive à
accéder aux données d'une table Fox Pro. Le recordset fonctionne bien.
J'utilise le code ci-dessous plutôt que lier la table FoxPro dans Access,
car le temps de réponse est plus rapide avec beaucoup de données.

Sub ConnectionFoxPro()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset

cnn.Open "Provider=vfpoledb;" & _
"Data Source=C:\WinBIZ Data\DAT\D5\2004\ADRESSES.DBF;"

rst.Open "adresses", cnn, adOpenKeyset, adLockOptimistic

rst.MoveFirst
Do Until rst.EOF

Debug.Print rst.Fields(2).Value, rst.Fields(3).Value
rst.MoveNext

Loop
rst.Close
cnn.Close

Set cnn = Nothing
Set rst = Nothing
End Sub

Mais maintenant que j'ai ces données dans un recordset ADO, comment puis-je
les utiliser. Idéalement, je souhaiterais créer une table avec ces données,
afin de pouvoir les utiliser dans des requêtes, formules ou états Access. En
résumé, je ne sais pas comment on peut exploiter un recordset ADO dans les
autres objets d'Access.

Si vous avez des pistes... Car je sèche

Merci d'avance de votre aide

Cordiales salutations
Fabrice

6 réponses

Avatar
3stone
Salut,

"Fabrice"
| Je travaille sous Access 2002. Par le biais du code ci-dessous, j'arrive à
| accéder aux données d'une table Fox Pro. Le recordset fonctionne bien.
| J'utilise le code ci-dessous plutôt que lier la table FoxPro dans Access,
| car le temps de réponse est plus rapide avec beaucoup de données.


Je ne suis pas persuadé dans le cas présent...



|
| Sub ConnectionFoxPro()
| Dim cnn As New ADODB.Connection
| Dim rst As New ADODB.Recordset
|
| cnn.Open "Provider=vfpoledb;" & _
| "Data Source=C:WinBIZ DataDATD52004ADRESSES.DBF;"
|
| rst.Open "adresses", cnn, adOpenKeyset, adLockOptimistic
|
| rst.MoveFirst
| Do Until rst.EOF
|
| Debug.Print rst.Fields(2).Value, rst.Fields(3).Value
| rst.MoveNext


Ici, tu devrais pousser les données enregistrement par enregistrement
ce qui est le contraire de rapide...

Quelque chose comme :
CurrentDb.Execute "INSERT INTO AutreTable ( Champ1, Champ2 ) Values ("'" & rst.fields(2) & "','" & rst.fields(3) & "')"

si AutreTable existe... et si les 2 champs sont de type string



| Loop
| rst.Close
| cnn.Close
|
| Set cnn = Nothing
| Set rst = Nothing
| End Sub
|
| Mais maintenant que j'ai ces données dans un recordset ADO, comment puis-je
| les utiliser. Idéalement, je souhaiterais créer une table avec ces données,
| afin de pouvoir les utiliser dans des requêtes, formules ou états Access. En
| résumé, je ne sais pas comment on peut exploiter un recordset ADO dans les
| autres objets d'Access.


Par contre, si tu lie la table "adresses.dbf" une simple requête fait le travail...

SELECT adresses.champ2, adresses.Champ3 INTO NewTable FROM adresses;


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Fabrice
Merci 3Stone pour ta réponse,

Le problème en liant une table avec ODBC, c'est que ça marchait pour 1000
enregistrements, mais avec 25000 enregistrements la machine plantait. Raison
pour laquelle, j'utilise cette méthode par code.

Ton idée de passer par Insert Into est séduisante, mais j'ai un petit
problème. En exécutant le code :

Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim rst2 As New ADODB.Recordset

DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from table1"
DoCmd.SetWarnings True

cnn.Open "Provider=vfpoledb;" & _
"Data Source=C:WinBIZ DataDATD52004ADRESSES.DBF;"

rst.Open "adresses", cnn, adOpenKeyset, adLockOptimistic

CurrentDb.Execute "INSERT INTO Table1 (Champ1, Champ2) Values ('" &
rst.Fields(1) & "','" & rst.Fields(3) & "')"

Il ne m'insère qu'un enregistrement dans la table Table1. Je n'arrive pas à
tous les insérer. J'ai essayé de changer la syntaxe de la dernière
instruction comme suit :

CurrentDb.Execute "INSERT INTO Table1 (Champ1, Champ2) Select ('" &
rst.Fields(1).Name & "','" & rst.Fields(3).Name & "')"

mais sans succès.

Si tu as une idée du problème. En tout cas, je te remercie d'avance du temps
que tu as pris pour mon problème.

Bonne soirée
Fabrice


"3stone" a écrit dans le message de
news:%
Salut,

"Fabrice"
| Je travaille sous Access 2002. Par le biais du code ci-dessous, j'arrive à
| accéder aux données d'une table Fox Pro. Le recordset fonctionne bien.
| J'utilise le code ci-dessous plutôt que lier la table FoxPro dans Access,
| car le temps de réponse est plus rapide avec beaucoup de données.


Je ne suis pas persuadé dans le cas présent...



|
| Sub ConnectionFoxPro()
| Dim cnn As New ADODB.Connection
| Dim rst As New ADODB.Recordset
|
| cnn.Open "Provider=vfpoledb;" & _
| "Data Source=C:WinBIZ DataDATD52004ADRESSES.DBF;"
|
| rst.Open "adresses", cnn, adOpenKeyset, adLockOptimistic
|
| rst.MoveFirst
| Do Until rst.EOF
|
| Debug.Print rst.Fields(2).Value, rst.Fields(3).Value
| rst.MoveNext


Ici, tu devrais pousser les données enregistrement par
enregistrement
ce qui est le contraire de rapide...

Quelque chose comme :
CurrentDb.Execute "INSERT INTO AutreTable ( Champ1, Champ2 ) Values
("'" & rst.fields(2) & "','" & rst.fields(3) & "')"

si AutreTable existe... et si les 2 champs sont de type string



| Loop
| rst.Close
| cnn.Close
|
| Set cnn = Nothing
| Set rst = Nothing
| End Sub
|
| Mais maintenant que j'ai ces données dans un recordset ADO, comment
puis-je
| les utiliser. Idéalement, je souhaiterais créer une table avec ces
données,
| afin de pouvoir les utiliser dans des requêtes, formules ou états Access.
En
| résumé, je ne sais pas comment on peut exploiter un recordset ADO dans les
| autres objets d'Access.


Par contre, si tu lie la table "adresses.dbf" une simple requête fait
le travail...

SELECT adresses.champ2, adresses.Champ3 INTO NewTable FROM adresses;


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
3stone
Salut,

"Fabrice"
[...]
| CurrentDb.Execute "INSERT INTO Table1 (Champ1, Champ2) Values ('" &
| rst.Fields(1) & "','" & rst.Fields(3) & "')"
|
| Il ne m'insère qu'un enregistrement dans la table Table1. Je n'arrive pas à
| tous les insérer. J'ai essayé de changer la syntaxe de la dernière
| instruction comme suit :
|
| CurrentDb.Execute "INSERT INTO Table1 (Champ1, Champ2) Select ('" &
| rst.Fields(1).Name & "','" & rst.Fields(3).Name & "')"
|
| mais sans succès.

[...]


|| rst.MoveNext


il ne faut pas oublier le rst.movenext



--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Fabrice
Rehello,

Donc en fait, je dois quand même passer sur chaque enregistrement du
recordset. Est-ce qu'il n'y a pas de moyen d'insérer en une fois toute la
table Fox Pro présente dans mon recordset dans une table Access ?

C'est une question à un peu bâteau, mais est-ce que tu procéderais
différemment avec un recordset ADO, plutôt que tout mettre dans une table ?

Merci encore et j'espère te relire
Fabrice

"3stone" a écrit dans le message de
news:
Salut,

"Fabrice"
[...]
| CurrentDb.Execute "INSERT INTO Table1 (Champ1, Champ2) Values ('" &
| rst.Fields(1) & "','" & rst.Fields(3) & "')"
|
| Il ne m'insère qu'un enregistrement dans la table Table1. Je n'arrive pas
à
| tous les insérer. J'ai essayé de changer la syntaxe de la dernière
| instruction comme suit :
|
| CurrentDb.Execute "INSERT INTO Table1 (Champ1, Champ2) Select ('" &
| rst.Fields(1).Name & "','" & rst.Fields(3).Name & "')"
|
| mais sans succès.

[...]


|| rst.MoveNext


il ne faut pas oublier le rst.movenext



--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
3stone
Salut,

"Fabrice"
| Donc en fait, je dois quand même passer sur chaque enregistrement du
| recordset.

Heh... A cause du recorset que tu as ouvert....

Avec un recordset (jeux d'enregistrements, in french) tu n'est toujours
positionné que sur UN seul enregistrement !
Il faut donc se le "taper" entièrement ;-)



| Est-ce qu'il n'y a pas de moyen d'insérer en une fois toute la
| table Fox Pro présente dans mon recordset dans une table Access ?

Ben... la requête que je t'ai proposé au départ, il n'y a pas photo...


| C'est une question à un peu bâteau, mais est-ce que tu procéderais
| différemment avec un recordset ADO, plutôt que tout mettre dans une table ?

Un recordset est principalement utilisé lorsque l'on manipule les données de la source...
Pour simplement créer une source filtrée ou y ajouter quelques champs calculés,
on utilise plutôt une requête qui sera la source du formulaire ou de l'état.


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Fabrice
Merci 3Stone pour ta réponse. je commence à comprendre la manière de
procéder.

Bonne soirée et encore merci
Fabrice

"3stone" a écrit dans le message de
news:O%
Salut,

"Fabrice"
| Donc en fait, je dois quand même passer sur chaque enregistrement du
| recordset.

Heh... A cause du recorset que tu as ouvert....

Avec un recordset (jeux d'enregistrements, in french) tu n'est toujours
positionné que sur UN seul enregistrement !
Il faut donc se le "taper" entièrement ;-)



| Est-ce qu'il n'y a pas de moyen d'insérer en une fois toute la
| table Fox Pro présente dans mon recordset dans une table Access ?

Ben... la requête que je t'ai proposé au départ, il n'y a pas photo...


| C'est une question à un peu bâteau, mais est-ce que tu procéderais
| différemment avec un recordset ADO, plutôt que tout mettre dans une table
?

Un recordset est principalement utilisé lorsque l'on manipule les
données de la source...
Pour simplement créer une source filtrée ou y ajouter quelques champs
calculés,
on utilise plutôt une requête qui sera la source du formulaire ou de
l'état.


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw