Problème de boucle sur un Recordset
Bonjour,
J'ai un petit soucis pour exploiter un recordset, qui se passe de la façon suivante :
J'ai une connexion Jet 4.0 pour lire des fichiers Excel qui me servent de source, je crée un Recordset "Rst" à partir de cela.
Je voudrais, sans passer par une feuille Excel de transition, envoyer directement ce Recordset dans ma base de données MySQL.
La connexion à la base marche, et j'arrive à insérer une ligne. Mais c'est tout... donc je pense être proche du but, mais ma boucle doit être mauvaise.
De plus, j'aimerais ne lire les informations dans mon Recordset qu'à partir de la 3ème ou 4ème entrée, est ce possible avec un Move... ? Ou Dois je supprimer les lignes du Recordset que je ne veux pas ?
Voilà ce que j'ai en gros :
Code:
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
|
Sub testrecordset()
Dim Cn As ADODB.Connection
Dim cnbis As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim Import_sql As String
Dim Rst As ADODB.Recordset
Dim rst2 As ADODB.Recordset
'Définit le classeur fermé servant de base de données
Fichier = "Y:\Chemin\Fichier.xls"
'Nom de la feuille dans le classeur fermé
NomFeuille = "saisie"
Set Cn = New ADODB.Connection
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Fichier & ";Extended Properties=Excel 8.0;"
.Open
End With
'Définit la requête
'/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL) |
Cette partie marche bien, ensuite j'ai fait 2 essais :
Set rst2 = New ADODB.Recordset
Set cnbis = New ADODB.Connection
cnbis.Open "dsn=testvba"
Code:
1 2 3 4 5
| While Not Rst.EOF
cnbis.Execute (Import_sql)
ligne = ligne + 1
Rst.MoveNext
Wend |
Et
Code:
1 2 3 4 5
| Rst.MoveFirst
Do Until Rst.EOF = True
Set rst2 = cnbis.Execute(Import_sql), True
Rst.MoveNext
Loop |
Dans les deux cas, seule la première ligne semble copiée (j'ai sans arrêt la même date : "2009-01-02" qui est copiée dans la base.
D'ailleurs je me demande bien pourquoi ce n'est pas "2009-01-01".
Je ne pense pas que le problème vienne des propriétés des Recordset (j'ai lu des limitations par rapport à ceux créés via Microsoft Jet), mais plutôt un problème pour passer à la ligne suivante dans recordset. Je pensais que celui ci pouvait être traité comme un ensemble d'ailleurs, suis je donc obligé de faire ligne par ligne ?
Merci bien pour votre aide.