📄 20000805001.htm
字号:
<HTML>
<HEAD>
<TITLE>BCB实现BLOB字段的读写</TITLE>
<META content="MSHTML 5.00.2314.1000" name=GENERATOR>
</HEAD>
<BODY aLink=#FF0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0
vLink=#990099>
<div align="center">
<table width="744" border="0" cellspacing="0" cellpadding="0" height="76">
<tr>
<td>
<p align="center"><b><font size="3"><br>
BCB实现BLOB字段的读写 </font></b>
</p>
<p>对于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);
</p>
</td>
</tr>
</table>
</div>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -