Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Eigenschaften eines Objektes indirekt aufrufen
Jean-Christoph - Do 05.06.03 16:08
Titel: Eigenschaften eines Objektes indirekt aufrufen
Also ich möchte gerne eine Eigenschaft für ein Delphi Objekt referenziert aufrufen.
Wie zum Beispiel:
Wasweisich := MyObjet.MyProperty;
Ist der normal aufruf.
MyProperty habe ich aber variabel in einer Datenbank und will die
Zuweiung so vornehmen:
MyString:= Table.FieldByName(´dbfeld’).AsString;
Wasweisich := MyObject.MyString;
Aber das geht natürlich nicht.
Wie funktioniert sowas?
Motzi - Do 05.06.03 16:13
Schau dir mal die Methode FieldAdress an und beschäftig dich eventuell ein bisschen mit der RTTI (RunTime Type Information)...
Jean-Christoph - Do 05.06.03 18:15
Vielen Dank für die Antwort aber Fieldaccess kennt das object nicht
und bei den RTTI vertehe ich den Zusammenhang mit meinem Problem
noch nicht
Motzi - Do 05.06.03 18:20
Nicht FieldAccess sondern FieldAdress! ;) FieldAdress ist eine Methode von TObject und daher bei jedem Objekt verfügbar!
Jean-Christoph - Do 05.06.03 18:39
Hallo Motzi,
entschuldige bitte, das war ein Verschreiber. ich habe FieldAdress ausprobiert aber das Objekt kennt die Methode nicht.
MyNameSpace := MyOutlook.GetNamespace('MAPI');
MyFolder := MyNameSpace.GetDefaultFolder(olFolderContacts);
dbf.dataue.Tablename:= 'UE'+trim(inttostr(nr))+'.DBF';
dbf.dataue.Databasename := sTmp+'\dataue';
dbf.dataue.open;
For i := 1 to MyFolder.Items.Count do
Begin
MyContact := (MyFolder.Items.Item(i) As _ContactItem);
dbf.dataue.first;
while not dbf.dataue.eof do
begin
if trim(dbf.dataue.FieldbyName('dbname').AsString) <> '' then
begin
Mailstring := dbf.dataue.FieldbyName('dbname').AsString;
dbf.adr.FieldByNAme(dbf.dataue.FieldbyName
('db_feld').AsString).AsString :=
///////
MyContact.FieldAdress(mailstring);
////////
end;
dbf.dataue.next;
end;
end;
finally
end;
MyOutlook.quit;
Das ist der Quellcode vielleicht erkennst Du ja wo der Fehler ist?
AXMD - Do 05.06.03 18:53
Hi,
kleiner Tipp: Code-Tags/Delphi-Tags setzen!
AXMD
maximus - Fr 06.06.03 10:36
Nur zur info, warum dir rtti weiterhelfen könnte: RTTI bedeutet 'runtime type information' und du kannst damit published properties von objekten setzen/lesen, wenn du zB. den property-namen nur als string vorliegen hast...und noch vieles mehr. RTTI ist im prinzip ein haufen tabellen (records) in denen background-infos zu den klassen gespeichert sind... Also genau das, was du brauchst.
Die meisten rtti-funktionen befinden sich in der unit 'typInfo' und deine objekte sollten von TPersistent abgeleitet sein...oder mit der directive {$r+} (glaub ich) erstellt sein.
viel spass.
PS: auf dieser seite findest du eine rtti service klasse, die dir das leben einfacher machen könnte:
http://www.joachimdevries.de/Download/download.html
Motzi - Fr 06.06.03 10:53
Ganz genau.. über die RTTI kannst du dir die Adressen deiner properties auch selber raussuchen. Mit der Methode FielAdress wäre es halt einfacher, aber die basiert intern auch nur auf den RTTIs...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!