AGB  ·  Datenschutz  ·  Impressum  







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

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

Ein Thema von BlueStarHH · begonnen am 14. Okt 2010 · letzter Beitrag vom 7. Okt 2019
Antwort Antwort
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 12. Sep 2019, 15:30
Du solltest zum Einen überprüfen, ob du das Feld überhaupt beschreiben darfst, und zum Anderen, ob es nicht schon NULL ist. Auch ein NULL-Wert liefert einen Leerstring bei AsString.
Ahh, sehr gute Überlegung. Besten Dank an das hätte ich nicht gedacht!
Das hätte irgendwann ne Exception gegeben.
Wurde nun angepasst!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 12. Sep 2019, 15:32
Alternativ könntre man dies auch mit einem Trigger lösen; wäre dann unabhängig von den Komponenten/Programm.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#3

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 12. Sep 2019, 15:36
Statt TrimRight(TrimLeft(... kannst du dich auch gleich Trim(... schreiben, oder?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 12. Sep 2019, 15:39
Statt TrimRight(TrimLeft(... kannst du dich auch gleich Trim(... schreiben, oder?
Hast recht hab das nochmals nachgelesen.
Habe gedacht aus " Hallo Welt " würde danach "HalloWelt"

Zitat:
Alternativ könntre man dies auch mit einem Trigger lösen; wäre dann unabhängig von den Komponenten/Programm.
Hatte ich schon vorher gelesen. Da ich mich mit der FireBird-Syntax noch schlechter auskenne als in Delphi, habe ich mir gedacht ich lasse das lieber.

Geändert von Int3g3r (12. Sep 2019 um 15:43 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 12. Sep 2019, 15:51
Hatte ich schon vorher gelesen. Da ich mich mit der FireBird-Syntax noch schlechter auskenne als in Delphi, habe ich mir gedacht ich lasse das lieber.

Ist einfach

SQL-Code:
SET TERM ^^ ;
CREATE TRIGGER <TABELLE>_BI FOR <TABELLE> ACTIVE BEFORE INSERT or UPDATE POSITION 0 AS
begin
  if ( new.<Feld> = '') then new.<Feld> = NULL;
end ^^
SET TERM ; ^^
Markus Kinzler

Geändert von mkinzler (12. Sep 2019 um 16:12 Uhr) Grund: Trigger auf Ereignis "UPDATE" erweitert
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 12. Sep 2019, 16:31
Zitat:
Ist einfach
Danke für das Beispiel. Werde es ggf. später benutzen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 12. Sep 2019, 16:52
Hallo,
Zitat:
Ich möchte keine Leerstrings in meiner DB
Es gibt doch da auch Unterschiede.

Null = Wert nicht bekannt
"" = Wert bekannt, ist aber leer.
Heiko
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: IBDAC Leerstring statt Null. Alternativen?

  Alt 3. Okt 2019, 09:42
Ich versuche nun gerade auf der Datenbankseite dies zu realisieren.
Mir ist folgendes Beispiel zu umständlich, ich möchte nicht jedes Feld manuell im Trigger eintragen müssen:

SQL-Code:
SET TERM ^^ ;
CREATE TRIGGER <TABELLE>_BI FOR <TABELLE> ACTIVE BEFORE INSERT or UPDATE POSITION 0 AS
begin
  if ( new.<Feld> = '') then new.<Feld> = NULL;
end ^^
SET TERM ; ^^
Momentan habe ich im IBExpert einen "Parsing Error" den ich nicht weg bekomme.
Ich möchte das er automatisch die Felder der Tabelle holt und alle kontrolliert:

SQL-Code:
CREATE OR ALTER trigger "_TBTEST_BI0" for "_TBTEST"
active before insert position 0
AS
    declare variable field_name varchar(255);
begin
    for select rdb$field_name from rdb$relation_fields where rdb$relation_name=upper('_TBTEST') into :field_name
  do
  begin
    if (new.:field_name = '') then new.:field_name = NULL; --new.:field_name (Parsing error!)
  end
end
Gruss Int3g3r
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.360 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 4. Okt 2019, 08:02
Der Doppelpunkt ist nicht so universell einsetzbar wie sich das mancher wünscht.
Der ist halt für Parameter - nicht zum Basteln eines Statements.

Du kannst IMO nur eine SP (als Beispiel: sp_check_emty_strings) schreiben, welche als Parameter den Tabellenname und den PrimaryKey-Wert bekommt.
In des SP baust du das Statement als string und führst das Statement mit execute statement ... aus.

In der Tabelle benötigst du dann einen AFTER INSERT OR UPDATE Trigger.

Im Trigger steht dann nur noch: execute procedure sp_check_emty_strings('TABELLENNAME', new.id)

Frank
Frank Reim
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:48 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-2025 by Thomas Breitkreuz