📄 30.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>BCB实现BLOB字段的读写</title>
</head>
<div><center>
<table border="0" width="640">
<tr><td align="center"><b>BCB实现BLOB字段的读写</b></td></tr>
<tr><td align="center"><font color="#CC9933"></font></td></tr>
<tr><td> 对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: <br>BLOB字段的读取: <br> TBlobSTream* TemplateStream; <br> char* TempPlatePtr; <br> <br> TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName <br> ("SearchTem"),bmReadWrite); <br> TemplatePtr= new char[TemplateStream->Size]; <br> TemplateStream->Read(TemplatePtr, TemplateStream->Size); <br> <br>BLOB字段的写入: <br> TBlobSTream* TemplateStream; <br> char* TempPlatePtr; <br> <br> TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName <br> ("SearchTem"),bmReadWrite); <br> TemplatePtr= new char[TemplateStream->Size]; <br> TemplateStream->Write(TemplatePtr, TemplateStream->Size); <br> <br>________________________________________________________________ <br>补充: <br>获得字段的大小用函数datalength <br> <br>SQL Server端要作一点设置: <br>By default, WRITETEXT is a nonlogged operation. This means that <br>text or image data is not logged when it is written into the database. <br>To use WRITETEXT in its default, nonlogged state, <br>//注意!! <br>the system administrator must use the sp_dboption system stored <br>procedure to set select into/bulkcopy, <br>// <br>which allows nonlogged data to be inserted. <br> <br>做了试验,直接写SQL语句好象不行. <br>____________________________________________________________________ <br> 一些注意事项和一个例子 <br>在写入时: <br>(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; <br>(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; <br>使得TTable(TQuery)是可写的. <br> <br>下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, <br>script为一个BLOB字段: <br> TBlobStream *pScriptStream; <br> //插入一条记录 <br> strSQL1="insert into content(file_id,script,key_image) values(''"; <br> strSQL1=strSQL1+m_szFileID+"'',null,null)"; <br> dmStoryEditor->qryExec->SQL->Clear(); <br> dmStoryEditor->qryExec->SQL->Add(strSQL1); <br> dmStoryEditor->qryExec->ExecSQL(); <br> dmStoryEditor->qryExec->Close(); <br> //整理要写入的Blob数据 <br> LockMemories(NewsScript); <br> NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum); <br> NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); <br> if(NewsScript.m_pScript!=NULL) <br> { <br> //再将刚插入的记录读出来,使该Query与该条记录关联 <br> strSQL1="select file_id,script from content where file_id=''"+ <br> m_szFileID+"''"; <br> //允许该Query写 <br> dmStoryEditor->qryExec->RequestLive=true; <br> dmStoryEditor->qryExec->SQL->Clear(); <br> dmStoryEditor->qryExec->SQL->Add(strSQL1); <br> dmStoryEditor->qryExec->Open(); <br> dmStoryEditor->qryExec->First(); <br> //将该Query置为可写 <br> dmStoryEditor->qryExec->Edit(); <br> pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor-> <br> qryExec->FieldByName("script"),bmReadWrite); <br> pScriptStream->Write(NewsScript.m_pScript, <br> NewsScript.m_lScriptRealSize); <br> dmStoryEditor->qryExec->Post(); <br> dmStoryEditor->qryExec->RequestLive=false; <br> delete pScriptStream; <br> } <br> GlobalUnlock(NewsScript.m_hScript); <br> UnLockMemories(NewsScript); </td></tr>
</table></center></div>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -