Entwickler-Ecke

Datenbanken - Tabellen Zugriff über der Namen der TField Komponente


Daniel L. - Mi 24.11.10 13:43
Titel: Tabellen Zugriff über der Namen der TField Komponente
Hi,

kann man auf eine Tabelle zugreifen, in dem man den Namen der TField - Komponente nimmt, und nicht den Feldnamen?

Beispiel: in einer Tabelle existiert das Feld 'Vorname'

in ClientDataSet1 ist ein TStringField definiert mit
Fieldname = 'Vorname' und
Name = 'ClientDataSet1Vorname'

Auf die Tabelle zugreifen geht z.B. mit ClientDataSet1.fieldByName (’Vorname’)
oder ClientDataSet1.fields [0]

Wie kann ich zugreifen, wenn ich den Namen der TStringField Komponente, also ClientDataSet1Vorname benutze?

Mir geht es darum, im Laufe der Entwicklung evtl. sinnvollere Namen zum Zugriff auf die Felder zu erstellen, ohne die Tabelle jedesmal umzubauen zu müssen

Vielen Dank und Gruss: Daniel


jaenicke - Mi 24.11.10 13:49

Ich benutze einfach Konstanten für die Feldnamen. ;-)


Daniel L. - Mi 24.11.10 14:03

Danke - praktische Lösung!

Nur mal so aus Interesse, ginge auch der Weg über den TField Komponentnamen?


Martok - Mi 24.11.10 14:13

ClientDataSet1Vorname.AsString?

Das kann unmöglich deine Frage sein, was genau ist das wirkliche Problem? :mrgreen:


Daniel L. - Mi 24.11.10 14:57

Mein eigentliches Problem, die Feldnamen mit anderem Namen anzusprechen als in der Tabelle vorgegeben, ist durch Jaenickes Konstanten Alias gelöst.
Ich wollte jetzt nur noch meine Idee aufgreifen, über den Komponentnamen der TField Komponente auf die Feldnamen zuzugreifen.

Irgendwas wie ClientDataSet1.FieldByName (ClientDataSet1VorName.FieldName);

...scheint aber nicht möglich zu sein?


jaenicke - Mi 24.11.10 15:28

user profile iconDaniel L. hat folgendes geschrieben Zum zitierten Posting springen:
Irgendwas wie ClientDataSet1.FieldByName (ClientDataSet1VorName.FieldName);
Du hast doch mit deinem TStringField schon das entsprechende Feld. :gruebel:
Das meinte user profile iconMartok in seinem Post auch.


Ravy - Mi 24.11.10 15:32

Es macht durchaus Sinn ein Feld nicht andauernd über FieldByName anzusprechen, wenn dieses in der Verarbeitung oft verwendet wird. FieldByName ist eine Suchroutine welche immer wieder in der Feldliste eines Records das entsprechende Feld über den Feldnamen suchen muss. Bei Records mit sehr vielen Feldern kostet das unnötig Rechenzeit.

Du kannst alternativ einfach eine Variable vom Typ TField definieren und dann das gewünschte Feld über die Variable ansprechen.

Beispiel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  Country : TField;
begin
  Country := Table.FieldByName('Country');
  ...
  ...
  Country.AsString := 'Germany';
end;


Daniel L. - Mi 24.11.10 16:18

@Jaenicke & Martok

Ähem...jetzt seh ich's auch schon :oops: