Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Checken ob ein Record daten enthält? (https://www.delphipraxis.net/145531-checken-ob-ein-record-daten-enthaelt.html)

Sereby 3. Jan 2010 22:53


Checken ob ein Record daten enthält?
 
Hiho,

wie kann ich prüfen ob ein Record mit daten befüllt wurde ohne jedes element einzelnd durchzugehen und zu prüfen ob dieser leer ist?
Ich dachte es gäbe ne möglichkeit wie
Delphi-Quellcode:
  function IsEmpty: Boolean;
  begin
    Result := (SizeOf(VariableName) = SizeOf(VariableType));
  end;
aber das ergibt immer True :)
gibts da ne möglichkeit und wenn ja, welche?

MfG Sereby

omata 3. Jan 2010 23:06

Re: Checken ob ein Record daten enthält?
 
Da gibt es leider keine Möglichkeit.

Hier mal ein Beispiel (was schwierig ist, da du leider nichts konkretes angegeben hast)
Delphi-Quellcode:
function getRecord(var Data:TMyRecord):boolean;
begin
  if TheRecordIsValied then begin
    Data:=TheRecord;
    Result:=true;
  end
  else Result:=false;
end;
Dann greifst du nur auf das Record zu, wenn es auch gültige Daten enthält...
Delphi-Quellcode:
if getRecord(Data) then begin
  Value:=Data.Value
end;

rollstuhlfahrer 3. Jan 2010 23:29

Re: Checken ob ein Record daten enthält?
 
wenn es sich immer um den Selben Typ von Record handelt, kannst du auch einfach ne Variable mit ne definitiv leeren Record anlegen und mit CompareMem() oder "=" dann prüfen ob das Record dementsprechend leer ist.

Bernhard

Sereby 4. Jan 2010 00:57

Re: Checken ob ein Record daten enthält?
 
danke! CompareMem hat gefunzt.

Delphi-Quellcode:
Result := CompareMem(@FileVersionInfo, @EmptyRec, SizeOf(EmptyRec));

himitsu 4. Jan 2010 07:54

Re: Checken ob ein Record daten enthält?
 
Im Notfall kann man auch die Compilermagic und ihre automatischen Initialisierungen ausnutzen.

Einfach einen zusätzlichen "Marker"-String (AnsiString, WideString, UnicodeString ... aber keinen ShortString) oder ein Interface (String ist aber einfacher) in dem Record definieren.

Sobald man Werte zugewiesen hat, wird der String auf '*' (oder irgendwas Anderes) gesetzt.
Leert man den ecord, dann String auf '' setzen.

Und dann kann man über String <> '' prüfen, ob es schon was drinnen ist.

Bei allen anderen Prüfungen wie CompareMem und Co. muß man den Record vorher immer selber initialisieren.
(aber wenn man immer selber passend initialisiert/befüllt, dann ist es so auch vollkommen OK)


PS: Man kann auch einfach "nur" prüfen, ob bestimmte Daten im Record vorhanden sind und wenn nicht, dann ist nichts drin.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz