![]() |
Zugriff auf Variablen im Record wie FindComponent
Hallo!
Udn zwar hab ich grad ein mehr oder weniger riesen Problem: Und zwar hab ich ein Record, der ca 100 Datensätze umfasst - brauch ich leider. Jetzt würde ich nur gerne wissen, ob es eine Funktion gibt, die wie FindComponent für eine Komponentensuche auch für Records funktioniert?! Wenn nicht?! Wie kann ich sowas selber verwirklichen, ohne dass ich meinen kompletten Record abändere?! Vielen Dank schon mal im Vorraus! mfg shark |
Re: Zugriff auf Variablen im Record wie FindComponent
kA ob ich dich richtig verstanden hab, aber dein record landet sicher inner TList oder sowas, ... DER kannst dann ne suchen funktion verpassen, in der alle items durchsuchst und dann bei einer übereinstimmung (je nachdem nach selchem feld des records du suchst) das dingen zurückgegeben wird
|
Re: Zugriff auf Variablen im Record wie FindComponent
hm... eigentlich ist es nur ein Record und kein TList-Objekt. Es schaut jedenfalls so aus:
Delphi-Quellcode:
Und in einer anderen Procedure mag ich dann praktisch eine Funktion haben, die wie folgt funktionieren sollte:
type
TTestRecord = record TestString: String; TestInteger: Integer; TestBoolean: Boolean; { etc. } end;
Delphi-Quellcode:
da es nämlich so viel Datensätze sind, mach ich lieber ein Array mit allen Namen und geh das dann die Reihe nach durch -> Schleife. Und muss somit ich nicht immer 100 Datensätze abklappern! Verstehst du was ich meine?!
procedure TForm1.Button1Click(Sender: TObject);
const TestRecordVar = 'TestString', 'TestInteger', 'TestBoolean'; var i: Integer; begin i := FindRecordVariable(TestRecordVar[1]); end; mfg shark |
Re: Zugriff auf Variablen im Record wie FindComponent
sowas geht nich...
im .NET schon |
Re: Zugriff auf Variablen im Record wie FindComponent
[edit]sorry - kein so toller beitrag von mir. nur des ganz regt mich jetzt etwas auf... da muss es doch ne lösung zu geben oder?![/edit]
|
Re: Zugriff auf Variablen im Record wie FindComponent
Delphi-Quellcode:
type
PRecord = ^TRecord; TRecord = record Name: shortstring; Plz: cardinal; end; var xListe: TList; // oder von mir aus auchn olles array (TList is auch nurn array-wrapper fallsdes noch nich wusstest) procedure AddRecord(xRecord: TRecord); begin xListe.Add(@xRecord); end; function SucheRecord(const Name: string): TRecord; var iIndex: integer; begin for iIndex := 0 to xListe.Count - 1 do if PRecord(xListe[iIndex])^.Name = Name then begin Result := PRecord(xListe[iIndex])^; Exit; end; end; |
Re: Zugriff auf Variablen im Record wie FindComponent
und das geht dann auch in delphi 7 oder?!?
|
Re: Zugriff auf Variablen im Record wie FindComponent
Zitat:
|
Re: Zugriff auf Variablen im Record wie FindComponent
freilich
< D8 ist sowieso immer die beste wahl - .NET is nich so der hit - aber das ja ne andere sache |
Re: Zugriff auf Variablen im Record wie FindComponent
@shark: dein Problem klingt eher danach, dass du nicht wirklich ein record brauchst... Kannst du die Daten nicht z.B. in 'ner TStringList abspeichern (mit Name=Wert)?
|
Re: Zugriff auf Variablen im Record wie FindComponent
Zitat:
Zitat:
Auch wenn ich es genau andersherum sehe (zumindest solange nicht D.Net gemeint ist :zwinker: ) |
Re: Zugriff auf Variablen im Record wie FindComponent
ich bin ja von berufswegen auch .NETler (kein d.net)
|
Re: Zugriff auf Variablen im Record wie FindComponent
Zitat:
Jedenfalls sitz ich hier leider nicht am Rechner, wo Delphi drauf is - konnte den Code leider bisher noch nicht testen! Werde ich aber gleich machen. @barf00s: Schon mal danke für die schnelle hilfe!!! |
Re: Zugriff auf Variablen im Record wie FindComponent
BESSER wäres ja noch wenn du von "record" auf "class" umstellst, dann brauchst dieses PRecorc() gefricke nich...
Delphi-Quellcode:
uses
Contnrs; // TObjectList type TEintrag = class private FName: string; FVorname: string; FStrasse: string; FPlz: integer; procedure SetName(const Value: string); public property Name: string read FName write SetName; // ... end; TEintraege = class(TObjectList) private function GetItems(Index: integer): TEintrag; procedure SetItems(Index: integer; const Value: TEintrag); public function FindByName(const Name: string): TEintrag; proeprty Items[Index: itneger]: TEintrag read GetItems write SetItems; default; end; implementation function TEintraege.GetItems(Index: integer): TEintrag; begin Result := TEintrag(inherited Items[Index]); end; procedure TEintraege.SetItems(Index: integer; const Value: TEintrag); begin inherited Items[Index] := Value; end; function TEintraege.FindByName(const Name: string): TEintrag; var iIndex: integer; begin Result := nil; for iIndex := 0 to Count - 1 do begin if Items[iIndex].Name = Name then begin Result := Items[iIndex]; Exit; end; end; |
Re: Zugriff auf Variablen im Record wie FindComponent
Zitat:
Sorum macht das natürlich mehr Sinn. ;) Willst du eine Art HashTable dürftest du etwas in der Art in der CodeLib finden. (IMHO von alzaimer... :gruebel: ) Bei 100 Einträgen dürften sich die Stringvergleiche noch nicht sooo dramatisch bemerktbar machen, bei mehr Elementen oder bei häufiger Nutzung wäre hier eine HashTable wohl sicher schneller. (Auch wenn ich hier immer noch keinen Sinn für einen Zugriff per String sehen kann... :gruebel: ) |
Re: Zugriff auf Variablen im Record wie FindComponent
Vielen Dank für eure Hilfe Leut, aber ich hab das Problem jetzt gelöst! Der erste Tip von barfOOs wars! Danke nochmals! Ich hab zwar keine Ahnung was genau Poniter sind, aber ich verwend sie jetz einfach einmal *lol*
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:14 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-2025 by Thomas Breitkreuz