Bonjour,
Toujours en phase d'apprentissage de Lazarus, je bute sur une nouvelle difficulté.
Je souhaite importer un fichier de type texte (séparateur de champs ; - fin de ligne par retour ligne) par Lazarus afin d'en importer les champs dans une table (Sproduit dans mon cas) d'une base SQLITE3. Dans mon cas, j'ai choisi d'importer à l'intérieur d'une boucle les champs du fichier Texte (CSV) vers divers TEdit puis d'injecter le contenu du Tedit dans la table SQLITE gérée par les composants Zeos (l'importation directe sans passer par le TEdit serait certainement plus élégante).
Le code est le suivant :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
procedure TFormStocks.Bt_LancimpCSVClick(Sender: TObject);
Var  FichimpCSV : String ; // le nom complet du fichier CSVà traiter
          Var Fich_CSV : TextFile ;
       //   Var TamponCSV : String  ;// variable de stockage temporaire de la ligne du fichier CSV en cours de lecture
       //   Var Nomcolprod : String ; // Le Nom de chacune des colonnes du fichier CSV à importer
       //   Var NomcolDes  : String ;
       //   Var Nomcolcat  : String ;
       //   Var NomcolPrix : String ;
       //   Var NomcolQt   : String ;
          Var NbenrTotCSV  : String ;
          Var ii : integer ;
       //   Var icolCSV : Integer ; // Le nom de colonnes du fichier CSV (traduit en  entier)
 
begin
  Try
    FichimpCSV :=  FNE_impCSV.FileName ; // Choix du fichier à importer (utilsasation d'un TfileEditName
  Sdf_SQlite.active := False ;
  assignfile(Fich_CSV, FichimpCSV) ;   //assignation de Fic_CSV comme un fichier  texte
 
  Sdf_Sqlite.FileName := FichimpCSV ;    //QuotedStr('FichimpCSV') ;  // renseigne les propriétés du contrôle TSDFDataset : Sdf_SQLite -
  Sdf_SQlite.Delimiter := ';';
  Sdf_SQlite.FirstlineAsSchema := True ;  // La première ligne du fichier CSV est le nom de la colonne
  // La propriété FieldsDefs du contrôle Sdf_Sqlite est définie avec 5 champs
  // FiledProd FieldDesign.. correspondants à ceux de la table Sproduit
  //ils sont tous du type frString
  ZC_Stock.Connected := True ;  // on s'assure que les accès à la table SProduit sont possibles
  ZQ_Stock.active := True ;
  //****************************************************
  // fin de la configuration du contrôle TSdfDataset Sdf_SQlite
  Sdf_Sqlite.Open ; //Ouverture du fichier CSV
  reset(Fich_CSV) ;  // se positionne à la première ligne du fichier
  NbenrTotCSV := intToStr(Sdf_SQlite.recordcount) ;
//  icolCSV := StrToInt(ED_NbColCSV.Text) ;
  ii := 0 ;  // compteur de lecture du fichier à importer
 
 While not  EOF(Fich_CSV) Do  // la référence au fichier CSV  est faite à partir du nom de l'asignation
       Begin
       ii := ii +1 ;
       Lb_Compt1.caption := intToStr(ii) + ' / ' +   NbenrTotCSV ;   //Nb d'enreistremets lus et Nb total
       // Traitement des enregistrements
       Ed_ProdC.text := Sdf_SQlite.FieldByName(quotedStr('FieldProd')).AsString ; // Lecture et affectation du champ du CSV
       Ed_DesC.text := Sdf_SQlite.FieldByName('FieldDesign').AsString ;
       Ed_CatC.text := Sdf_SQlite.FieldByName('FieldCat').AsString ;
       Ed_PrixC.text := Sdf_SQlite.FieldByName('FieldPrix').AsString ;
       Ed_QtC.text := Sdf_SQlite.FieldByName('FieldQt').AsString ;
       // transfert du contenu vers la Table Sproduit de la DB
         DBED_Produit.datafield := Ed_ProdC.text ; // injection de la donnée dans la table Sproduit
         DBED_Designation.DataField := Ed_DesC.text;
         DBCB_Categorie.datafield := Ed_CatC.text  ;
        // DBED_Prix.datafield := '12,32'  ;
        // DBED_Quantite := Ed_QtC.text ;
         // Mise à jour de la table
         ZQ_Stock.append;
         ZQ_Stock.post  ;
       end;
       Closefile (Fich_CSV) ;  // fermeture du fichier CSV après lecture
       Sdf_SQlite.active := False ;
       ZQ_Stock.active := False ;
       ZC_Stock.Connected := False ;
       ShowMessage('Importation du fichier texte réussie ');
  Except
    ShowMessage(' Vérifiez le nom complet et la structure du fichier à importer') ;
   end;
end;
Cela fonctione convenablement pour le choix de la base mais la boucle d'importation pour l'ajout à la table SQLITE provoque une erreur sur la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
  Ed_ProdC.text := Sdf_SQlite.FieldByName(quotedStr('FieldProd')).AsString ; // Lecture et affectation du champ du CSV
       Ed_DesC.text := Sdf_SQlite.FieldByName('FieldDesign').AsString ;
       Ed_CatC.text := Sdf_SQlite.FieldByName('FieldCat').AsString ;
       Ed_PrixC.text := Sdf_SQlite.FieldByName('FieldPrix').AsString ;
Quelqu'un pourrait-il me dire là ou cela ne colle pas.

Merci

R.O.