Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TBlobField.DefaultExpression (MSSQL varbinary) (https://www.delphipraxis.net/191456-tblobfield-defaultexpression-mssql-varbinary.html)

PeterPetersen 18. Jan 2017 13:56

Datenbank: MMSQL • Version: 2014 SP2 • Zugriff über: DevArt MyDAC

TBlobField.DefaultExpression (MSSQL varbinary)
 
Hi,

in einer MS SQL-DB habe ich ein Feld vom Typ 'varbinary(max)'.

Für ein korrespondierendes TBlobField möchte ich nun gerne einen Default-Wert über die Eigenschaft TBlobField.DefaultExpression setzen ... z.B. den Text 'Hello World' für das TBlobField 'MyBlobField'.

... ich schnall' aber nicht wie :oops:

Getippt hätte ich jetzt auf eine Zeile wie:

Delphi-Quellcode:
MyBlobField.DefaultExpression := '0x48656C6C6F20576F726C64';


Allerdings bekomme ich dann den Fehler "Filterausdruck fehlerhaft abgeschlossen" ... daraus werde ich aber nicht wirklich schlau.

Delphi-Quellcode:
MyBlobField.DefaultExpression := '''0x48656C6C6F20576F726C64''';


liefert übrigens: "Fehlende Typübereinstimmung im Ausdruck" ... was ich mir wiederum erklären könnte.

Mag mir jemand bitte sagen, wo mein Denkfehler liegt?

Danke und Gruß

Papaschlumpf73 18. Jan 2017 14:39

AW: TBlobField.DefaultExpression (MSSQL varbinary)
 
Versuch mal so etwas: ...CONVERT(VARBINARY(25), '0x9473FBCCBC01AF', 1);
Ich hab es nicht getestet.

nahpets 18. Jan 2017 14:43

AW: TBlobField.DefaultExpression (MSSQL varbinary)
 
Bekommst Du denn 'Hello World' in die Datenbank oder gibt das auch 'nen Fehler?

Könnte mir vorstellen, dass irgendwo das 0xIrgendwas als Hexwert interpretiert wird.

Oder statt
Delphi-Quellcode:
MyBlobField.DefaultExpression := '''0x48656C6C6F20576F726C64''';
mal
Delphi-Quellcode:
MyBlobField.DefaultExpression := QuotedStr('0x48656C6C6F20576F726C64');
probieren.

PeterPetersen 19. Jan 2017 08:46

AW: TBlobField.DefaultExpression (MSSQL varbinary)
 
Moin,

danke für die Vorschläge ... ich hab' jetzt folgende Varianten mal durchgespielt:

Delphi-Quellcode:
MyBlobField.DefaultExpression := '0x48656C6C6F20576F726C64';
[Fehlerhaft abgeschlossen]

Delphi-Quellcode:
MyBlobField.DefaultExpression := QuotedStr('0x48656C6C6F20576F726C64');
[Fehlende Typübereinstimmung]

Delphi-Quellcode:
MyBlobField.DefaultExpression := 'CONVERT(VARBINARY(25), ''0x9473FBCCBC01AF'', 1)';
[Fehlerhaft abgeschlossen]

Delphi-Quellcode:
MyBlobField.DefaultExpression := 'CONVERT(VARBINARY, ''0x48656C6C6F20576F726C64'', 1)';
[Fehlerhaft abgeschlossen]

Delphi-Quellcode:
MyBlobField.DefaultExpression := 'CONVERT(VARBINARY, ' + QuotedStr('0x48656C6C6F20576F726C64') + ', 1)';
[Fehlerhaft abgeschlossen]

Delphi-Quellcode:
MyBlobField.DefaultExpression := 'CONVERT(VARBINARY, ''Hello World'')';
[Fehlerhaft abgeschlossen]

Delphi-Quellcode:
MyBlobField.DefaultExpression := 'CONVERT(VARBINARY, ''''Hello World'''')';
[Fehlerhaft abgeschlossen]


Die SQL-Statements
Code:
SELECT CONVERT(VARBINARY(25), '0x9473FBCCBC01AF', 1);
SELECT CONVERT(VARBINARY, '0x48656C6C6F20576F726C64', 1);
SELECT CONVERT(VARBINARY, 'Hello World');
liefern übrigens (in der Konsole) das erwartete Ergebnis.

Ich befürchte allerdings auch, dass in der DefaultExpression eh nur kontante Wertangaben verwendet werden dürfen!? Zumindest meine ich dies aus der Doku so rauszulesen ([...] can be any valid SQL value expression [...])!?

Hat jemand noch eine Idee?

Papaschlumpf73 19. Jan 2017 12:16

AW: TBlobField.DefaultExpression (MSSQL varbinary)
 
Du könntest auch den Default-Wert schon in der Datenbanktabelle setzen, wenn dieser erst nach dem Speichern des neuen Datensatzes benötigt wird.

Andernfalls gibt es in FireDAC bestimmt auch so eine Ereignisbehandlung für Statusänderungen des Datasets. Da könntest du den Wert direkt dem Blobfield zuweisen, wenn ein neuer Datensatz angelegt wird.

Bernhard Geyer 19. Jan 2017 13:59

AW: TBlobField.DefaultExpression (MSSQL varbinary)
 
Schon mal in betracht gezogen das es für ein binärfeld nicht die möglichkeit gibt diesen mit einem Defaultwert zu belegen?

himitsu 19. Jan 2017 14:53

AW: TBlobField.DefaultExpression (MSSQL varbinary)
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1359269)
Schon mal in betracht gezogen das es für ein binärfeld nicht die möglichkeit gibt diesen mit einem Defaultwert zu belegen?

Alles, was kein Integer ist, muß als String reingegeben werden, also
Delphi-Quellcode:
'''abc'''
.
Ob
Delphi-Quellcode:
'CONVERT(VARCHAR, ''abc'')'
auch geht ... k.A., aber da es "Expression" heißt, könnte es gehn,
allerdings, heißt es überall "Fehlerhaft abgeschlossen", außer da, wo es ein String ist.
Heißt dann wohl, dass du nur Integer oder Strings reingeben kannst und zu Binär der String nicht konvertiert werden kann.

http://docwiki.embarcadero.com/Libra...aultExpression

PeterPetersen 23. Jan 2017 09:05

AW: TBlobField.DefaultExpression (MSSQL varbinary)
 
Moin,

erstmal Danke für die Antworten!

Ich glaub', ich werde mich einfach damit abfinden, dass es nicht geht was ich da vorhabe (zumindest nicht auf diesem Weg).

Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:07 Uhr.

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