Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi IBDac und Blob (https://www.delphipraxis.net/104512-ibdac-und-blob.html)

hanspeter 5. Dez 2007 15:45

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

mikhal 5. Dez 2007 16:26

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

hanspeter 6. Dez 2007 10:58

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:
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;
Query ist in diesem Fall ein TDBQuery
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

mikhal 6. Dez 2007 12:27

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

hanspeter 6. Dez 2007 12:41

Re: IBDac und Blob
 
Zitat:

Zitat von mikhal
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


Das scheint ein Bug in IBDac zu sein.
Ich habe an dieser einen Stelle jetzt mal IBX verwendet, da funktioniert das problemlos.

Gruß
Peter

mkinzler 6. Dez 2007 12:44

Re: IBDac und Blob
 
hast du den Bug schon gemeldet?
http://www.crlab.com/forums/viewforum.php?f=24

[Edit: sollte Bug heißen]

hanspeter 6. Dez 2007 16:47

Re: IBDac und Blob
 
Zitat:

Zitat von mkinzler
hast du den Buf schon gemeldet?
http://www.crlab.com/forums/viewforum.php?f=24

Was bitte ist ein Buf?

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