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 : Sélectionner tout - Visualiser dans une fenêtre à part
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"
Et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 While Not Rst.EOF cnbis.Execute (Import_sql) ligne = ligne + 1 Rst.MoveNext Wend
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Rst.MoveFirst Do Until Rst.EOF = True Set rst2 = cnbis.Execute(Import_sql), True Rst.MoveNext Loop
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.
Partager