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 |
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. |
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:
(Type, Variable und Konstante geht ... Unit/Datei geht nicht)
{$IF not Declared(A)} ... {$IFEND}
Prüfen auf Compilerschalter:
Delphi-Quellcode:
,
{$IFOPT ...}
Delphi-Quellcode:
, bzw.
{$IFDEF ...}
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. |
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. |
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:
Da es hier aber ein Problem gibt, wenn es im Free eine Exception gibt, wurde FreeAndNil bereitgestellt,
o.Free;
o := nil; 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. |
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:
K-H |
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? |
AW: wenn a nicht existiert dann mache...
|
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. |
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
|
AW: wenn a nicht existiert dann mache...
Hmm ok.
Probier ich mal. Aber wäre nett wenn mir irgendeiner den kompletten Complimierungstext dazu sendet den ich mir dann nur entsprechend um ändere. LG Overprogrammer |
AW: wenn a nicht existiert dann mache...
SQL-Code:
select
* from tabelle where id = :gesuchterwert;
Delphi-Quellcode:
bzw.
if DataSet.RecordCount = 0 then ...
Delphi-Quellcode:
if DataSet.FieldByName('ID').isNull then ...
|
AW: wenn a nicht existiert dann mache...
Oder wenn es genügt, eine evtl. leere Datenmenge abzuprüfen:
Delphi-Quellcode:
if Dataset.EOF then
|
AW: wenn a nicht existiert dann mache...
Ggf. mußt du auf '' oder ' ' prüfen, es kommt darauf an was der Initialwert des Feldes ist, bzw. womit der Feldinhalt bei löschungen überschrieben wird.
Gruß K-H |
AW: wenn a nicht existiert dann mache...
Ok danke funktioniert alles perfekt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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