![]() |
Datenbank: Firebird • Zugriff über: IBDac
IBDac und Blob
Hallo,
hat wer eine Idee, wie ich bei IBDac einen Blobstream in einen Parameter bekomme? m.Position := 0; QueryWork.ParamByName(f).DataType := ftBlob; QueryWork.ParamByName(f).AsIbBlob.LoadFromStream(m ); oder QueryWork.ParamByName(f).DataType := ftBlob; QueryWork.ParamByName(f).LoadFromStream(m,ftBlob); und alle ähnlichen Constructe bringen einen Error -303 internal Error. Die SQLAnweisung : Update Table Set Blob=:Blob Where ... Für einen Tip dankbar. Gruß Peter |
Re: IBDac und Blob
Schau dir mal die Demos an, die bei den IBDac zu finden sind. Z.B. \Demos\Win32\IbDacDemo\TextBlob.
Grüße Mikhal |
Re: IBDac und Blob
Muss das Thema nochmal puschen.
Hat keiner eine Idee woher ein Error -303 internal Error bei IBDac im Zusammenhang mit Blobs kommen kann. Das eigenartige. Ich lese aus einer Paradoxdatenbank über BDE und speichere in Firebird.
Delphi-Quellcode:
Query ist in diesem Fall ein TDBQuery
if Query.Fields[i].isBlob then
begin (Query.Fields[i] as TBlobField).SaveToStream(m); m.Position := 0; if m.Size > 0 then QueryWork.ParamByName(f).LoadFromStream(m, ftBlob); m.Clear; Continue; end; dieser Codeteil funktioniert. Danach will ich zwei IB Tabellen zusammenführen. Query ist in diesem Fall eine Firebird(IBDac) Query.
Delphi-Quellcode:
if Query.Fields[i].isBlob then
begin (Query.Fields[i] as TBlobField).SaveToStream(m); m.Position := 0; if m.Size > 0 then QueryWork.ParamByName(f).LoadFromStream(m, ftBlob); m.Clear; Continue; end; In diesem Fall kommt Error -303 interner Fehler. Der einzige Unterschied ist jetzt, das die Quelle IBDAC und nicht die BDE ist. Wie im ersten Posting erwähnt, habe ich auch eine Reihe anderer Varianten zum Blobtransfer ausprobiert. Ohne Erfolg. Gruß Peter |
Re: IBDac und Blob
Ich kann es hier nicht nachprüfen, aber teste mal auf die Größe des Blobinhalts. Vielleicht löst ein leerer Blob diese Fehlermeldung beim Lesen bzw. Schreiben aus.
Hast du bereits versucht mit der Methode TIBCBlob.LengthBlob die Größe des Blobs zu ermitteln, bzw. mit den Methoden TIBCBlob.Read und TIBCBlob.Write die Blobs zu lesen und zu schreiben? Grüße Mikhal |
Re: IBDac und Blob
Zitat:
Das scheint ein Bug in IBDac zu sein. Ich habe an dieser einen Stelle jetzt mal IBX verwendet, da funktioniert das problemlos. Gruß Peter |
Re: IBDac und Blob
hast du den Bug schon gemeldet?
![]() [Edit: sollte Bug heißen] |
Re: IBDac und Blob
Zitat:
Ich meine inzwischen den Fehler gefunden zu haben. Der SQL Fehler tritt auf, wenn der zu kopierende Stream ein oder mehrere Zeichen #39 enthält. Da bringt auch explizites Setzen von Datatyp ftBlob und streammode nichts. Weise ich die Daten als String zu, dann funktioniert es. Also QueryWork.ParamByName('IMGINFO').AsIbBlob := Query.GetBlob('IMGINFO'); funktioniert nicht, wenn in dem Quellblob das Zeichen #39 vorkommt. Es kommt die Fehlermeldung SQL Error -303 interner Error. QueryWork.ParamByName('IMGINFO').AsString := Query.FieldbyName('IMGINFO').asstring; Das funktioniert. Ärgerlich. Gruß Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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