📄 d1.htm
字号:
<html>
<head>
<title>BCB实现BLOB字段的读写 </title>
<meta http-equiv="目录类型" content="文本/html; 字符集=gb2312">
</head>
<body bgcolor="#FFFFFF">
<table width="100%" border="0" height="285">
<tr>
<td height="35">
<div align="center" class="p14"><font color="#000000">BCB实现BLOB字段的读写 <br>
[摘自 水木清华站] </font> </div>
</td>
</tr>
<tr valign="top">
<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); <br>
</td>
</tr>
</table>
<br>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -