2012-04-21 5 views
0

私はそれを使って作業しているaprox 25 GBのFirbird 1.0データファイルを持っています。テーブルにはドキュメントとドキュメントの写真がBLOBとして保存されています。だから、私はそれが可能なのですが、私はそれが可能だったデザインモードでアクティブに設定しようとしたので、グリッドが空であったので、ランタイムでデータセットをオープンしようとしました=アクティブなプロパティはtrueに設定されていますが、グリッドにフェッチされたデータはありません。大規模なFirebirdデータファイルテーブルをDataSetに読み込む

ご利用いただきありがとうございましたか? BLOBキャッシュオプションを設定する必要がありますか? またはそれはまったくできませんか?

私はラップトップコンピュータ(Win 7 x64 4GB Ram)を使用して開発しており、後でそれを私のサーバーマシンに配備します!

私はそれを修正しました!

だから、別の私の質問は、私はこのようにやっているTImageのコンポーネント

にストリームを使用してロードするBLOBデータについてですが、それはあなたが

を見てもよい

ここ

が私のコードでアクセス違反を飛び出します

DM->stImage->Active=true; 
    try { 
     TMemoryStream *ms=new TMemoryStream(); 
     TStream *ps=DM->stImage->CreateBlobStream(DM->stImage->FieldByName("PHOTO") ,bmRead); 
     ms->Position=0; 
     ms->CopyFrom(ps,ps->Size); 
     ms->SaveToFile("c:\\1.jpg"); 
//  imgPass->Picture->LoadFromStream(ms); 
     imgPass->Picture->Graphic->LoadFromStream(ps); 
     delete ms; 
     delete ps; 
    } 
    catch (Exception &e) { 
     ShowMessage(e.ToString()); 
    } 

保存することはできますが、imgPass->Picture->Graphic->LoadFromStream(ps);は機能しません。 何が問題なのでしょうか?

+0

さらに、私は 'CreateBlobStream'を使って写真を動的に取得しますが、1つの選択ですべての行を取得するわけではありません! –

+0

oooooooooooopssss私はそれを固定した)))))))) –

+0

私はハードディスクに保存して読み込みたくない!ストリームにロードしてイメージにコピーしたい –

答えて

0

AVを避けるには、ストリーム位置をリセットする必要があります。これは、 "CopyFrom"機能の呼び出し中に前方に移動しました。

だから、あなたのコードは(のみ関連する行)のようになります。

ms->CopyFrom(ps,ps->Size); 
ms->SaveToFile("c:\\1.jpg"); 
ps->Position = 0; //<<<<<<<<<< here we reset the stream position 
imgPass->Picture->Graphic->LoadFromStream(ps); 
//imgPass->Picture->Bitmap->LoadFromStream(ps); // <<< if a bitmap and not JPEG 

が、これはあなたのお役に立てば幸いです。

P .:この問題は、データベースの対象ではないため、C++(またはC++ Builder)にタグ付けする必要があります。

関連する問題