Bonjour !
Je te conseille de regarder sur se site, il est vraiment bien explicite au niveau des recordset !!
COmprendre les recordset ADO
ET il t'explique le fonctionnement de ADO !! Je te conseille de passer de ODBC à ADO, mais je ne suis pas un pro en la matière !
Toutefois, on me l'a conseillé il n'y as pas longtemps et ça marche bien : (j'importe sur un fichier excel avec mise en forme, environ 17000 lignes, en peut-être une minute !!)
Voici un exemple de code me permettant de faire des select et insert au niveau de mes tables (moi je suis sous foxpro) :
'PROCEDURE AFFICHANT LE RESULTAT DES REQUETES
Sub SelectSQL()
Dim nbrecord As Integer
Dim req_select As String
Dim rs As ADODB.Recordset
On Error GoTo SelectSQL_Error
nbrecord = 0
req_select = "SELECT * FROM client"
'On déclare le recordset
Set rs = New ADODB.Recordset
'Exécute la requête
rs.CursorLocation = adUseClient
rs.Open req_select, CONNECT_FOXPRO, adOpenStatic, adLockReadOnly, adCmdText
'On efface l'ensemble du contenu précédent
Workbooks(NOM_FIC).Worksheets("Affichage").Cells.Clear
'On vérifie que l'on a bien récupéré des enregistrements
If Not rs.EOF Then
rs.MoveFirst
Workbooks(NOM_FIC).Worksheets("Affichage").Cells(1, 1).CopyFromRecordset rs
'On récupère le nombre d'éléments traités :
nbrecord = rs.RecordCount
MsgBox "Import de " & nbrecord & " enregistrement(s) !"
End If
' Ferme le jeu d'enregistrements s'il est toujours ouvert
rs.Close
Set rs = Nothing
On Error GoTo 0
Exit Sub
SelectSQL_Error:
MsgBox "(Erreur n°" & Err.Number & ") " & Err.Description
FLAG_ERREUR = True
End Sub
'FONCTION PERMETTANT D'INSERER LES DONNEES DANS LES TABLES
Sub InsertSQL()
Dim req_insert As String
On Error GoTo InsertSQL_Error
req_insert = ""
req_insert = req_insert & "INSERT INTO client(NUMCTR,CTRRAT,NOMCTR,NUMTVA,TYPACT,ADRPLG,ADRDRG,CODPOS,VILCLI,CODPAY,NUMTEL,NUMFAX,CODLAN,CODBAN,CODGUI,CPTBAN,CLEBAN,NOMCOM,CODMON,MOYPAI,NOMORG,ADRORG,ADRORG1,VILBAN,NOMTIT,DATSAI,DATSIG,FRSTRA,ADRFIS,ADRFIS1,FLGACT,FRSADH,DATDMD,FRSFOR,DATDEL,DATCIF,DATDPG,FLGBLQ,CODSWI,RESACT,RESEUR,MNTDGI,MNTDGE,TIPFRA,FLGEUR,CTCCLI,EMACLI,RDJCLI,LQJCLI,FLGPRP,DATENV,NUMPRP,CMTCLI,ADRPOS,ADRPOS1,CODPOS1,VILPOS,DATBLQ,FLGDLG,REFCTR,WEBUTI,WEBPAS,CODUTI,DATMOD,CMTDGP,IBAN,RESTIPFRA,DATRESACT,DATRESEUR,PAYBAN,FLGDPG,NUMPOR,FORCPT,NUMCCN,PAYPOS,RESTIPESP,TIPESP,NUMFCN,DATCRE,DATTRS,UTICRE,UTITRS,NUMSIR,ACCSVN,RESACCSVN,PORWEB)"
req_insert = req_insert & " VALUES ('999999','123456','GARNIER Florian','FR454545454','TRANSPORT INTERNATIONAL DE MARCHANDISES','65 KINGSTON ROAD','KINGSTON Bld Station','44120','Vertou','FRA','0044.0645.545.445','0468284612','FRA','010101','00044','11111111','55','AS24 FR','EUR','Virement','BPBA','P/O BOX44','POOLE','KINGSTON','Test - Test Ajout',{^2005/06/18},{^2005/07/18},0.00,'TEST_ADR','TEST_ADR2',0,0,{^1900/01/01},0,{^1989/08/28},{^1995/02/15},{^1998/04/28},0,'BARCGB22',0,1,0.00,0.00,1,1,'TACTAC','test@test.fr',0,0,0,{^1999/03/24},'918456','Memo','13 rue machin chose','RUE MACHIN CHOSE','44120','NANTES',{^2002/03/04},0,'E1','fffffg','aaaaa','FG',{^2004/10/24},'','FR7618829224130086560464044',1,{^2008/03/24},{^2004/03/15},'GBR',0,'1234567890',2,'0007','FRA',0,0,'0007',{^2004/03/04},{^2004/03/04},'','','234598761',0,0,0)"
'On exécute l'insert
'adCmdText : correspond à la définition textuelle d'une commande
'adExecuteNoRecords : à préciser lorsqu'une requête ne renvoie pas d'enregistrements ou lorsque l'on ne souhaite pas les récupérer.
CONNECT_FOXPRO.Execute req_insert, adCmdText + adExecuteNoRecords
On Error GoTo 0
Exit Sub
InsertSQL_Error:
MsgBox "(Erreur n°" & Err.Number & ") " & Err.Description
FLAG_ERREUR = True
End Sub
Je ne sais pas si tu seras plus avancé, mais c'est tout ce que je peux faire pour toi ! Si, il faut que tu adapte la variable CONNECT_FOXPRO en fonction du type de connexion que tu fait : peut-etre déclarer deux connexions du type :
Dim CONNECT_SQLSERV As ADODB.connection
Dim CONNECT_ACCESS As ADODB.connection
Tu devrais te renseigner sur le protocole ADO en tout cas, il tend à rempalcer ODBC !
Dans l'espoir de t'avoir un peu avancé !
Peace