0

我有一个 Firbird 1.0 数据文件,我正在使用它,权重约为 25 GB。它有一个表,其中将文档和文档的图片存储为 blob。所以,我问是否可以使用fib数据集打开这样的大数据文件,我首先尝试在运行时打开数据集=没有成功,因为网格是空的,所以另一个尝试是在设计模式下将其设置为活动,它也无法打开,因为它的 active 属性设置为 true 但网格中没有获取数据!

你有什么想法让它工作吗?我必须设置任何 blob Cashe 选项吗?还是根本不可能?

现在我正在使用我的笔记本电脑(Win 7 x64 4GB Ram)进行开发,稍后它将被部署到我的服务器机器上!

我已经修好了!

所以我的另一个问题是关于使用流将 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 回答