TQueryで画像データの取得

解決


taka  2003-07-08 02:02:27  No: 4041

TQueryを使用してデータベースから画像データ(bmp,jpg等)
を取得したいのですが、32KB以上読み込めません。

q := TQuery.Create(nil);
try
  with q do
  begin
    DatabaseName := 'xxx';

    //SQLの設定
    SQL.Clear;
    SQL.Add('SELECT * FROM image');
    SQL.Add('WHERE file_name = :file_name');

    //パラメータの設定
    ParamByName('file_name').AsString := ファイル名;

    //SQLの発行
    Prepare;
    Open;
    
    //file_dataフィールドをBlobStreamに読み込み
    bs := TBlobStream.Create(TBlobField(FieldByName('file_data')), bmRead);

    b := TBitmap.Create;

    try
      //BitmapにBlobStreamを読み込み
      b.LoadFromStream(bs);

      //画像の表示
      Image1.Picture := nil;
      Image1.Picture.Assign(b);

    finally
      b.Free;
      bs.Free;
    end;
  end;
finally
  q.Free;
end;

これで画像は表示できますが、32KBを超える画像は切れてしまいます。
(切れた部分は真っ黒)
TTableを使用すれば、切れる事なく表示されますが、
全データをTTableに読み込むため時間がかかりすぎます。

TQueryで32KB以上の画像を表示させる方法はありますでしょうか?


にしの  2003-07-08 02:36:52  No: 4042

DBはなんでしょうか。
BDEだけなのか、ODBCを使っているのか、DBクライアントへ直接(OracleならばOCIなどで)接続しているのか、わからないと答えようがありません。

http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=005447
ここを見ると、ParadoxではOKのようです。
ODBCでは無理みたいですね。
BDEを介せずに、直接APIを呼び出せばできそうですが。


taka  2003-07-08 03:33:03  No: 4043

すみません。
DBはAccess2000です。ODBC(Accessドライバー)とBDEを使用しています。
ODBCではなく、BDEが問題なのでしょうか?
TTableでは上手く行ったのですが…
直接ODBCのAPIを呼び出してテストしてみます。
↑のURLでもTQueryでは32KBまでと書いてありました。
何とかTQueryで32KB以上読み込めるような方法を探してみます。
にしのさん、ありがとうございます!


taka  2003-07-08 04:03:09  No: 4044

http://forum.nifty.com/fdelphi/faq/00253.htm
↑上記のURLに書いてありました。
TQueryのRequestLiveをTrueにする事で解決できました。
ですが、パフォーマンスは落ちるそです。


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

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






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