Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Leeren Text "" in MS-SQL Feld NOT NULL Problem (https://www.delphipraxis.net/204800-leeren-text-ms-sql-feld-not-null-problem.html)

Delphi.Narium 30. Jun 2020 14:39

AW: Leeren Text "" in MS-SQL Feld NOT NULL Problem
 
Eventuell:
Delphi-Quellcode:
  t := trim(_Source.FieldByName(MeinText).AsString);
  if t = '' then begin
    _Target.FieldByName(MeinText).AsVariant := EmptyParam; // <-- Das ist die "Variantversion von Null". (Bei Delphi 7 in Variants definiert.)
  end else begin
    _Target.FieldByName(MeinText).AsString := t;
  end;
Beim Lesen von so einer Spalte mit .AsString bekommt man immer einen leeren String.

berens 30. Jun 2020 14:55

AW: Leeren Text "" in MS-SQL Feld NOT NULL Problem
 
Typecastfehler :/

Ansonsten aber gute Idee...

Jumpy 30. Jun 2020 14:59

AW: Leeren Text "" in MS-SQL Feld NOT NULL Problem
 
Als Krücke für die spätere Abfrge geht in MSSQL dann:

WHERE ISNULL(BLA,'')=''

Delphi.Narium 30. Jun 2020 15:26

AW: Leeren Text "" in MS-SQL Feld NOT NULL Problem
 
Einen noch:
Delphi-Quellcode:
t := trim(_Source.FieldByName(MeinText).AsString);
if t = '' then begin
  _Target.FieldByName(MeinText).Value := EmptyParam; // <-- Das ist die "Variantversion von Null". (Bei Delphi 7 in Variants definiert.)
end else begin
  _Target.FieldByName(MeinText).AsString := t;
end;

berens 30. Jun 2020 16:22

AW: Leeren Text "" in MS-SQL Feld NOT NULL Problem
 
> _Target.FieldByName(MeinText).Value := EmptyParam
Auch das ergibt einen Laufzeitfehler.

Mein Witz von vorhin scheint sich doch allmählich als realistisch(st)e Lösung hervorzustun.

Delphi-Quellcode:
  t := trim(_Source.FieldByName(MeinText).AsString);
  if trim(t) = '' then begin
    _Target.FieldByName(MeinText).AsString := #0;
  end else begin
    _Target.FieldByName(MeinText).AsString := t;
  end;
Das hätte in meinem Fall den Vorteil, dass das "MeinText" Feld ja nur an wenigen Stellen geschrieben, dafür an vielen Abgefragt wird (evtl. NULL Problematik im SELECT) und ich eben hier nur ein paar wenige "gut auffindbare" Stellen im Quelltext, die angepasst werden müssen.

Meines bescheidenen Wissens nach, sind Strings ja "Nullterminiert", also mit #0 als letztes Byte am Ende. Somit müsste eigentlich für den Fall t='' der Eintrag in der Tabelle stimmen, bzw. Byte-mäßig identisch sein mit den DEFAULT Werten, wenn ich "MeinText" in einem neuen Datensatz gar nicht schreibe(?).

Wenn ich eine Abfrage mache
Code:
SELECT * FROM Layout WHERE MeinText=''
und die Gegenabfrage
Code:
SELECT * FROM Layout WHERE MeinText<>''
werden nun zumindest scheinbar alle Datensätze zurück gegeben - entweder in der einen, oder anderen Abfrage. In sofern KÖNNTE es stimmen...?

hoika 1. Jul 2020 05:42

AW: Leeren Text "" in MS-SQL Feld NOT NULL Problem
 
Hallo,
nimm Queries und PramByName().Clear

TigerLilly 1. Jul 2020 08:17

AW: Leeren Text "" in MS-SQL Feld NOT NULL Problem
 
Vielleicht möchtest du auch den Unterschied zwischen VARCHAR und NVARCHAR nachlesen:

https://docs.microsoft.com/de-de/sql...l-server-ver15

https://www.mssqltips.com/sqlservert...ar-data-types/

himitsu 1. Jul 2020 11:50

AW: Leeren Text "" in MS-SQL Feld NOT NULL Problem
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1468576)
Wenn es Probleme gibt, spendiere der MS-SQL-Tabelle 'nen Trigger, der Dir einen Defaultwert in die Spalte schreibt.

Definiere die Spalte als NOT NULL und sorge datenbankseitig bei geliefertem Null, Leerstring, ...

Falls das überhaupt funktioniert.

Wenn die Connection-Komponente im TDataSet/TField das Required auf True setzt, wenn NOT NULL erkannt wurde, dann lässt sich kein Dataset.Post mehr absetzen, so lange das Feld leer ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.
Seite 2 von 2     12   

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