首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

大文件储存

2013-11-04 
大文件存储我想将一些比较多的数据存储到数据库里,自定义的文件。请问用OLE如何进行存取?[解决办法]大的数

大文件存储
我想将一些比较多的数据存储到数据库里,自定义的文件。请问用OLE如何进行存取?
[解决办法]
大的数据文件最好不要直接存在数据库里,在数据库理存储文件的编号和位置就可以了
[解决办法]

引用:
大的数据文件最好不要直接存在数据库里,在数据库理存储文件的编号和位置就可以了

同意,


如果非要存储,可以用blob字段
[解决办法]
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: 
BLOB字段的读取: 
TBlobSTream* TemplateStream; 
char* TempPlatePtr;              

TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName 
                        ("SearchTem"),bmReadWrite); 
TemplatePtr= new char[TemplateStream->Size]; 
TemplateStream->Read(TemplatePtr, TemplateStream->Size); 

BLOB字段的写入: 
TBlobSTream* TemplateStream; 
char* TempPlatePtr;              

TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName 
                        ("SearchTem"),bmReadWrite); 
TemplatePtr= new char[TemplateStream->Size]; 
TemplateStream->Write(TemplatePtr, TemplateStream->Size); 

________________________________________________________________ 
补充: 
获得字段的大小用函数datalength 

SQL Server端要作一点设置: 
By default, WRITETEXT is a nonlogged operation. This means that  
text or image data is not logged when it is written into the database.  
To use WRITETEXT in its default, nonlogged state,  
//注意!! 
the system administrator must use the sp_dboption system stored  
procedure to set select into/bulkcopy,  
// 
which allows nonlogged data to be inserted. 

做了试验,直接写SQL语句好象不行. 
____________________________________________________________________ 
        一些注意事项和一个例子 
在写入时: 
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; 
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; 
使得TTable(TQuery)是可写的. 

下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, 
script为一个BLOB字段: 
   TBlobStream *pScriptStream; 
  //插入一条记录 
        strSQL1="insert  into  content(file_id,script,key_image) values('"; 
        strSQL1=strSQL1+m_szFileID+"',null,null)"; 
        dmStoryEditor->qryExec->SQL->Clear(); 
        dmStoryEditor->qryExec->SQL->Add(strSQL1); 
        dmStoryEditor->qryExec->ExecSQL(); 
        dmStoryEditor->qryExec->Close(); 
  //整理要写入的Blob数据   
        LockMemories(NewsScript); 
        NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum); 
        NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); 
        if(NewsScript.m_pScript!=NULL) 
        { 
   //再将刚插入的记录读出来,使该Query与该条记录关联 
        strSQL1="select  file_id,script  from  content  where  file_id='"+ 
                m_szFileID+"'"; 
   //允许该Query写 
            dmStoryEditor->qryExec->RequestLive=true; 
            dmStoryEditor->qryExec->SQL->Clear(); 
            dmStoryEditor->qryExec->SQL->Add(strSQL1); 
            dmStoryEditor->qryExec->Open(); 
            dmStoryEditor->qryExec->First(); 
   //将该Query置为可写 
            dmStoryEditor->qryExec->Edit(); 
            pScriptStream=new   TBlobStream((TBlobField*)dmStoryEditor-> 


                                qryExec->FieldByName("script"),bmReadWrite); 
            pScriptStream->Write(NewsScript.m_pScript,  
                                        NewsScript.m_lScriptRealSize); 
            dmStoryEditor->qryExec->Post(); 
            dmStoryEditor->qryExec->RequestLive=false; 
            delete pScriptStream; 
       } 
       GlobalUnlock(NewsScript.m_hScript); 
       UnLockMemories(NewsScript); 

热点排行