Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld" (https://www.delphipraxis.net/171698-createblobstream-bei-delphi-xe3-liefert-fehler-kein-blob-feld.html)

HighBaer 20. Nov 2012 16:29

Datenbank: Paradox • Version: 7 • Zugriff über: BDE

CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Hallo Leute!

Ich habe folgendes Problem: Es soll eine Anwendung die über die BDE auf eine Paradox-DB zugreift und unter Delph 7 erstellt wurde auf Delphi XE3 umgestellt werden. Von XE3 habe ich zunächst nur die Test-Version (Architekt ohne Sourcen) um zu sehen ob es überhaupt klappt. Nun erhalte ich beim Aufruf von CreateBlobStream die Fehlermedlung "Kein BLOB-Feld". Unter Delphi 7 läuft es mit der gleichen Tabelle korrekt. Das entsprechende Feld hat als "DataTye" auch "ftBlob", selbst die Umwandung zu TBlobField klappt. Ich habe es auch mit anderen Tabellen, die BLOB-Felder haben, ausprobiert: Immer das gleiche Ergebnis = Fehlermeldung.

Ist das eventuell ein Fehler in XE3? Wie gesagt, bei der Test-Version sind keine Sourcen dabei, die man zur Fehleranalyse nutzen könnte.

Noch ein paar Infos: Das Feld ist auf jeden Fall ein BLOB und NICHT leer! Die Tabelle ist offen, andere Felder können gelesen werden. (Ansonsten sollte auch eine andere Fehlermeldung kommen.)

Bitte nun kein Hinweis, dass die BDE veraltete ist und man besser eine andere DB nehmen sollte. Das weiß ich, aber hilft mir hier nicht konkret weiter, da zunächst mal mit der BDE weitergeaebeitet werden soll.

Für einen Tipp wäre ich dankbar.

Bernhard Geyer 20. Nov 2012 16:40

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Also im Delphi-Forum hat jemand das gleich Problem gelöst indem er statt BDE ADOExpress/dbGo verwendet hat.

Evtl ist das ein bisher nicht gefixter Fehler in XE3 mit BDE.

RWarnecke 20. Nov 2012 18:04

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Man sollte auch noch dabei bedenken, dass die BDE nicht mehr weiterentwickelt wird.

Edit : Ich empfehle hier auf eine andere Datenbank umzubauen.

Bernhard Geyer 20. Nov 2012 19:24

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Zitat:

Zitat von RWarnecke (Beitrag 1192114)
Man sollte auch noch dabei bedenken, dass die BDE nicht mehr weiterentwickelt wird.

Er hat "nicht mehr weiterentwickelt" und "andere Datenbank" gesagt. Steinigt Ihn! :-)

hoika 21. Nov 2012 05:30

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Hallo,

zeig mal ein bisschen Code.


Heiko

HighBaer 21. Nov 2012 10:08

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Hallo Leute,

zunächstmal Danke für die Antworten, die aber leider nicht weiterhelfen. Ich hatte ja geschrieben, dass ich weiß, dass die BDE nicht mehr weiterentwickelt wird. Mittelfristig werde ich da auch auf eine Alternative umschwenken, aber das ist im Moment (u.a. auch aus Zeitgründen nicht möglich). Ich bin aber davon ausgegangen, dass, wenn in XE3 die BDE noch unter stützt wird, das auch vollständing und korrekt der Fall ist. Die Methode wird auch in der Hilfe beschrieben, also sollte man doch davon ausgehen, dass das auch funktioniert...

An der BDE oder der Tabelle kann es nicht liegen, denn wie gesagt klappt da der Zugriff korrekt. Ich habe mittlerweile festgestellt, dass die gleiche Fehlermedlung auch bei einem Memo-Feld kommt.

Ich weiss zwar nicht was da der Code weiterhelfen soll, aber wenn's hilft:
Delphi-Quellcode:
procedure LeseBitmap(Table: TTable);
var
  Stream : TStream;
begin
  with Table do begin
    Stream := CreateBlobStream(FieldByName('Bitmap'),bmRead); // Die Excception kommt an dieser Stelle!
    try
      FBitmap.LoadFromStream(Stream); // FBitmap : TBitmap
    finally
      Stream.Free;
    end; {try .. finally}
  end; {with}
end; {LeseBitmap}

Bernhard Geyer 21. Nov 2012 10:57

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Zitat:

Zitat von HighBaer (Beitrag 1192184)
Ich bin aber davon ausgegangen, dass, wenn in XE3 die BDE noch unter stützt wird, das auch vollständing und korrekt der Fall ist. Die Methode wird auch in der Hilfe beschrieben, also sollte man doch davon ausgehen, dass das auch funktioniert...

Die Beschreibung der Methode ist vermutlich seit 10 Jahren nicht mehr angelangt worden. Das letzte mal als es ins neue Hilfesystem überführt wurde. Und ich glaube das mittlerweile bei Emba der Test gegen die BDE nur noch aus "It Compiles! Ship it" besteht.

Zitat:

Zitat von HighBaer (Beitrag 1192184)
Ich habe mittlerweile festgestellt, dass die gleiche Fehlermedlung auch bei einem Memo-Feld kommt.

Hättest du den link richtig gelesen hättest du dir das sparen können.

Also wenn du unbedingt (noch mittelfristig) noch BDE haben willst bleib erst mal bei D7 und "entsorge" die BDE bevor du auf XE3 oder neuer umsteigst.

Gollum 21. Nov 2012 12:10

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Hallo,

was passiert, wenn Du TStream durch TBlobStream ersetzt?

p80286 21. Nov 2012 13:15

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1192104)
.... indem er statt BDE ADOExpress/dbGo verwendet hat.

:thumb::thumb:

Könnte es sein daß die BDE sich am Char-Format verschluckt?
Es hat da ja schon die seltsamsten Nebeneffekte gegeben.

Gruß
K-H

Bernhard Geyer 21. Nov 2012 13:38

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Zitat:

Zitat von p80286 (Beitrag 1192216)
Könnte es sein daß die BDE sich am Char-Format verschluckt?

Müsste sich ja dann eigentlich schon bei D2009 verschluckt haben.

p80286 21. Nov 2012 13:47

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Nur so eine Idee

Gruß
K-H

Bernhard Geyer 21. Nov 2012 13:49

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Zitat:

Zitat von p80286 (Beitrag 1192218)
Nur so eine Idee

Klar kann es sein da sich hier wieder irgendein Fehler neu eingeschlichen hat.
Aber es geht ja auch nicht mit (Binär-)Blobs soweit ich es gelesen habe.

HighBaer 22. Nov 2012 10:35

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Hallo

Soweit ich es bisher beurteilen kann, scheint es wirklich auf einen (oder mehrere?) Fehler in Delphi XE3 hinauszulaufen. Ich habe mittlerweile diese Info
Zitat:

Please note: BDE blob field support is completely broken in the initial
release of Delphi XE3. This prevents many of the RB Demos from running.
We hope Embarcadero will address this issue soon.
im Embarcadero Discusson Forums https://forums.embarcadero.com/threa...threadID=76914 gefunden.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1192198)
Zitat:

Zitat von HighBaer (Beitrag 1192184)
Ich habe mittlerweile festgestellt, dass die gleiche Fehlermedlung auch bei einem Memo-Feld kommt.

Hättest du den link richtig gelesen hättest du dir das sparen können.

Ich denke, dass ich den Link richtig gelesen habe und da war von "Zugriffsverletzrung" und "Access" die Rede. Daher habe ich das nicht mit dem Fehler "Kein BLOB-Feld" und der Zugriff per BDE gleichgesetzt.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1192198)
Also wenn du unbedingt (noch mittelfristig) noch BDE haben willst bleib erst mal bei D7 und "entsorge" die BDE bevor du auf XE3 oder neuer umsteigst.

Geht leider nicht. :(

Zitat:

Zitat von Gollum (Beitrag 1192209)
Hallo,

was passiert, wenn Du TStream durch TBlobStream ersetzt?

Nichts. Warum sollte auch? TBlobStream ist schließlich von TStream abgeleitet.

Was einnen dann doch erstaunt ist, dass Code, der scheinbar bis XE2 funktioniert hat, plötzlich in der neusten Version nicht mehr funktionert. Man könnte doch annehmen, dass, wenn bezüglich der BDE nichts mehr weiterentwickelt wird, auch der entsprechende Code "in Ruhe gelassen wird".

Na ja, es sieht wohl so aus, dass ich wohl wirklich in den "sauren Apfel beißen muss" und nun ungeplant auch die Anwendung auf eine alternative DB umstellen muss. Denn zu warten ob - und wenn ja - wann der Fehler korigiert wird, dürfte keine Lösung sein. Blöd nur dass ich das von der Zeit nicht eingeplant hatte. :(

Danke auf jeden Fall für Eure Antworten.

Bernhard Geyer 22. Nov 2012 11:14

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Zitat:

Zitat von HighBaer (Beitrag 1192336)
Was einnen dann doch erstaunt ist, dass Code, der scheinbar bis XE2 funktioniert hat, plötzlich in der neusten Version nicht mehr funktionert. Man könnte doch annehmen, dass, wenn bezüglich der BDE nichts mehr weiterentwickelt wird, auch der entsprechende Code "in Ruhe gelassen wird".

ich denke nicht der BDE-Code wurde geändert sondern ein Code auf dem die BDE-Pascal-Wrapper-Klassen zugreifen hat sich geändert.

Zitat:

Zitat von HighBaer (Beitrag 1192336)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1192198)
Also wenn du unbedingt (noch mittelfristig) noch BDE haben willst bleib erst mal bei D7 und "entsorge" die BDE bevor du auf XE3 oder neuer umsteigst.

Geht leider nicht. :(

Wieso nicht? Was geht nicht mit D7 was du nur mit XE3 erledigen kannst?

hoika 23. Nov 2012 05:27

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Hallo,

Was passiert, wenn du das FieldByName noch auf TBlobField castest ?

Gerade das hier gefunden.
Du brauchst aber die Quellen.

https://forums.embarcadero.com/threa...threadID=78430

Wenn man dort weiterliest, sieht man, dass doch am Code von DBTables was gemacht worden ist,
damit die Unit überhaupt erst mit XE3 kompiliert werden konnte.
Das gleiche Problem mit den TBytes hatte ich auch beim Umsetllen von Blob-Code von D2007 auf D2010.


Heiko

Mschmidt 14. Dez 2012 16:21

AW: CreateBlobStream bei Delphi XE3 liefert Fehler "Kein BLOB-Feld"
 
Ich weiss nicht ob's hilft, ich verwende zwar die UniDAC aber dass sollte nicht stören:


Delphi-Quellcode:
function getBlobAsStream(FieldName:string):TStream;
var
  Tblf : TBlobField;
  Query: TUniQuery;
...
          Tblf :=TBlobField(Query.FieldbyName(FieldName));
          result:= TMemoryStream.Create;
          Tblf.SaveToStream(result);
...
Ersetze mal TUniQuery mit TTable.
Mathias


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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