Bonjour à tous,
J'utilise un TSQLQuery pour charger les données depuis un serveur postgresql.
J'utilise des alias de colonnes dans la chaine SQL pour pouvoir générer des libellés et visuels sur la fenêtre pour afficher les données. Le souci est que je n'arrive pas à récupérer le nom original des champs de la table.
J'ai besoin d'une fonction genre dataset.Fields'[i]'.FieldOriginalName qui retourne srpnam ou srpnum (nom de colonne dans la base de données).
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 var MainForm: TMainForm; FCon : TPQConnection; FTrs : TSQLTransaction; Libelles: array [0..100] of TLabel; Champs : array [0..100] of TWinControl; sqlSRPList: string = 'select srpnum as "ID", srpnam as "Designation" from salesrep order by "ID";'; sqlSRPForm: String ='select srpnum as "&Identifiant", srpnam as "&Nom",'+ 'datein as "Date entrée", dateout as "Date de sortie",'+ 'isactive as "Actif" from salesrep;'; procedure TMainForm.FormCreate(Sender: TObject); begin FCon := TPQConnection.Create(self); FCon.DatabaseName:= '********'; FCon.UserName := 'postgres'; FCon.HostName := '**********'; FCon.Password := '*********'; FTrs := TSQLTransaction.Create(MainForm); FTrs.DataBase := FCon; end; function TMainForm.GetQuery : TSQLQuery; var AQuery : TSQLQuery; begin AQuery := TSQLQuery.Create(MainForm); AQuery.Database := FCon; AQuery.Transaction := FTrs; Result := AQuery; end; procedure TMainForm.BuildForm(panel: TGroupBox; sql: string); var i, ColCount, LabelWidth : integer; dataset : TSQLQuery; begin LabelWidth:=0; if panel.ComponentCount>0 then exit;; //Initialiser la requete dataset := GetQuery; dataset.SQL.Text := sql; dataset.Open; colcount :=dataset.Fields.Count; //Le nombre de colonnes //Loop 1: //Calculer la largeur des libélles For i:=0 to colcount-1 do begin if LabelWidth < Canvas.TextWidth(dataset.Fields[i].FieldName) then LabelWidth:= Canvas.TextWidth(dataset.Fields[i].FieldName)+10; end; //Loop 2: for i:=0 to colcount-1 do begin //Création des champs case dataset.FieldByName(dataset.Fields[i].FieldName).DataType of ftString:begin Champs[i] := TmzEdit.Create(panel); //Crée champ Champs[i].width := dataset.Fields[i].Size*11; //Fixe largeur TmzEdit(Champs[i]).MaxLength:=dataset.Fields[i].Size;//Fixe taille saisie end; ftBoolean :Champs[i] := TCheckBox.Create(panel);//Crée champ à cocher ftdate :Champs[i] := TmzDateTime.Create(panel);//Crée champ date end; with Champs[i] do begin Parent := panel; Top := 5+(20*i); Left := LabelWidth; end; //Création des libéllés Libelles[i] := TLabel.Create(panel);//Créer les libellés with Libelles[i] do begin Parent := panel; Top := 5+(20*i); Left := 5; Width := LabelWidth; Caption:=dataset.Fields[i].FieldName; FocusControl:=Champs[i]; //Affecte raccourci clavier au champ adequat end; end; panel.Height:=((panel.ComponentCount div 2)+1)*20; dataset.Close; dataset.Free; end;
Toute aide est la bienvenue .
Merci à tous.
Partager