![]() |
Datenbank: Firebird • Version: 2.0 • Zugriff über: Zeos
Einfügen von großen Texten in ein FB TextBLOB-Feld scheitert
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
immer wenn ich versuche grössere Texte in ein Firebird-TextBlob Feld einzufügen, kommt folgende Fehlermeldung (siehe Anhamg). Vorgehensweise: qrmain.SQL.Text:='INSERT INTO POSTEIN (ID, TEXT) VALUES (NULL, '''+memo2.lines.text+''')'; qrMain.ExecSQL; In memo2 ist eben der Text. Wenn dieser relativ klein ist, geht alles, aber ab einer gewissen grösse (ca. 40KB) kommt der Fehler. Dies ist das Feld: TEXT BLOB SUB_TYPE 1 SEGMENT SIZE 30000 PS: Hab gerade gelesen: Zitat:
Was kann ich tun? |
Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei
Zitat:
Dein Fehler wird eher am NULL-Wert bei der ID liegen |
Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei
Guten Morgen,
zwei Dinge fallen mir auf: Sobald der BLOB-Text ein Apostroph enthält, ist die Syntax des SQL-Statements nicht mehr korrekt. Das lässt sich beheben:
Delphi-Quellcode:
Ein weiteres Problem ist die Größenbegrenzung bei SQL-Statements. Sie kann bei 32KB oder 64KB liegen. Die Lösung dafür sind parametrisierte Statements.
resourcestring
FMT_INSERT = 'INSERT INTO POSTEIN (id, text) VALUES (NULL, %s)'; begin with qrmain do begin SQL.Text := Format(FMT_INSERT, [QuotedStr(Memo2.Text)]); ExecSQL; end; end; Grüße vom marabu |
Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei
Hallo,
und bei der parametrisierten Query
Delphi-Quellcode:
verwenden.
ParamByName('bäa').AsBlob:= theText
Heiko |
Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei
Hallo,
@mkinzler: an dem NULL liegts nicht, denn ich verwende einen Trigger+Generator zum hochzählen und der funktioniert einwandfrei, denn wenn das Memo < 30-40KB ist, geht alles problemlos @marabu Auch die Sache mit dem QuotedStr bringt leider keine Abhilfe, immernoch der gleiche Fehler ab ca. 30-40KB Text |
Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei
Dann würde ich das ID-Feld beim Insert trotzdem weglassen und Parameter verwenden, was sowieso immer ne gute Option ist.
|
Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei
Zitat:
|
Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei
Ich würde mal Achims Antwort mit dem Puffer nochmal durchlesen.
|
Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei
Was ist die maximale Größe eines Statements in Firebird?
Die doch etwas kranke Vorgehensweise, Werte direkt in das Statement zu quetschen, könnte dieses enorm aufblähen. Es wird definitiv eine Obergrenze für die Statementlänge geben, und du wirst sie mit einem so komischen Ansatz garantiert irgendwann sprengen. Mache es also so wie es überall außer in einem VB-Forum gezeigt wird: ;) Pseudo code (Ich habe keinen Plan von Zeos ;) ):
Delphi-Quellcode:
Query.SQL.Text :=
'INSERT INTO PostEin' + #10 + ' (Text)' + #10 + 'VALUES' + #10 + ' (:Text)'; Query.Parameters.Add('Text', Memo.Lines.Text); Query.ExecSQL(); |
Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei
THX, so gehts doch!
Code:
with qrmain do
begin SQL.Text :=' INSERT INTO POSTEIN (text) VALUES (:Text)'; qrmain.ParamByName('Text').AsBlob:=memo2.Lines.Text; ExecSQL; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 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 by Thomas Breitkreuz