AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IBDac und Blob

Ein Thema von hanspeter · begonnen am 5. Dez 2007 · letzter Beitrag vom 6. Dez 2007
Antwort Antwort
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

IBDac und Blob

  Alt 5. Dez 2007, 15:45
Datenbank: Firebird • Zugriff über: IBDac
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
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: IBDac und Blob

  Alt 5. Dez 2007, 16:26
Schau dir mal die Demos an, die bei den IBDac zu finden sind. Z.B. \Demos\Win32\IbDacDemo\TextBlob.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#3

Re: IBDac und Blob

  Alt 6. Dez 2007, 10:58
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
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: IBDac und Blob

  Alt 6. Dez 2007, 12:27
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
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#5

Re: IBDac und Blob

  Alt 6. Dez 2007, 12:41
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: IBDac und Blob

  Alt 6. Dez 2007, 12:44
hast du den Bug schon gemeldet?
http://www.crlab.com/forums/viewforum.php?f=24

[Edit: sollte Bug heißen]
Markus Kinzler
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#7

Re: IBDac und Blob

  Alt 6. Dez 2007, 16:47
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
  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 17:14 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