Einzelnen Beitrag anzeigen

berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#6

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

  Alt 30. Jun 2020, 13:24
@Delphi.Narium: Vielen Dank, die Problembeschreibung unter diesem Link trifft den Nagel auf den Kopf.

Ich habe zwischenzeitlich schon die Tabelle mit dem besagten Feld als VARCHAR(MAX) neu erstellt, und habe das identische Problem wie vorher. Selbst in der einfachst-möglichen Form:
Delphi-Quellcode:
      _Target.SQL.Add('SELECT TOP 1 * FROM Layout');
      _Target.Open;

      _Target.Insert;
      _Target.FieldByName('Bla').AsInteger := Random(65000);
      _Target.FieldByName('Text2').AsString := '';
      _Target.FieldByName('MeinText').AsString := '';
      _Target.Post;
Tritt das Problem wieder auf. Jedoch NICHT bei "Text2", denn das ist VARCHAR(255). Wie unter dem Link beschrieben und von mir auch so festgestellt, funktioniert es, solange das Feld mit VARCHAR nicht MAX ist. Selbst mit VARCHAR(7500) geht es, aber das ist mir dann doch echt zu knapp von der Zeichenanzahl her, also kommt ich von ftMemo als solches nicht weg, denn:
Der DataType des besagten Feldes ist übrigens tatsächlich bei VARCHAR(7500) noch ftString, bei VARCHAR(MAX) dann ftMemo. Dies ist aber eine Nur-Lesen Eigenschaft und kann durch das AdoQuery nicht verändert werden.

Auf der verlinkten Seite wird geraten, einen anderen Provider für die AdoConnection zu verwenden (den nativen vom SQL Server 12). Jetzt weiß ich jedoch nicht, ob der bei allen Windows 10 Installationen von Hause aus mit dabei ist, denn sowas will ich nun bei allen Kunden nicht auch noch extra installieren müssen. Zudem kann es sein, dass Kunden die Datenbank evtl. auf einem bestehenden Server installieren möchten, und wenn der < Version 12 ist (von wann ist die?) habe ich sehr wahrscheinlich wieder unerwartete nicht vorhersehbare Probleme beim erstellen und migrieren der Datenbank(?). In einem weiteren Beitrag wurde aber gesagt, dass dieser besagte Provider jetzt schon wieder depracated ist, und MS zurück zu OLEDB geht.


Code:
The bug is in BufferToVar -> Data := Variant(Buffer^);. – kobik Jan 29 '18 at 8:29
Äh, kann ich da sebst ne Prozedur schreiben, die das richtig Umwandelt?

Bzw. da wären wir ja schon wieder bei meiner scherzhaft gemeinten Lösung, bei "leeren String" einfach #0 in die DB schreiben zu lassen. Bessere Ideen?
Delphi 10.4 32-Bit auf Windows 10 Pro 64-Bit, ehem. Delphi 2010 32-Bit auf Windows 10 Pro 64-Bit
  Mit Zitat antworten Zitat