Moi j'ai fait comme ça et ça marche :
Public Sub ChargeDansTable(StringComplet As String, NbChamps As Integer, NomTable)
'StringComplet : Chemin et nom de fichier txt à importer
'NbChamps : nombre de colonnes du fichier texte à importer
'NomTable : Nom de la table Oracle dans laquelle insérer les données
'Charge le contenu d'un fichier texte dans la table ImportTable
Dim Champ As String
Dim i As Integer
Open StringComplet For Input As #1
If Not EOF(1) Then
'On saute la première ligne car elle contient les en-têtes des colonnes
Line Input #1, Champ
'Initialisation de la commande SQL
CodeSql = "INSERT INTO " & NomTable & " VALUES ('"
End If
i = 1
Do While Not EOF(1)
'Lecture d'une ligne de données dans le fichier
'On n'importe que les NbChamps premiers champs du fichier
'On lit les NbChamps-1 premiers champs
Input #1, Champ If i <NbChamps - 1 Then CodeSql CodeSql & Replace(Champ, "'", "''") & "', '"
'On lit le NbChamps ème champ, on ferme l'instruction SQL If i NbChamps Then CodeSql CodeSql & Replace(Champ, "'", "''") & "');"
'Et on exécute l'instruction SQL complète
If i = NbChamps Then
Call ExecCodeSql(Cnx, CodeSql)
Line Input #1, Champ
i = 0
'Réinitialisation de la commande SQL pour l'insertion suivante
CodeSql = "INSERT INTO " & NomTable & " VALUES ('"
End If
i = i + 1
Loop
Close #1
End Sub
Avec :
Public Sub ExecCodeSql(Cnx As Connection, CodeSql As String)
'14/04/04
'classe et instance du jeu d'enregistrements
Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
'Exécution de la requête sur la base
Rs.Open CodeSql, Cnx
End Sub
et :
Public Cnx As ADODB.Connection
Cnx est une connetion que j'ouvre en début de session et qui sert pour tous les appels à la base Oracle et qui se présente de la forme :
Provider=MSDASQL.1;Extended Properties="DSN=ECI;UID=PierreDupond;PWD=MotDePasse;DBQ=GestDev;"