D5 + BDE5.1(SQLORA8.DLL ver5.1.0.6) + Oracle9.2です。
タイトル通りのエラーが発生しました。
下記を参照し、BDEの設定を変更しても、まったく効果なし。
無効な BLOB ハンドルエラー
http://www.borland.co.jp/qanda/delphi/d0003091.html
SQL自体は、このようなものを投げています。
SELECT A.*, B.* FROM TBL_A A, TBL_B B
FROM A.XXX = 1 AND A.XXX = B.XXX
なお、一方のBテーブルにのみ、VarChar(999)の列が10あります。
BDE上、BlobField扱いですね。
複数のテーブルを使った問い合わせですで、RequestLive = True にはできません。
BlobFiledを扱うには、BlobStreamを使いますが、TBlobStream.Create の
DbiOpenBlobメソッドに失敗し、エラーになっている模様。
ところが、ブレークポイントで止めて、同じSQLによりDBGrid表示するとエラーなく項目の内容を表示できます。
DBエクスプローラーのBlobエクスプローラーでも表示できます。
Queryのインスタンスは違いますが、プロパティ関連はすべて同じ。
いったい何が違うというのでしょう???
> いったい何が違うというのでしょう???
私も???
ちなみに"BLOBS TO CACHE"で直らない重症なBLOBは
SQLを分けたり、DataSetを2つ使うなど涙ぐましい努力が必要なようです。
解決策
VarChar(999) => VarChar(255) に変更
これにより、BDE上 BlobField 扱いから解放されました。
255で足りない部分は、列を増やし、複数列に分割保存することで対応。
DBMemoや、DBGridで直接編集するような内容ではないので分割可能という結論。
参照元 http://www.borland.co.jp/delphi/UPD2RDME.TXT
> BDE/SQL Link は現在,長さが 255 を超える CHAR 列を疑似 BLOB として
> 解釈します。
まさか、こんな制限があったとは。。。
> ちなみに"BLOBS TO CACHE"で直らない重症なBLOBは
> SQLを分けたり、DataSetを2つ使うなど涙ぐましい努力が必要なようです。
実際これをやろうかと考えたのですが、最大3テーブルからのデータの抽出です。
単純SQLでぐりぐりできないこともないのですが、効率が悪い。
そんなわけで、テーブルのレイアウトも含めて変更しました。
ツイート | ![]() |