我有一个Firbird 1.0数据文件加权aprox 25 GB我正在使用它。它有一个表,其中存储了文档和doc的图片作为blob。所以,我问是否有可能使用fib数据集打开这样的大数据文件,我首先尝试在运行时打开数据集=没有成功,因为网格是空的,所以另一个尝试是在设计模式中将其设置为活动,它也无法打开,因为它的活动属性设置为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);
不起作用!
可能有什么问题?
答案 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.S。:这个问题应该标记为C ++(或C ++ Builder),因为它不仅仅是一个数据库主题。