Comment coder delphi (pascal) pour récuperer certains champs d'une feuille exel (csv) et les copier dans une table de la base ACCESS.








Comment coder delphi (pascal) pour récuperer certains champs d'une feuille exel (csv) et les copier dans une table de la base ACCESS.
Salut;
Utilises les composants serveurs Acces et Excel sur la palette Servers.
En plus, ya des trucs très sympa pour la récupération de données dans la FAQ Delphi.








Dans la fac j'ai lu l'article de Laurent Dardenne "charger directement un fichier csv dans une table Access" mais je dois avouer que le déroulement de l'ensemble des procedures qui le composent me parait compliqué vu mon niveau ,je vais tenter de persévèrer dans cette étude.
Je vais donc également orienter mes recherches vers les composants servers ami Kelloucheaeh.
Bonjour,
voici ce qu'il te faut pour importer un csv vers une table Access :
Et pour appeler ce code :
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 Procedure CreerSchemaIni(APath, ANameOnly: TFileName; const ADelimiteur: ShortString); var SchemaIni: TIniFile; begin SchemaIni:=Nil; try SchemaIni:=TIniFile.Create(IncludeTrailingPathDelimiter(APath)+'Schema.ini'); SchemaIni.WriteString(ANameOnly, 'Format', 'Delimited('+ADelimiteur+')'); finally SchemaIni.Free; end; end; procedure ImportDirectCVSToBase(ADOObject : TADOConnection ; PathFichierCSV, NomFichierCSV, DBPath:TFileName ; NomTable : string ; Delimiteur : Char); const Requete='INSERT INTO [%s] IN "%s" SELECT * FROM %s'; begin try CreerSchemaIni(PathFichierCSV, NomFichierCSV,Delimiteur); ADOObject.Close; ADOObject.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+PathFichierCSV+';Extended Properties="text;HDR=YES;Format=Delimited"'; ADOObject.Execute(Format(Requete,[NomTable,DBPath,NomFichierCSV])); Except on E:Exception do begin showmessage(E.Message); end; end; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part ImportDirectCVSToBase(ADOconnection1,cheminfichiercsv, nomfichiercsv, DBPath, 'matable',';');








Hé zemeilleurofgreg j'ai lu tes posts ,celui ci et tes précédents courant juillet sur l'importation d'un fichier CSV dans une table Access.
J'ai placé sur ma feuille un tadoconnection1,un tadotable1,j'ai relié le tout .
J'ai essayé de recréer la même chose sur une form delphi ,mais sans y parvenir ,en fait je n'ai pas compris ou placer le code que tu décris ci dessus.
Sur la feuille code de la form,si je le place aprés begin une erreur de structure me précise qu'il ne s'attendait pas a y trouver une Procedure,mais si je le place a la fin de la procedure principale qui souvre en cliquant sur la form ,il m'annonce la même erreur ,le tout agrémenté de plusieurs autres qui en découlent.
Je viens de me rapeler que je pourais peut être le placer dans un bouton mais cela va t'il fonctionner!
S'il te plait pourais tu m'apporter des précsisions sur la manière d'intégrer ce code et quels objets je dois placer sur ma feuille ou/et si possible une copie de feuille de code concernant l'importation d'un fichier CSV dans la Base Access ce qui constituerais un exellent tuto.
D'autre part j'ai un doute sur la façon de renseigner les variables apathonly,afichieronly.
Je précise que je n'ais qu'une connaissance toute perso dans les bases de données et delphi , j'ai lu il y a logtemps le livre MS ACCESS ,je recherche de l'info sur internet mais il y a vraimement beaucoup trop de choses a lire et le temps me manque pour tout déchiffrer et comprendre.
A+
Salut,
résolvons le problème des pseudos messages d'erreurs ...
voici le code modifié pour toi :
moi j'ai utilisé TForm1 devant mes procédures parce que ma Form s'appelle Form1 mais si ta form s'appelle toto, utilises TToto !
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
65
66
67
68
69
70
71
72
73
74
75 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ADODB,IniFiles, DB; type TForm1 = class(TForm) btnImporter: TButton; ADOConnection1: TADOConnection; procedure btnImporterClick(Sender: TObject); private Procedure CreerSchemaIni(APath, ANameOnly: TFileName; const ADelimiteur: ShortString); procedure ImportDirectCVSToBase(ADOObject : TADOConnection ; PathFichierCSV, NomFichierCSV, DBPath:TFileName ; NomTable : string ; Delimiteur : Char); public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} Procedure TForm1.CreerSchemaIni(APath, ANameOnly: TFileName; const ADelimiteur: ShortString); var SchemaIni: TIniFile; begin SchemaIni:=Nil; try SchemaIni:=TIniFile.Create(IncludeTrailingPathDelimiter(APath)+'Schema.ini'); SchemaIni.WriteString(ANameOnly, 'Format', 'Delimited('+ADelimiteur+')'); finally SchemaIni.Free; end; end; procedure TForm1.ImportDirectCVSToBase(ADOObject : TADOConnection ; PathFichierCSV, NomFichierCSV, DBPath:TFileName ; NomTable : string ; Delimiteur : Char); const Requete='INSERT INTO [%s] IN "%s" SELECT * FROM %s'; begin try CreerSchemaIni(PathFichierCSV, NomFichierCSV,Delimiteur); ADOObject.Close; ADOObject.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+PathFichierCSV+';Extended Properties="text;HDR=YES;Format=Delimited"'; ADOObject.Execute(Format(Requete,[NomTable,DBPath,NomFichierCSV])); Except on E:Exception do begin showmessage(E.Message); end; end; end; procedure TForm1.btnImporterClick(Sender: TObject); var cheminfichiercsv,nomfichiercsv,chemindatabase:TFileName; begin cheminfichiercsv:='C:\Program Files\'; nomfichiercsv:='toto.csv'; chemindatabase:='C:\Program Files\mabase.mdb'; ImportDirectCVSToBase(ADOconnection1,cheminfichiercsv, nomfichiercsv, chemindatabase, 'matable',';'); //ADOconnection est un objet ADO que tu déposes sur ta form et connecte à ta DB //cheminfichiercsv est le chemin du fichier sans le nom du fichier ==> ex : C:\Program Files\ //nomfichiercsv est le nom du fichier csv ==> ex : toto.csv //DBPath est le chemin de la base de données comportant le nom de celle ci //'matable' est le nom de la table dans laquelle je veux envoyer les données de mon fichier csv end; end.
Partager