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 :
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
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;
Quelqu'un pourrait-il me dire là ou cela ne colle pas.
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 ;
Merci
R.O.
Partager