Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feld des Wertes Null (String) (https://www.delphipraxis.net/44765-feld-des-wertes-null-string.html)

Moin 24. Apr 2005 14:17

Datenbank: MySQL • Zugriff über: TTable

Feld des Wertes Null (String)
 
Moin zusammen,

Ich habe ein Problem mit folgendem Quellcode

Delphi-Quellcode:
begin
     dbFach.Items.Clear;

    dbFach.Items.Add(tabS2.FieldValues['lk1']);
    dbFach.Items.Add(tabS2.FieldValues['lk2']);

    dbFach.Items.Add(tabS2.FieldValues['gk1']);
    dbFach.Items.Add(tabS2.FieldValues['gk2']);
    dbFach.Items.Add(tabS2.FieldValues['gk3']);
    dbFach.Items.Add(tabS2.FieldValues['gk4']);
    dbFach.Items.Add(tabS2.FieldValues['gk5']);
    If (tabS.FieldValues['gk6'] <> '') OR (Not tabS.FieldValues['gk6'].IsNull)
    Then dbFach.Items.Add(tabS2.FieldValues['gk6']);
    If (tabS.FieldValues['gk7'] <> '') OR (Not tabS.FieldValues['gk7'].IsNull)
    Then dbFach.Items.Add(tabS2.FieldValues['gk7']);
    If (tabS.FieldValues['gk8'] <> '') OR (Not tabS.FieldValues['gk8'].IsNull)
    Then dbFach.Items.Add(tabS2.FieldValues['gk8']);
    If (tabS.FieldValues['gk9'] <> '') OR (Not tabS.FieldValues['gk9'].IsNull)
    Then dbFach.Items.Add(tabS2.FieldValues['gk9']);
end;
Die Letzten Felder können nur Null sein! dbFach is ne DatenBankComboBox. Ich hab nicht so viel Erfahrung mit Leeren DB-Feldern.
Sieht jemand den Fehler?

Danke im Vorraus für Antworten!

SirThornberry 24. Apr 2005 14:18

Re: Feld des Wertes Null (String)
 
Zitat:

Sieht jemand den Fehler?
welchen Fehler hast du denn??? Was soll der Quelltext machen?

Moin 24. Apr 2005 14:29

Re: Feld des Wertes Null (String)
 
Der Fehler
Meldung : "Ungültige Variant-Opperation"
Tritt auf, wenn ich einen Datensatz anwähle, der leere Felder besitzt (gk8, gk9).

Der Quelltext füllt eine Combobox mir den Werten der Felder in so fern die nicht leer sind.
Wenn man einen Datensatz auswählt, dann wird die table refresht, und der Quellcode dabei mit ausgeführt (AfterRefresh).

BrunoT 25. Apr 2005 09:53

Re: Feld des Wertes Null (String)
 
hallo Moin,

Du verwendest zwei Tabellen

Delphi-Quellcode:
    If (tabS.FieldValues['gk8'] <> '') OR (Not tabS.FieldValues['gk8'].IsNull)
    Then dbFach.Items.Add(tabS2.FieldValues['gk8']);
tabS und tabS2. Bei der Anfügeoperation würde ich auch auf IsNull testen.

Delphi-Quellcode:
    If (tabS.FieldValues['gk8'] <> '') OR (Not tabS.FieldValues['gk8'].IsNull)
    If (Not tabS2.FieldValues['gk8'].IsNull)Then //Nur anfügen, wenn nicht Null
    Then dbFach.Items.Add(tabS2.FieldValues['gk8']);

mfg

BrunoT

Stevie 25. Apr 2005 10:32

Re: Feld des Wertes Null (String)
 
Moin Moin, :mrgreen:

das hat nix mit der Datenbank zu tun, sondern damit, dass du versuchst, mit dem Ausdruck
Delphi-Quellcode:
if tabS.FieldValues['gk8'] <> '')
einen Variant, der Null sein kann, mit einem String zu vergleichen, und dann scheppert's!

Besser wäre es so (Delphi überprüft standardmäßig boolsche Ausdrücke von links nach rechts und bricht ab, wenn er eindeutig ist):
Delphi-Quellcode:
begin
  dbFach.Items.Clear;

  dbFach.Items.Add(tabS2.FieldValues['lk1']);
  dbFach.Items.Add(tabS2.FieldValues['lk2']);

  dbFach.Items.Add(tabS2.FieldValues['gk1']);
  dbFach.Items.Add(tabS2.FieldValues['gk2']);
  dbFach.Items.Add(tabS2.FieldValues['gk3']);
  dbFach.Items.Add(tabS2.FieldValues['gk4']);
  dbFach.Items.Add(tabS2.FieldValues['gk5']);

  if not tabS.FieldValues['gk6'].IsNull and (tabS.FieldValues['gk6'] <> '') then
    dbFach.Items.Add(tabS2.FieldValues['gk6']);
  if not tabS.FieldValues['gk7'].IsNull and (tabS.FieldValues['gk7'] <> '') then
    dbFach.Items.Add(tabS2.FieldValues['gk7']);
  if not tabS.FieldValues['gk8'].IsNull and (tabS.FieldValues['gk8'] <> '') then
    dbFach.Items.Add(tabS2.FieldValues['gk8']);
  if not tabS.FieldValues['gk9'].IsNull and (tabS.FieldValues['gk9'] <> '') then
    dbFach.Items.Add(tabS2.FieldValues['gk9']);
end;
Somit, wird erst überprüft, ob das Feld Null ist. Wenn dies nicht so ist, wird überprüft, ob der String nicht leer ist.

MfG
Stevie

Moin 29. Apr 2005 17:27

Re: Feld des Wertes Null (String)
 
Hi nochmal,

Der Quelltext sieht jetzt so aus:
Delphi-Quellcode:
begin
     dbFach.Items.Clear;

    dbFach.Items.Add(tabS2.FieldValues['lk1']);
    dbFach.Items.Add(tabS2.FieldValues['lk2']);

    dbFach.Items.Add(tabS2.FieldValues['gk1']);
    dbFach.Items.Add(tabS2.FieldValues['gk2']);
    dbFach.Items.Add(tabS2.FieldValues['gk3']);
    dbFach.Items.Add(tabS2.FieldValues['gk4']);
    dbFach.Items.Add(tabS2.FieldValues['gk5']);

    if not tabS2.FieldValues['gk6'].IsNull and (tabS2.FieldValues['gk6'] <> '') then
    dbFach.Items.Add(tabS2.FieldValues['gk6']);
    if not tabS2.FieldValues['gk7'].IsNull and (tabS2.FieldValues['gk7'] <> '') then
    dbFach.Items.Add(tabS2.FieldValues['gk7']);
    if not tabS2.FieldValues['gk8'].IsNull and (tabS2.FieldValues['gk8'] <> '') then
    dbFach.Items.Add(tabS2.FieldValues['gk8']);
    if not tabS2.FieldValues['gk9'].IsNull and (tabS2.FieldValues['gk9'] <> '') then
    dbFach.Items.Add(tabS2.FieldValues['gk9']);
end;
Ich hatte mich verschrieben, Der Quelltext soll nur auf eine Tabelle zugreifen -> tabS2

Und die Bedingungen müssen natürlich mit AND verknüpft werden...

Aber es geht immer noch nicht

Moin 29. Apr 2005 17:33

Re: Feld des Wertes Null (String)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab das gefühl, dass
Delphi-Quellcode:
tabS2.FieldValues['gk6'].IsNull
einfach nicht funzt.

Denn auch, wenn alle Felder ausgefüllt sind, tritt der Fehler auf

siehe fehler... (anhang)

marabu 29. Apr 2005 18:01

Re: Feld des Wertes Null (String)
 
Sind alle Felder vom Typ String, dann geht auch das hier - Tippfehler vorbehalten:

Delphi-Quellcode:
var
  i: integer;
  f: TField;
begin
  // iAnfang und iEnde bitte passend wählen
  for i := iAnfang to iEnde do begin
    f := tabS2.Fields[i];
    if f.AsString <> '' then
      dbFach.Items.Add(f.AsString);
  end;
end;
Grüße vom marabu

Moin 29. Apr 2005 18:22

Re: Feld des Wertes Null (String)
 
Dass is natürlich auch ne Möglichkeit ...

Es funzt jetzt super...

Du hast nur
Delphi-Quellcode:
dbFach.Items.Clear;
vergessen!

Aber Danke, du hast mir sehr geholfen


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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 by Thomas Breitkreuz