2012-04-21 23 views
0

我有一個Firbird 1.0數據文件的加權aprox的25 GB,我與它的工作。它有一個表格,它將文檔和doc的圖片存儲爲blob。所以,我問是否可以使用fib數據集打開這樣的大數據文件,我首先嚐試在運行時打開數據集=沒有成功,因爲網格是空的,所以另一個嘗試是將它設置爲活動的設計模式,它也無法打開它的活動屬性設置爲true,但沒有在網格中獲取數據!加載大型數據文件火鳥表到DataSet

你有什麼想法讓它工作嗎?我必須設置任何blob cashe選項嗎? 還是根本不可能?

現在我用我的筆記本電腦(Win 7的64位4GB內存)開發,後來它會被部署到我的服務器的機器!

我修好了!

所以我的另一個問題是關於使用流的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'但不是在一個所有行選擇檢索動態照片! – 2012-04-21 14:14:39

+0

oooooooooooopssss i固定它))))在設計時它連接到另一個數據庫))) – 2012-04-21 14:35:46

+0

我不想將它保存到硬盤並加載它!我想加載流並將其複製到圖像! – 2012-04-21 14:48:53

回答

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),因爲它不僅是一個數據庫主體。