📄 lc_bcb_21.html
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CB实现BLOB字段的读写</title>
</head>
<body>
<p align="center"><big>BCB实现BLOB字段的读写</big> <font color="#0000FF"><br>
</font>
</p>
<p><br>
对于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); <br>
</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -