![]() |
Datenbank: MSSQL • Version: 2017 • Zugriff über: FireDAC
Query.Fields[x] = ftBlob, ich benötige aber ftByte
Hallo zusammen,
ich benötige ein Query.Fields[x] vom Datentyp ftByte. Die Tabellenspalte ist wie folgt definiert:
Code:
Wenn ich im Select folgendes anwende, erhalte ich in Delphi in meinem FireDac-Query-Field den Datentyp ftByte:
[x] [varbinary](max) NOT NULL
Code:
Dann fehlen mir aber in einigen Zeilen Werte. BINARY ist einfach zu "kurz".
Select
CONVERT(BINARY, A.x) Wenn ich im Select folgendes anwende, erhalte ich in meiner FireDac-Query-Field den Datentyp ftBlob.
Code:
Hiermit sind aber zumindest alle Werte vollständig.
Select
CONVERT(VARBINARY(MAX), A.x) Gibt es irgendeine Möglichkeit als Ergebnis eines FireDac-Query-Fields anstelle ftBlob ftByte zu erhalten? Oder kann man "einfach" DataModul_1.Qry_A.Fields[4].AsBytes anwenden, obwohl das Field eigentlich ftBlob ist? Das eigentliche Ziel soll sein, dass das ftByte (oder wenn es geht) auch das ftBlob in ein String umgewandelt werden muss. In den Bytes können aber alle möglichen Zeichen vorkommen, u.a auch Zeichen für Textende, so dass viele String-Operationen dann abbrechen. |
AW: Query.Fields[x] = ftBlob, ich benötige aber ftByte
wirklich ftByte .... ein Byte ?
Oder meinst du eher ftBytes, bzw. ftVarBytes? Also sowas wie CHAR und VARCHAR, während ftBlob mehr sowas wie TEXT ist. [edit] Hmmm ... Byte ... Bytes ... hmmmmmmmmmmm Zitat:
[/edit] [edit2] Zitat:
ftByte kannte sie zwar, aber ohne Beschreibung dazu. [/edit2] Erstmal muß FireDac es auch "können" diesen Datenbank-FieldTyp in die Daten dieses Delphi-Fields zu übernehmen. Dann brauchst du auch noch den passenden TField-Typen, zum ftBytes. und wenn das geht: entweder du erstellst die TField's selber oder du mußt irgendwo den Typen registrieren. Irgendwo gibt es Übersetzungstabellen (Arrays/Listen), in welchen drin steht, was zu wem übersetzt wird. z.B. INTEGER -> eventuell noch ein ZwischenTyp in der DB-Komponente und noch Einer in der Datenbank-API -> ftInteger -> TIntegerField -> und zum Schluß haben besserere DBGrids bestimmt nochmal eine Übersetzung zum Column-Type Zitat:
Wenn, dann natürlich so in einen String konvertieren, dass diese Probleme nicht auftauchen. z.B. HEX, Base64, oder nur die "bösen" Zeichen irgendwie maskieren oder ersetzen. |
AW: Query.Fields[x] = ftBlob, ich benötige aber ftByte
Das Thema ist erledigt! Ja, es ging um TBytes.
Der Firedac Datenbanktreiber liest die Werte bei MSSQL nun korrekt aus. Bei einer Pervasive Datenbank (über ODBC) aber nicht. Wenn es in dem Feld eine Zeichenfolge für Textende gibt, bricht FireDac ab, obwohl FireDac das Feld als TBytes erkennt. Es kommt keine Fehlermeldung. Auch Pervasive selbst gibt im PCC nicht die Werte aus. Man kommt da anscheinend nur über native Btrieve dran. Ich probiere mal die original Hersteller PDAC‘s. |
AW: Query.Fields[x] = ftBlob, ich benötige aber ftByte
VarBinary(max) ist ein Blob-Feld. Siehe auch
![]() Zugriff dann eher mit LoadFromStream/SaveToStream statt AsBytes, würde ich sagen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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