AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken IBDAC: In der DB sind Leerstrings statt Null. Alternativen?

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

Ein Thema von BlueStarHH · begonnen am 14. Okt 2010 · letzter Beitrag vom 13. Sep 2019
Antwort Antwort
Seite 1 von 3  1 23   
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
555 Beiträge
 
Delphi 10.3 Rio
 
#1

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

  Alt 14. Okt 2010, 11:25
Datenbank: Firebird • Version: 2.x • Zugriff über: IBDAC
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?

Geändert von mkinzler (13. Sep 2019 um 07:49 Uhr) Grund: Titel angepassst, da missverständlich
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.735 Beiträge
 
Delphi 2009 Professional
 
#2

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 14. Okt 2010, 11:43
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;
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 14. Okt 2010, 11:44
Ich kenne Deine Komponenten nicht aber IMHO sollte

IBCTable1.FieldByName('myField').Clear

auch bei Dir gehen
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 14. Okt 2010, 11:48
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)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.162 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 14. Okt 2010, 12:08
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
Frank Reim
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.166 Beiträge
 
Delphi XE4 Professional
 
#6

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 14. Okt 2010, 12:10
Hi,

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.

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.434 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 15. Okt 2010, 10:39
Oder schreib dir einen Trigger, der '' durch NULL ersetzt vor dem Einfügen/Update setzt
Markus Kinzler
  Mit Zitat antworten Zitat
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.162 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 15. Okt 2010, 14:09
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
Frank Reim
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
77 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 12. Sep 2019, 14:29
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

Geändert von Int3g3r (12. Sep 2019 um 14:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
6.976 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 12. Sep 2019, 14:52
Betrifft das auch IBDAC? Ich frage nur, weil FireDAC eine Option StrsEmpty2Null hat, die vermutlich genau diesen Effekt aktiviert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf