BCB实现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);

 

转自:http://c.chinaitlab.com/cckaifa/database/200805/746874.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值