AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Einfügen von großen Texten in ein FB TextBLOB-Feld scheitert
Thema durchsuchen
Ansicht
Themen-Optionen

Einfügen von großen Texten in ein FB TextBLOB-Feld scheitert

Ein Thema von Gecko · begonnen am 29. Mai 2007 · letzter Beitrag vom 29. Mai 2007
Antwort Antwort
Gecko
(Gast)

n/a Beiträge
 
#1

Einfügen von großen Texten in ein FB TextBLOB-Feld scheitert

  Alt 29. Mai 2007, 00:55
Datenbank: Firebird • Version: 2.0 • Zugriff über: Zeos
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:
Segmentlänge
Bei der Definition eines Blobs kann man außerdem eine Segmentlänge angeben. Der
Standardwert beträgt 80 Byte, der größtmögliche Wert 32767 Byte (bzw. 32 kByte). Die
Segmentlänge gibt an, wieviel IB/FB auf einmal von einem Blob verarbeiten kann. Eine
Änderung des Standardwert bringt nicht wirklich Vorteile.
Heisst das ich kann maximal einen 32KB grossen BLOB speichern?

Was kann ich tun?
Miniaturansicht angehängter Grafiken
error_199.jpg  
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei

  Alt 29. Mai 2007, 05:22
Zitat:
Heisst das ich kann maximal einen 32KB grossen BLOB speichern
? Nein bei einer Schreib-/Lese-vorgang.
Dein Fehler wird eher am NULL-Wert bei der ID liegen
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei

  Alt 29. Mai 2007, 06:14
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:
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;
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.

Grüße vom marabu
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei

  Alt 29. Mai 2007, 10:24
Hallo,

und bei der parametrisierten Query

ParamByName('bäa').AsBlob:= theText verwenden.


Heiko
Heiko
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#5

Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei

  Alt 29. Mai 2007, 10:42
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei

  Alt 29. Mai 2007, 10:48
Dann würde ich das ID-Feld beim Insert trotzdem weglassen und Parameter verwenden, was sowieso immer ne gute Option ist.
Markus Kinzler
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#7

Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei

  Alt 29. Mai 2007, 11:30
Zitat von mkinzler:
Dann würde ich das ID-Feld beim Insert trotzdem weglassen und Parameter verwenden, was sowieso immer ne gute Option ist.
OK..aber ne Idee wie ich rausfinden könnte was dieser Fehler da genau bedeutet, haste leider auch nicht, oder?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei

  Alt 29. Mai 2007, 11:32
Ich würde mal Achims Antwort mit dem Puffer nochmal durchlesen.
Markus Kinzler
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei

  Alt 29. Mai 2007, 11:46
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();
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#10

Re: Einfügen von großen Texten in ein FB TextBLOB-Feld schei

  Alt 29. Mai 2007, 11:59
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 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