![]() |
AW: Wo liegt mein Denkfehler ...
Stell es dir im Delphi etwa so vor
Delphi-Quellcode:
und datenbankseitig wäre es dann ein
function TStringField.AsString: string;
begin if IsNull then Result := '' else Result := Data; end; if field.AsString = '' then
SQL-Code:
WHERE coalesce(field, '') = ''
-- oder andersrum WHERE nullif(field, '') IS NULL Dein Problem ist also, dass du dich mehr mit Boolescher Algebra beschäftigen solltest. Wenn du die Operatoren umdrehst, dann ALLE.
Delphi-Quellcode:
if (archiv = '') or archiv.isnull then
ist invertiert
Delphi-Quellcode:
aber ist nicht
if not ((archiv = '') or archiv.isnull) then
// oder if (not (archiv = '') and not archiv.isnull) then // bzw. if (archiv <> '') and not archiv.isnull then
Delphi-Quellcode:
if (archiv <> '') or not archiv.isnull then
//if (archiv <> '') or (archiv.isnull = false) then Ich kenn auch Leute die drehen es außerhalb um, weil sie es innerhalb nicht können, oder es der Dokumentation/CodeSuche wegen nicht wollen.
Delphi-Quellcode:
if true then
...; if false then else ...; if not (false) then // wobei man den eigentlichen Code ja nicht umformen muss ... umgeben geht auch ...; |
AW: Wo liegt mein Denkfehler ...
"Dein Problem ist also, dass du dich mehr mit Boolescher Algebra beschäftigen solltest"
OOOHHH jaaa.. puhh ... bin ein bisserl planlos wenn ich mir deine Variationen anschaue :oops: ... ZB: OR -> Ich dachte immer - wenn ich was in klammern setze und eine der Fragestellungen (die in klammern gesetzt wurden) - trifft zu, dann ist das If -THEN erfüllt und es geht los.. und: ich versteh nicht den Unterschied zwischen "not archiv.isnull" und "archiv.isnull = false" .. für mich sind das zwei gleiche Dinge - nur anders geschrieben. Aber vielen Dank für all die Antworten und Erklärungen :-D |
AW: Wo liegt mein Denkfehler ...
Es gibt die Konstanten TRUE und FALSE, aber es gibt auch die logischen Auswertungen TRUE und FALSE.
False ist 0 und True ist alles Andere. Boolean hat 256 Werte (Byte) und LongBool sogar 4 Milliarden (Integer), aber jeweils nur Einer ist FALSE. Im Delphi ist die True-Konstante = 1 ($01), aber in WinAPI/C++ ist die Konstante meistent -1 ($FFFFFFFF bzw $FF)
Delphi-Quellcode:
Ist im Prinzip das Gleiche, wie man auch Fließkommazahlen niemals auf Gleichheit prüft.
B := True;
if B then OK; if not B then NEE; if B = True then OK; if B = False then NEE; B := Boolean(2); // Boolean kommt aus einer Funktion und wurde z.B. "berechnet" if B then OK; if not B then NEE; if B = True then OK; // Falsch: if Byte(B) = Byte(True) then ... if 2 = 1 then if B = False then NEE; |
AW: Wo liegt mein Denkfehler ...
Delphi-Quellcode:
und
if
( (UniMainModule.d6.FieldByName('archiv').AsString = '') or (UniMainModule.d6.FieldByName('archiv').IsNull) ) then begin Feld_leer := true;
Delphi-Quellcode:
oder
if not
( (UniMainModule.d6.FieldByName('archiv').AsString = '') or (UniMainModule.d6.FieldByName('archiv').IsNull) ) then begin Feld_leer := false;
Delphi-Quellcode:
Da himitsu weiter oben bereits erläuterte, dass aus Null in der DB bei .AsString gleich '' wird, kann man das auf
Feld_leer := (UniMainModule.d6.FieldByName('archiv').AsString = '')
or (UniMainModule.d6.FieldByName('archiv').IsNull)
Delphi-Quellcode:
Feld_leer := (UniMainModule.d6.FieldByName('archiv').AsString = '')
verkürzen. |
AW: Wo liegt mein Denkfehler ...
Zitat:
Delphi-Quellcode:
setzen.
Feld_leer := True
|
AW: Wo liegt mein Denkfehler ...
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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