![]() |
Record property über Variable aufrufen
Guten Abend zusammen,
Ich habe folgendes Problem:
Delphi-Quellcode:
function CDatabase.Search(SearchString : String; StartPos, EndPos : Integer; ToSearchIn : String) : TIntArray;
Var i : Integer; Begin If (StartPos >= 0) and (EndPos >= 0) and (EndPos < FileSize(_Datei)) then Begin For i := StartPos to EndPos do Begin _aktuellerRecord := i; LeseZeile(); If _RAdresse.Name = SearchString then //Um diese Zeile geht es Begin SetLength(Result, Length(Result) + 1); Result[Length(Result) - 1] := i; end; end; end; ShowMessage('Kein Datensatz gefunden.'); end; Dieser Quzellcode funktioniert zwar einwandfrei, doch nun möchte ich die Procedur so umstrukturieren, dass sie so aussieht:
Delphi-Quellcode:
Wie dies schon zeigt soll dadurch dem Record gesagt werden, von wo denn der Wert genommen werden soll.
function CDatabase.Search(SearchString : String; StartPos, EndPos : Integer; ToSearchIn : String) : TIntArray;
Var i : Integer; Begin If (StartPos >= 0) and (EndPos >= 0) and (EndPos < FileSize(_Datei)) then Begin For i := StartPos to EndPos do Begin _aktuellerRecord := i; LeseZeile(); If _RAdresse.ToSerachIn = SearchString then //Um diese Zeile geht es Begin SetLength(Result, Length(Result) + 1); Result[Length(Result) - 1] := i; end; end; end; ShowMessage('Kein Datensatz gefunden.'); end; Der Record sieht so aus:
Delphi-Quellcode:
Ich möchte hier nicht hören, dass ich da nen Case selector einbauen kann sondern eine praktikable Lösung. Dieses Problem hatte ich nun schon öfters ohne eine Lösung zu finden und möchte nun gerne endlich eine Lösung dafür haben. Und RTTI Varianten fallen weg, da diese meines Wissens nach erst ab Delphi 2010 gibt und ich Delphi 5 habe.
TAdresse = record
Vorname, Name, Strasse, Ort, Tel, Mail : string[50]; Plz, BuchstabenID : Integer; end; |
AW: Record property über Variable aufrufen
Ich hab keine Ahnung was du möchtest. :gruebel:
Das ?
Delphi-Quellcode:
type
TAdressString = string[50]; TAdresse = record Vorname, Name, Strasse, Ort, Tel, Mail : TAdressString; Plz, BuchstabenID : Integer; property ToSerachIn: TAdressString read Name; end; |
AW: Record property über Variable aufrufen
Nein nicht wirklich. Es soll hier nicht nur der Name gescuht werden können, sondern auch der Vorname die Telefonnummer(hier ja ein string) usw.
Deswegen soll dann in ToSearchIn übergeben werden, wonach denn nun gesucht wird(Vorname etc. pp) |
AW: Record property über Variable aufrufen
Ist es vielleicht das was Du suchst:
Delphi-Quellcode:
Gruß
If (ToSerachIn = 'Name') and (_RAdresse.Name = SearchString) then //Um diese Zeile geht es
Begin SetLength(Result, Length(Result) + 1); Result[Length(Result) - 1] := i; continue end; If (ToSerachIn = 'Vorname') and (_RAdresse.Vorname = SearchString) then //Um diese Zeile geht es Begin SetLength(Result, Length(Result) + 1); Result[Length(Result) - 1] := i; continue end; // usw. |
AW: Record property über Variable aufrufen
Zitat:
|
AW: Record property über Variable aufrufen
Achso. Jetzt versteh' ich. Nein, mit einer property geht das meines Wissens nicht, hierzu ist eine function erforderlich.
Zum Beispiel so:
Delphi-Quellcode:
type
TSearchFlag = (sfVorname, sfName, sfStrasse, sfOrt, sfTel, sfMail); TAdresse = record .. function ToSearchIn(const SearchFlag: TSearchFlag): string; end; .. function TAdresse.ToSearchIn(const SearchFlag: TSearchFlag): string; begin case SearchFlag of sfVorname: Result := Vorname; sfName: Result := Name; sfStrasse: Result := Strasse; sfOrt: Result := Ort; sfTel: Result := Tel; sfMail: Result := Mail; else Result := ''; end; end; function CDatabase.Search(const SearchString: String; const StartPos, EndPos: Integer; const SearchFlag: TSearchFlag): TIntArray; Begin .. If _RAdresse.ToSearchIn(SearchFlag) = SearchString then // Um diese Zeile geht es .. end; |
AW: Record property über Variable aufrufen
Zitat:
(Leider habe ich keine Idee wie man es besser als mit
Delphi-Quellcode:
lösen könnte.
case
Gruß K-H |
AW: Record property über Variable aufrufen
Vielleicht möchtest du ja über deinen Tellerrand hinausschauen und mal was Neues probieren.
Es gibt da z.B. sogenannte ![]() Diese Komponenten können beliebige tabellenartige Daten speichern, sortieren und suchen. Ein Memory-Dataset ist im Prinzip ein Array of Record aber auf weit abstrakterer Ebene. Ein weiterer Vorteil ist, dass man ein DBGrid direkt anbinden kann und damit sofort eine Anzeige- und Editiermöglichkeit der Daten hat. |
AW: Record property über Variable aufrufen
Danke für die Antwort und ich werde es mir sicherlich anschauen, aber leider ist es in diesem Fall nicht erlaubt, da wir mit einer Datei of REcord und zwar dem oben genannten Record arbeiten müssen.
Beim Versuch die Lösung zu implementieren, die mir hier bisher am bete gefällt:
Delphi-Quellcode:
läuft mein Delphi leider auf einen Fehler.
TAdresse = record
.. function ToSearchIn(const SearchFlag: TSearchFlag): string; end; In der Zeile function .... wird ein end; erwartet. |
AW: Record property über Variable aufrufen
Zitat:
Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz