Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Was tun, wenn Datenfeld leer ist ? (https://www.delphipraxis.net/90652-tun-wenn-datenfeld-leer-ist.html)

LingNeu 21. Apr 2007 09:50

Datenbank: Turbodb • Version: 5.1 • Zugriff über: kein SQL, normal über Dataset s.u.

Was tun, wenn Datenfeld leer ist ?
 
Liebe Delphigemeinde
eine vorhandene Datenbank (> 50000 DS) mit folgenden Feldern:

Typ: string
Bezeichnung: string
Nr: integer

soll durch einen Import von einer anderen Tabelle um weitere 50000 DS erweitert werden.
Das hat auch einwandfrei funktioniert.
Später muss im Programm über eine Schleife eine Nr eingespeichert werden.
Leider wird beim Import das Feld Typ nicht angesprochen und bleibt somit leer.
Bei der späteren Schleife erhalte ich dann ab den neuen, eingefügten DS folgende Fehlermeldung:

"Variante des Typs(Null) konnte nicht in Typ String konvertiert werden"
Es liegt sozusagen an den leeren Datenfeldern in diesen Datensätzen.
Wie kann ich jetzt nachträglich diese Datensätze z.B. mit einem leeren String auffüllen, damit dann bei der Schleife keine Fehlermeldung kommt.
Wäre wirklich sehr, sehr dankbar für einen Hinweis.
Schönen Gruß
LingNeu

Delphi-Quellcode:
while not TdbaDaten.Eof do
begin
  TdbaDaten.Edit ;
  if TdbaDaten['Typ'] <> ''then
      begin
      // keine Änderung im Feld Nr
  end else
      begin
      TdbaDaten['Nr'] := 20042007; //Feld ändern
      TdbaDaten['Typ'] := 'Neu';
  end;
  TdbaDaten.Post ; //DS speichern
  TdbaDaten.Next; //springe weiter
end;

mkinzler 21. Apr 2007 09:52

Re: Was tun, wenn Datenfeld leer ist ?
 
Ich kenne TurboDB nicht, aber versuch mal:
Delphi-Quellcode:
if not TdbaDaten['Typ'].isNull

LingNeu 21. Apr 2007 09:59

Re: Was tun, wenn Datenfeld leer ist ?
 
@mkinzler,

danke für die Hilfe ...
leider krieg ich :
"Leider ungültige Variant-Operation"

ciao
LingNeu

mkinzler 21. Apr 2007 10:13

Re: Was tun, wenn Datenfeld leer ist ?
 
Zeig mal den (neuen) Code

raiguen 23. Apr 2007 08:33

Re: Was tun, wenn Datenfeld leer ist ?
 
Zitat:

Zitat von mkinzler
Ich kenne TurboDB nicht, aber versuch mal:
Delphi-Quellcode:
if not TdbaDaten['Typ'].isNull

Diese Art der Prüfung geht nicht, dafür aber das hier:
Delphi-Quellcode:
  if not VarIsNull(TdbaDaten['Typ']) then
  ...

LingNeu 23. Apr 2007 09:00

Re: Was tun, wenn Datenfeld leer ist ?
 
@raiguen

vielen Dank für den Tipp. Hat jetzt geklappt.
In Zukunft weiß ich Bescheid und werde evtl. die externen Daten schon vorher etwas besser aufbereiten.
Da hab ich mal wieder mein geliebt/gehasstes Access für solche Fälle entdeckt. Damit kann man ganz gut die ollen DOS-Daten gut aufbereiten.

Merci nochmals an Euch für die Hilfe
ciao
LingNeu

bluemagicon 19. Jun 2007 15:55

Re: Was tun, wenn Datenfeld leer ist ?
 
@raiguen,

Super! Danke auch von mir für die Antwort. Hat mir sehr weitergeholfen. Dennoch wüsste ich gerne, warum das so ist?! Warum kann denn nicht aus einem Datenfeld einen leeren String oder was auch immer auslesen? Würde mich echt mal interessieren.

Gruß und tausend Dank!

Bluemagicon

shmia 19. Jun 2007 16:09

Re: Was tun, wenn Datenfeld leer ist ?
 
Es gibt min. 3 Varianten, um festzustellen, ob ein Feld NULL enthält
Delphi-Quellcode:
// #1
if VarType(TdbaDaten['Typ']) = varNull then
// #2
if VarIsNull(TdbaDaten['Typ']) then
// #3 - diese Variante würde ich bevorzugen
if TdbaDaten.FieldByName('Typ').IsNull then
Wenn man einen String aus einem Feld auslesen möchte, bei dem die Möglichkeit besteht,
dass das Feld auch NULL sein kann bietet sich folgendes an:
Delphi-Quellcode:
var
   typ : string;
begin
   typ := TdbaDaten.FieldByName('Typ').AsString;
   // Variable "typ" enthält nun einen leeren String, wenn
   // a.) das Feld einen leeren String enthalten hat oder
   // b.) das Feld NULL enthalten hat
Damit wird die Exception "Ungültige Variantumwandlung" vermieden.

hoika 20. Jun 2007 12:57

Re: Was tun, wenn Datenfeld leer ist ?
 
Hallo,

das mit dem Öeerstring setzen würde auch
über ne Query gehen

Update Table set field='' where field is null


Ist einfacher zu tippen .


Heiko

bluemagicon 20. Jun 2007 14:16

Re: Was tun, wenn Datenfeld leer ist ?
 
Habs jetzt mit fieldbyname gemacht. Ist denke ich mal die beste, einfachste und kürzeste Lösung. Vielen dank nochmal.
Gruß..Bluemagicon


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 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