...en attendant de trouver mieux.
Ar-S t'a donné mieux il y a 6 minutes, mais peut-être que tu était en train d'écrire ?
StringField() pour découper la ligne lue et aussi supprimer le Goto.
Et j'ajoute
SetDatabaseString() pour remplacer la ligne SQL et permettre ainsi l'insertion de champs pouvant comporter guillemets ou apostrophes.
PS. Quand une variable ne sert que dans une procédure, préférer
Protected que Global ainsi la mémoire est libérée dès que la procédure est terminée.
Exemple (à vérifier et améliorer)
Code : Tout sélectionner
Procedure importer()
sql="Delete from fProdD"
CheckDatabaseUpdate(idProdD,sql)
Protected Chaine$
;Entêtes ou noms des champs
;Chaine$="FAMILLE;CODE P.;DESIGNATION DU PRODUIT; U. M. ;QTE INITIALE;P. A.;PRIX DE VENTE"
File$="Excel.csv"
If ReadFile(0, File$)
While Eof(0) = 0
Chaine$=ReadString(0)
SetDatabaseString(idProdD, 0, StringField(Chaine$, 1, ";"))
SetDatabaseString(idProdD, 1, StringField(Chaine$, 2, ";"))
SetDatabaseString(idProdD, 2, StringField(Chaine$, 3, ";"))
SetDatabaseString(idProdD, 3, StringField(Chaine$, 4, ";"))
SetDatabaseString(idProdD, 4, StringField(Chaine$, 5, ";"))
SetDatabaseString(idProdD, 5, StringField(Chaine$, 6, ";"))
SetDatabaseString(idProdD, 6, StringField(Chaine$, 7, ";"))
sql = "insert into fProdD (fam,Codeprod,Prod,um,qi,Pa,Pv)" +
" values (?, ?, ?, ?, ?, ?, ?);"
CheckDatabaseUpdate(idProdD,sql)
Wend
CloseFile(0)
EndIf
MessageRequester("Terminé","Le fichier excel a été importé avec succès!")
EndProcedure
(pas testé)
Enfin, si tu as beaucoup de lignes à insérer dans la base, tu as intérêt à les mettre toutes dans une seule transaction, ce qui évite les vérifications à chaque insertion. Envoi simplement en requête "BEGIN" au début, puis "COMMIT" après la dernière ligne (ou "ROLLBACK" pour annuler)
