⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20000805001.htm

📁 C++Builder教学大全
💻 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字段的读写&nbsp;</font></b>

        </p>

        <p>对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:&nbsp;<br>

          BLOB字段的读取:&nbsp;<br>

          &nbsp;TBlobSTream*&nbsp;TemplateStream;&nbsp;<br>

          &nbsp;char*&nbsp;TempPlatePtr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>

          &nbsp;<br>

          &nbsp;TemplateStream=new&nbsp;&nbsp;&nbsp;TBlobStream((TBlobField*)WebQuery-&gt;FieldByName&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;("SearchTem"),bmReadWrite);&nbsp;<br>

          &nbsp;TemplatePtr=&nbsp;new&nbsp;char[TemplateStream-&gt;Size];&nbsp;<br>

          &nbsp;TemplateStream-&gt;Read(TemplatePtr,&nbsp;TemplateStream-&gt;Size);&nbsp;<br>

          &nbsp;<br>

          BLOB字段的写入:&nbsp;<br>

          &nbsp;TBlobSTream*&nbsp;TemplateStream;&nbsp;<br>

          &nbsp;char*&nbsp;TempPlatePtr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>

          &nbsp;<br>

          &nbsp;TemplateStream=new&nbsp;&nbsp;&nbsp;TBlobStream((TBlobField*)WebQuery-&gt;FieldByName&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;("SearchTem"),bmReadWrite);&nbsp;<br>

          &nbsp;TemplatePtr=&nbsp;new&nbsp;char[TemplateStream-&gt;Size];&nbsp;<br>

          &nbsp;TemplateStream-&gt;Write(TemplatePtr,&nbsp;TemplateStream-&gt;Size);&nbsp;<br>

          &nbsp;<br>

          ________________________________________________________________&nbsp;<br>

          补充:&nbsp;<br>

          获得字段的大小用函数datalength&nbsp;<br>

          &nbsp;<br>

          SQL&nbsp;Server端要作一点设置:&nbsp;<br>

          By&nbsp;default,&nbsp;WRITETEXT&nbsp;is&nbsp;a&nbsp;nonlogged&nbsp;operation.&nbsp;This&nbsp;means&nbsp;that&nbsp;&nbsp;<br>

          text&nbsp;or&nbsp;image&nbsp;data&nbsp;is&nbsp;not&nbsp;logged&nbsp;when&nbsp;it&nbsp;is&nbsp;written&nbsp;into&nbsp;the&nbsp;database.&nbsp;&nbsp;<br>

          To&nbsp;use&nbsp;WRITETEXT&nbsp;in&nbsp;its&nbsp;default,&nbsp;nonlogged&nbsp;state,&nbsp;&nbsp;<br>

          //注意!!&nbsp;<br>

          the&nbsp;system&nbsp;administrator&nbsp;must&nbsp;use&nbsp;the&nbsp;sp_dboption&nbsp;system&nbsp;stored&nbsp;&nbsp;<br>

          procedure&nbsp;to&nbsp;set&nbsp;select&nbsp;into/bulkcopy,&nbsp;&nbsp;<br>

          //&nbsp;<br>

          which&nbsp;allows&nbsp;nonlogged&nbsp;data&nbsp;to&nbsp;be&nbsp;inserted.&nbsp;<br>

          &nbsp;<br>

          做了试验,直接写SQL语句好象不行.&nbsp;<br>

          ____________________________________________________________________&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一些注意事项和一个例子&nbsp;<br>

          在写入时:&nbsp;<br>

          (1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;&nbsp;<br>

          (2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;&nbsp;<br>

          使得TTable(TQuery)是可写的.&nbsp;<br>

          &nbsp;<br>

          下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,&nbsp;<br>

          script为一个BLOB字段:&nbsp;<br>

          &nbsp;&nbsp;&nbsp;TBlobStream&nbsp;*pScriptStream;&nbsp;<br>

          &nbsp;&nbsp;//插入一条记录&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strSQL1="insert&nbsp;&nbsp;into&nbsp;&nbsp;content(file_id,script,key_image)&nbsp;values('";&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strSQL1=strSQL1+m_szFileID+"',null,null)";&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;SQL-&gt;Clear();&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;SQL-&gt;Add(strSQL1);&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;ExecSQL();&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;Close();&nbsp;<br>

          &nbsp;&nbsp;//整理要写入的Blob数据&nbsp;&nbsp;&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LockMemories(NewsScript);&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewsScript.m_pScript=(BYTE&nbsp;*)GlobalLock(NewsScript.m_hScript);&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(NewsScript.m_pScript!=NULL)&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>

          &nbsp;&nbsp;&nbsp;//再将刚插入的记录读出来,使该Query与该条记录关联&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strSQL1="select&nbsp;&nbsp;file_id,script&nbsp;&nbsp;from&nbsp;&nbsp;content&nbsp;&nbsp;where&nbsp;&nbsp;file_id='"+&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_szFileID+"'";&nbsp;<br>

          &nbsp;&nbsp;&nbsp;//允许该Query写&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;RequestLive=true;&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;SQL-&gt;Clear();&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;SQL-&gt;Add(strSQL1);&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;Open();&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;First();&nbsp;<br>

          &nbsp;&nbsp;&nbsp;//将该Query置为可写&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;Edit();&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pScriptStream=new&nbsp;&nbsp;&nbsp;TBlobStream((TBlobField*)dmStoryEditor-&gt;&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qryExec-&gt;FieldByName("script"),bmReadWrite);&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pScriptStream-&gt;Write(NewsScript.m_pScript,&nbsp;&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewsScript.m_lScriptRealSize);&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;Post();&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dmStoryEditor-&gt;qryExec-&gt;RequestLive=false;&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pScriptStream;&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GlobalUnlock(NewsScript.m_hScript);&nbsp;<br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UnLockMemories(NewsScript);&nbsp; 

        </p>

    </td>

    </tr>

  </table>

 

</div>

</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -