Bonjour,
Dans la procédure ci-dessous, je tente de créer un fichier (ini pour l'exemple) qui regroupe toutes les caractéristiques d'une base de données type "Access" avec comme contraintes essentielles d'utiliser le moins possible de composants natifs "Delphi" et aucun appel au moteur "Access".
Pour la récupération des tables ainsi que des noms de champs, aucun probléme. Un composant ADOConnection me fournit les accès nécessaire. A l'heure actuelle, j'obtiens donc un fichier qui ressemble à celà :
Pour obtenir ce fichier, j'utilise le code 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 [PROJ.mdb] // Nom de la base de données = // Chaîne de connection compléte [ Connection String ]=Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Program Files\Firmin\Data\PROJ.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False [Cat] // nom de la table Code = // Nom des champs tels qu'il apparaissent dans la table CodeUnic = Id_1 = Id_2 = Id_3 = Id_4 = Id_5 = Name = Ptht = Puht = Quantit = Unit = [Cie] // la table suivante... Code = CodeUnic = Id_1 = Name = Ptht = Puht = Quantit = Unit =Vous avez remarquez qu'il manque les types de champs, les index etc... Or, sans création de champs persistants, donc sans création d'un ADOTable dynamique, je n'arrive pas à accéder à ces données! N'ayant pas les sources de mes bibliothéques actuellement avec moi, je vous sollicite donc afin de m'aider à retrouver les fonctions qui me permettront d'atteindre mon objectif. (Je subodore de l'API...)
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtDlgs, ExtCtrls, Db, Adodb ; type TForm1 = class(TForm) OtfDlg : TOpenTextFileDialog; StfDlg : TSaveTextFileDialog; Editeur : TMemo; Pnl1 : TPanel; Activebutton : TButton; CloseBt : TButton; SaveBt : TButton; procedure SaveBtClick(Sender: TObject); procedure CloseBtClick(Sender: TObject); procedure BoutontestClick(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.BoutontestClick(Sender: TObject); var i,j, k : integer; AConnect : TAdoconnection; Alist1, Alist2 : Tstringlist; S : string; begin Aconnect := TAdoconnection.Create(self); OtfDlg.Execute; for i:=0 to Otfdlg.Files.Count-1 do begin if (ExtractFileExt(OtfDlg.Files.ValueFromIndex[i]) ='.mdb') then With Aconnect do begin loginprompt := false; connectionstring := 'Provider=Microsoft.Jet.OLEDB.4.0;'+ 'Data Source=C'+ OtfDlg.Files.ValueFromIndex[i]+ ';'+ 'Persist Security Info=False'; provider := 'Microsoft.Jet.OLEDB.4.0'; connected := true; end; Editeur.Lines.Add('['+ ExtractFileName(OtfDlg.Files.ValueFromIndex[i]+']')+ #13+#10+ ' = '+ #10); Editeur.Lines.Add('[ Connection String ]'+ '='+ Aconnect.ConnectionString+ #13+#10); Alist1 := Tstringlist.Create; Aconnect.GetTableNames(Alist1); if Alist1.Count<>0 then for j:=0 to Alist1.count-1 do begin Alist2 := Tstringlist.Create; editeur.Lines.add(#13+#10+'['+ Alist1.strings[j]+ ']'); Aconnect.GetFieldNames(Alist1.Strings[j],Alist2); if Alist2.Count<>0 then for k := 0 to Alist2.Count-1 do Editeur.Lines.Add(Alist2.Strings[k]+' = '); end; end; Alist2.Free; Alist1.Free; Aconnect.Free; end; // procedure TForm1.CloseBtClick(Sender: TObject); begin Form1.close; end; // procedure TForm1.SaveBtClick(Sender: TObject); begin StfDlg.execute; Editeur.Lines.SaveToFile(StfDlg.FileName); end; // end. // TO DO : Sécuriser l'utilisation de OtfDlg et StfDlg
Merci par avance de toute l'aide que vous voudrez bien m'apporter.
Cordialement,
Hauwke
Partager