Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   wenn a nicht existiert dann mache... (https://www.delphipraxis.net/161091-wenn-nicht-existiert-dann-mache.html)

Overprogrammer 16. Jun 2011 10:15

wenn a nicht existiert dann mache...
 
Hallo Leute,
hab ein Problem und zwar möchte ich programmieren,
dass wenn eine var (zb.a) nicht existiert, dass dann das und das gemacht werden soll..
wie mache ich das?
Brauche Hilfe
LG Overprogrammer

Phoenix 16. Jun 2011 10:17

AW: wenn a nicht existiert dann mache...
 
Wenn Du eine variable deklarierst, dann existiert sie zwangsläufig immer. Es wird z.B. immer ein Speicherbereich für sie allokiert.

Sofern 'a' z.B. ein Pointer auf irgend ein Objekt ist, kannst Du allerdings mit if not Assigned(a) then ... prüfen, ob der variable ein Wert zugewiesen wurde.

himitsu 16. Jun 2011 10:28

AW: wenn a nicht existiert dann mache...
 
Wenn etwas in A nicht existiert, dann Assigned(a), a=nil oder Dergleichen.

Wenn A selber nicht existiert, dann
Delphi-Quellcode:
{$IF not Declared(A)} ... {$IFEND}
(Type, Variable und Konstante geht ... Unit/Datei geht nicht)

Prüfen auf Compilerschalter:
Delphi-Quellcode:
{$IFOPT ...}
,
Delphi-Quellcode:
{$IFDEF ...}
, bzw.
Delphi-Quellcode:
{$IF Defined(...)}
.



PS: das "Brauche Hilfe" war nicht notwendig, da es wohl klar ist
und zuviele Smilie und Statzzeichen sind evenfalls unnötig.

hboy 16. Jun 2011 12:12

AW: wenn a nicht existiert dann mache...
 
Beim Übergeben von Objektzeigern kann das Freigeben der referenzierten Instanz zu Problemen führen. Hier habe ich mir angewöhnt, ein Listenobjekt anzulegen, welches zum Dereferenzieren von IDs genutzt wird (die Arrayelemente sind ID-Objekt-Paare) und dann nur einmalig dieses Listenobjekt zu übergeben. Alle Bezüge auf gelistete Objekte geschehen mit IDs, mit denen entweder nach einem Objekt aufgelöst werden kann oder eine klare Aussage über die Existenz des Objekts gewonnen werden kann.

Hat man wenige Objekte, lässt sich die Auflösung durch lineares Suchen umsetzen, sind es mehr, kann man sortierte Listen per divide&conquer oder über Hashfunktionen strukturiert durchsuchen.

himitsu 16. Jun 2011 12:37

AW: wenn a nicht existiert dann mache...
 
Wenn man eine Variable auf den Inhalt prüfen möchte, dann muß man diese, beim Freigeben, natürlich auch zurücksetzen. :wink:

Delphi-Quellcode:
o.Free;
o := nil;
Da es hier aber ein Problem gibt, wenn es im Free eine Exception gibt, wurde Delphi-Referenz durchsuchenFreeAndNil bereitgestellt,
welches erst die Variable auf NIL setzt und dann das Objekt frei gibt.


Wer jetzt parallel mit Kopieen der alten Variable arbeitet (z.B. in irgendwelchen Listen, anderen Variablen oder Parametern ohne VAR), ist selber Schuld, wenn dort noch der alte Objektzeiger drinsteht, selbst nach Freigabe/Änderung in der Originalvariable.

p80286 16. Jun 2011 12:53

AW: wenn a nicht existiert dann mache...
 
Ich glaube ihr spekuliert zu sehr was hinter der Ausgangsfragé steckt, ich denke das hier ein wenig Konkretisierungsbedarf besteht.
Zitat:

Zitat von himitsu (Beitrag 1106702)
Wenn etwas in A nicht existiert, dann ....
Wenn A selber nicht existiert, dann ...

Gruß
K-H

generic 16. Jun 2011 15:10

AW: wenn a nicht existiert dann mache...
 
Ich meine der Thread-Ersteller sollte sich erst einmal mit Programmiergrundlagen und Delphi-Grundlagen beschäftigen.

Wie waren noch gleich die Links in den Delphi-Treff?

DeddyH 16. Jun 2011 15:14

AW: wenn a nicht existiert dann mache...
 
Die hier?

Overprogrammer 16. Jun 2011 20:09

AW: wenn a nicht existiert dann mache...
 
ja ok danke für eure zahlreichen Antworten.
Aber ich meinte wirklich: wenn zb eine Gegenstandsnummer in einer Datenbank nicht gefunden werden kann, weil sie nicht existiert, dass dann eine Fehlermeldung gesendet wird (zb.itemnumber not found als string...)

Ps: Ja danke ich lasse die Smileys und völlig ohnehin klare Sachverhalte in Zukunft raus.

mkinzler 16. Jun 2011 20:11

AW: wenn a nicht existiert dann mache...
 
Dann frage halt die Anzahl der zurückgegebenen Datensätze aber, oder prüfe den PK auf NULL


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr.
Seite 1 von 2  1 2      

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