Entwickler-Ecke

Datenbanken - ADO Table Datenfeld auf NULL prüfen


Quake User - Do 06.01.11 00:39
Titel: ADO Table Datenfeld auf NULL prüfen
Wie prüfe ich ein Datenfeld auf NULL? Das Feld ist ja leer. Eine Prüfung wie:

Delphi-Quelltext
1:
if (DataModul.ADOTable.FieldByName('Test').Value = ''then                    

funktioniert aber nicht. Ich kann kompilieren, aber der if Fall tritt nie ein.
Der Datentyp von "Value" ist variant. Den kann ich sicher nicht auf NULL prüfen. ?


bummi - Do 06.01.11 00:50


Delphi-Quelltext
1:
If DataModul.ADOTable.FieldByName('Test').IsNull ...                    


Quake User - Do 06.01.11 01:10

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
If DataModul.ADOTable.FieldByName('Test').IsNull ...                    


Ich hatte folgendes getestet:

Delphi-Quelltext
1:
If DataModul.ADOTable.FieldByName('Test').AsString = ''                    

Aber "IsNull" ist sicher sauberer.


Tankard - Do 06.01.11 01:26

user profile iconQuake User hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte folgendes getestet:

Delphi-Quelltext
1:
If DataModul.ADOTable.FieldByName('Test').AsString = ''                    

Aber "IsNull" ist sicher sauberer.

ein leerer String und NULL sind zwei verschiede paar schuhe.
daher aufgepasst.

Moderiert von user profile iconNarses: Zitat repariert.


Tranx - Do 06.01.11 08:45

Ich weiß aus meinen ersten Erfahrungen mit Delphi XE, dass derWert NULL dort nicht definiert ist. Ich hatte bei Units, in der einer Variant-Variablen NUL zugewiesen wurden, Fehler beim Compilieren bekommen.

Daher bleibt nur die schon benannte Abfrage .isNull


Delete - Do 06.01.11 15:01

wenn variants in der uses liste steht, dann geht der check myfield.asvariant = null


Quake User - Fr 07.01.11 02:15

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
If DataModul.ADOTable.FieldByName('Test').IsNull ...                    


FYI: Ich habe festgestellt, dass "IsNull" nicht darauf prüft, ob das Datenfeld in der DB wirklich = NULL ist. Es prüft nur auf leer.
Damit ist die Prüfung auf den Leerstring genau so gut.


bummi - Fr 07.01.11 10:07

@Quake User

Einspruch Euer Ehren....
NULL und Leer('') sind zwei komplett verschiedene Sachen, spätestens beim verketten von Felder per SQL in einer ansikonformen Datenbank wirst Du dies merken.


Quake User - Mo 17.01.11 03:34

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
@Quake User

Einspruch Euer Ehren....
NULL und Leer('') sind zwei komplett verschiedene Sachen, spätestens beim verketten von Felder per SQL in einer ansikonformen Datenbank wirst Du dies merken.


Genau das habe ich doch oben geschrieben. Oder? Ich kenne den Unterschied zwischen 0 und NULL.


bummi - Mo 17.01.11 08:42

dann verstehe ich Dein letztes Posting nicht...

Delphi-Quelltext
1:
DataModul.ADOTable.FieldByName('Test').IsNull.                    

liefert bei einem Leerstring erwartungsgemäß FALSE.