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

📄 d1.htm

📁 C++Builder教学大全
💻 HTM
字号:
 

<html>

<head>

<title>BCB实现BLOB字段的读写&nbsp</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字段的读写&nbsp;<br>

        [摘自&nbsp;水木清华站] </font> </div>

    </td>

  </tr>

  <tr valign="top"> 

    <td>对于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;<br>

     </td>

  </tr>

</table>

<br>

</body>

</html>

⌨️ 快捷键说明

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