0

私はそれに取り組んでいる約25 GBのFirbird 1.0データファイルを持っています。ドキュメントとドキュメントの写真をブロブとして保存したテーブルがあります。そこで、fib データセットを使用してこのようなビッグ データ ファイルを開くことができるかどうかを尋ねています。最初に実行時にデータセットを開こうとしました = グリッドが空だったため成功しませんでした。別の試みとして、デザイン モードでアクティブに設定することもできませんでしたアクティブなプロパティとして開くがtrueに設定されていますが、グリッドにフェッチされたデータはありません!

それを機能させるアイデアはありますか?BLOB キャッシュ オプションを設定する必要はありますか? またはそれはまったく不可能ですか?

現在、ラップトップ コンピューター (Win 7 x64 4GB RAM) を使用して開発を行っており、後でサーバー マシンにデプロイする予定です。

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

もう 1 つの私の質問は、ストリームを使用して Blob データを TImage コンポーネントにロードすることです。

私はこのようにやっていますが、アクセス違反が発生します

ここにあなたが見るかもしれない私のコードがあります

    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);機能しません。何が問題になるでしょうか?

4

1 に答える 1

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

これがお役に立てば幸いです。

PS: この質問はデータベースの件名だけではないため、C++ (または C++Builder) のタグを付ける必要があります。

于 2012-05-25T17:36:13.623 に答える