Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   IBDAC: In der DB sind Leerstrings statt Null. Alternativen? (https://www.delphipraxis.net/155237-ibdac-der-db-sind-leerstrings-statt-null-alternativen.html)

BlueStarHH 14. Okt 2010 11:25

Datenbank: Firebird • Version: 2.x • Zugriff über: IBDAC

IBDAC: In der DB sind Leerstrings statt Null. Alternativen?
 
Hallo,

ich verwende die IBDAC-Komponenten von Devart um auf Firebird zuzugreifen. Leider habe ich erst jetzt gemerkt, dass leere Strings/Null-Werte nicht richtig behandelt werden. Wenn ich das hier verwende

Code:
IBCTable1.FieldByName('myField').AsString := '';
wird das Feld mit einem leeren String gefüllt. Ich möchte aber Null im Feld stehen haben. Das passiert auch wenn ein leeres DB-Edit gepostet wird. Alle mir bekannten Kompoenten z.B. BDE oder IBX schreiben in diesen Fällen Null in die DB. Darauf ist meine ganze Anwendung ausgelgegt (2 Mio Zeilen). Ich verwenden oft Code wie if IBCTable1.FieldByName('myField').isNull

Das funktioniert nun natürlich nicht mehr wie gewüscht, da IBDAC Leerstrings und nicht Null in die DB schreibt. Jetzt meine ganze App mit allen SQL-Statements zu ändern ist zu umständlich. Wer kennt Lösungen? Ich hab den Wunsch schon an IBDAC herangetragen, doch da passiert seit Monaten nichts in der Richtung.

Wer kennt eine gute Alternative zu IBDAC (Firebird 2.x, Unicode), die in den genannten Fällen Nullwerte schreibt?

mjustin 14. Okt 2010 11:43

AW: IBDAC Leerstring statt Null. Alternativen?
 
Zitat:

Zitat von BlueStarHH (Beitrag 1055722)
Code:
IBCTable1.FieldByName('myField').AsString := '';

Wird von IBDAC dieses nicht unterstützt? So würde man in dbExpress einen Null Wert zuweisen:

Code:
IBCTable1.FieldByName('myField').Clear;

Bummi 14. Okt 2010 11:44

AW: IBDAC Leerstring statt Null. Alternativen?
 
Ich kenne Deine Komponenten nicht aber IMHO sollte

IBCTable1.FieldByName('myField').Clear

auch bei Dir gehen

Sir Rufo 14. Okt 2010 11:48

AW: IBDAC Leerstring statt Null. Alternativen?
 
Ist mE auch eigentlich korrekt, da ein Leerstring in einer DB vorkommen darf.
Man kann ein Feld in der DB auch definieren, dass dort ein Leerstring nicht zugelassen ist, wäre möglich, dass IBDAC das auch berücksichtigt (Leerstring erlaubt -> '', nicht erlaubt -> NULL)

dataspider 14. Okt 2010 12:08

AW: IBDAC Leerstring statt Null. Alternativen?
 
Zitat:

Zitat von BlueStarHH (Beitrag 1055722)
Hallo,
ich verwende die IBDAC-Komponenten von Devart um auf Firebird zuzugreifen. Leider habe ich erst jetzt gemerkt, dass leere Strings/Null-Werte nicht richtig behandelt werden

Die Behandlung ist schon korrekt. Wenn man einen leeren String übergibt, soll dieser auch so in der DB erscheinen.
AsString ist für deinen Fall schlecht.
Code:
IBCTable1.FieldByName('myField').Value := Null;
wäre als Beispiel eine Möglichkeit. Und Clear (wie bereits erwähnt) sollte es auch tun.

Frank

Lemmy 14. Okt 2010 12:10

AW: IBDAC Leerstring statt Null. Alternativen?
 
Hi,

Zitat:

Zitat von BlueStarHH (Beitrag 1055722)
Code:
IBCTable1.FieldByName('myField').AsString := '';
wird das Feld mit einem leeren String gefüllt.

Würde ich aber auch so sehen, dass da ein leerer String und kein NULL stehen soll.

Zitat:

Zitat von BlueStarHH (Beitrag 1055722)
Wer kennt eine gute Alternative zu IBDAC (Firebird 2.x, Unicode), die in den genannten Fällen Nullwerte schreibt?

Blöde Idee: IBDac ist die mir bisher einzigste Komponentensammlung die über einen WIzard realtiv einfach einen Austausch ermöglicht. Willst Du von Hand alle deine Queries und Datasets ändern?
Vorschlag:
Code:
IBCTable1.FieldByName('myField').Clear;
funktioniert, also einfach nach ".AsString := '';" Suchen und durch ".Clear;" ersetzen. Wird schneller gehen, also die Bibliothek auszutauschen....


GRüße

mkinzler 15. Okt 2010 10:39

AW: IBDAC Leerstring statt Null. Alternativen?
 
Oder schreib dir einen Trigger, der '' durch NULL ersetzt vor dem Einfügen/Update setzt

dataspider 15. Okt 2010 14:09

AW: IBDAC Leerstring statt Null. Alternativen?
 
Zitat:

Zitat von mkinzler (Beitrag 1055907)
Oder schreib dir einen Trigger, der '' durch NULL ersetzt vor dem Einfügen/Update setzt

Nicht alles, was machbar ist, ist auch sinnvoll.
Wenn man anfängt, seine nachlässige Programmierung durch Trigger in der DB abzufangen, sträuben sich bei mir die Haare.
Man sollte bei allen Lösungen sich auch die Frage stellen, ob es die saubere Lösung ist.

Frank

Int3g3r 12. Sep 2019 14:29

AW: IBDAC Leerstring statt Null. Alternativen?
 
Guten Tag,

Ich stehe gerade vor dem selben Dilemma. Ich möchte keine Leerstrings in meiner DB. Entweder hat ein Feld ein Zeichen, was kein Leerzeichen ist, oder es ist auf Null gesetzt.

Ist es möglich im BeforPost die Leerstrings zu ersetzen ?
Es wir ja das DataSet mitgegeben ist es nicht möglich die Leerstrings mit Null zu ersetzen?

Freundliche Grüsse
Int3g3r

Uwe Raabe 12. Sep 2019 14:52

AW: IBDAC Leerstring statt Null. Alternativen?
 
Betrifft das auch IBDAC? Ich frage nur, weil FireDAC eine Option StrsEmpty2Null hat, die vermutlich genau diesen Effekt aktiviert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.
Seite 1 von 3  1 23      

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