TField alias in TSQLQuery
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.
Code:
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; |
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).
Toute aide est la bienvenue .
Merci à tous.