BLOB ハンドル が無効です

解決


とおりすがらない  2005-06-02 01:42:44  No: 15249

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のインスタンスは違いますが、プロパティ関連はすべて同じ。
いったい何が違うというのでしょう???


RAN  2005-06-02 08:51:27  No: 15250

> いったい何が違うというのでしょう???
私も???

ちなみに"BLOBS TO CACHE"で直らない重症なBLOBは
SQLを分けたり、DataSetを2つ使うなど涙ぐましい努力が必要なようです。


とおりすがらない  2005-06-02 18:09:39  No: 15251

解決策

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でぐりぐりできないこともないのですが、効率が悪い。
そんなわけで、テーブルのレイアウトも含めて変更しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加