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以上の画像を表示させる方法はありますでしょうか?
DBはなんでしょうか。
BDEだけなのか、ODBCを使っているのか、DBクライアントへ直接(OracleならばOCIなどで)接続しているのか、わからないと答えようがありません。
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=005447
ここを見ると、ParadoxではOKのようです。
ODBCでは無理みたいですね。
BDEを介せずに、直接APIを呼び出せばできそうですが。
すみません。
DBはAccess2000です。ODBC(Accessドライバー)とBDEを使用しています。
ODBCではなく、BDEが問題なのでしょうか?
TTableでは上手く行ったのですが…
直接ODBCのAPIを呼び出してテストしてみます。
↑のURLでもTQueryでは32KBまでと書いてありました。
何とかTQueryで32KB以上読み込めるような方法を探してみます。
にしのさん、ありがとうございます!
http://forum.nifty.com/fdelphi/faq/00253.htm
↑上記のURLに書いてありました。
TQueryのRequestLiveをTrueにする事で解決できました。
ですが、パフォーマンスは落ちるそです。
ツイート | ![]() |