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

📄 使用tstream读写数据.htm

📁 数据库Blob读写
💻 HTM
📖 第 1 页 / 共 2 页
字号:
                </tr>
              </table>
            </center>
          </div>
          <div align="center"> 
            <center>
              <table width="100%" border="0" cellspacing="2" cellpadding="2">
                <tr> 
                  <td> 
                    <div align="center"> <font class="text2"></font> <font class="text2"><span class="m14"> 
                      <input style="WIDTH: 120px" maxlength="4" size="4" name="SearchKey" width="30">
                      <a onclick="JavaScript:SearchForm.submit();" style="CURSOR: hand" 
           ><IMG align=absMiddle height=23 src="images/findtext2.gif" width=24></a></span></font> 
                    </div>
                  </td>
                </tr>
              </table>
              </form>
              <table width="100%" border="0" cellspacing="0" cellpadding="0">
                <tr> 
                  <td background="images/bg.gif" height="25"> 
                    <div align="center"><font class="text2"><span class="fontshadow"><b class="unnamed6"><font color="#ffffff" class="titil">= 
                      合作伙伴 =</font></b></span></font></div>
                  </td>
                </tr>
              </table>
              <table border="0" width="98%">
                <tbody> 
                <tr> 
                  <td> 
                    <div align="center"></div>
                  </td>
                </tr>
                <tr> 
                  <td>&nbsp;</td>
                </tr>
                </tbody> 
              </table> 
</center></DIV></CENTER></DIV></TD>
    <td vAlign="top" height="225"> 
      <table border="0" cellpadding="0" cellspacing="0" width="540" align="center"><!-- fwtable fwsrc="templates/BG.png" fwbase="Untitled-6.gif" fwstyle="Dreamweaver" fwdocid = "742308039" fwnested="0" -->
        <tr> 
          <td><IMG border=0 height=1 src="images/spacer.gif" width=6></td>
          <td><IMG border=0 height=1 src="images/spacer.gif" width=194></td>
          <td><IMG border=0 height=1 src="images/spacer.gif" width=340></td>
          <td><IMG border=0 height=1 src="images/spacer.gif" width=1></td>
        </tr>
        <tr> 
          <td colspan="3"><IMG border=0 height=6 name=Untitled6_r1_c1 src="images/Untitled-6_r1_c1.gif" width=540></td>
          <td><IMG border=0 height=6 src="images/spacer.gif" width=1></td>
        </tr>
        <tr> 
          <td colspan="3" rowspan="3" valign="top" background="images/Untitled-6_r3_c1.gif" align="middle"> 
            <table height="50" cellspacing="0" cellpadding="0" width="95%" background="images/ENDBG.gif" border="0">
              <tbody> 
              <tr align="middle"> 
                <td height="70"> 
                  <p align="center">
                     <b><span class="unnamed6">在Dephi中使用TStream读写数据的技巧</span></b>
                     <br>
                     2001-8-21 17:28:21&nbsp;&nbsp;编程爱好者
                  </p>
                </td>
              </tr>
              </tbody> 
            </table>
            <br>
            <table width="95%" border="0" cellspacing="1" cellpadding="1">
              <tr> 
                <td colspan="2"><span class="unnamed6"><br>在Dephi中提供了一个抽象的数据类型TStream来支持对流式数据的操作。这些数据通常来自文件、数据库、内存对象、OLE对象等,TStream提供了统一、简洁的方法来进行数据的读写。在通常情况下,我们并不需要直接使用TStream类,对流式数据的读写封装在VCL控件的方法中。但是如果这些方法无法满足我们的要求,就需要自己手动控制数据的读写。 <br><br>一、 TStream的常用的方法和属性:<br>1. function Read(var Buffer; Count: Longint): Longint; virtual; abstract <br><br>2. function Write(const Buffer; Count: Longint): Longint; virtual; abstract; <br><br>3. function Seek(Offset: Longint; Origin: Word): Longint; virtual; abstract; <br><br>4. property Position: Longint; <br><br>5. property Size: Longint <br><br>Read,Write,Seek都是纯虚函数,提供了数据读写和定位的抽象的方法。Read方法将数据从Stream中读到Buffer缓冲区中,Write则实现相反的操作,返回值表示实际读写数据的大小。Seek提供了在Stream中移动数据指针的方法。参数Origin可以取soFromBeginning,soFromCurrent,soFromEnd 三个值,Offset是偏移量,返回值是当前Stream数据指针的位置。 <br><br>Position表示了数据指针在Stream中的位置。这个属性是可读写的,它实际上就是通过调用Seek方法实现的,所以实际使用时使用这个属性更为方便一些。Size属性表示当前Stream的大小,对于不同的Stream,有些时候是只读的。 <br><br>二、 Stream数据的读写。<br>1. SaveToStream(Stream: TStream ); file://将类中的数据写到Stream的当前位置中 <br><br>2. LoadFromStream(Stream: TStream); file://从当前位置读入Stream里的数据 <br><br>实际使用时我们基本上只要使用上面两个函数就可以了。 <br><br>三、 例子<br>TStream的继承树图如图1所示(略),实际使用时比较常用的是TFileStream,TMemoryStream,TblobStream,就以这三种流举一例说明具体用法。 <br><br>创建一个窗体Form1,放置三个按钮btnRead,btnInvert,btnSave和一个文件打开对话框OpenDialog1以及数据控件DataSource1,Table1,test. <br><br>使用Dephi提供的Database Desktop创建一个表test,表里有一个字段域Image,数据库文件名存为test.db。在窗体上放置一个TDatabase控件dbTest,一个TTable控件Table1,一个DataSource控件DataSource1,一个TDBNavigator控件DBNavigator1。将dbTest与刚才Desktop创建的数据库相连,Table1的TableName属性设为test.db,DataSource1的DataSet属性设为Table1,DBNavigator1的DataSource属性设为DataSource1,VisibleButtons属性前四个设为TRUE。此外,将dbtest的Connected设为TRUE,Table1的Active属性设为TRUE,使得数据库一开始就处于打开状态。 <br><br>事件代码编写如下: <br><br>1. btnRead的Click事件,这里演示了TFileStream的用法。 <br><br>var<br> MS: TFileStream;<br>begin<br> if OpenDialog1.Execute then<br> begin<br>MS:=TFileStream.Create<br>(OpenDialog1.FileName, fmOpenRead);<br>  Image1.Picture.Bitmap.LoadFromStream(MS);<br>  MS.Free;<br> end;<br>end;<br>2. btnInvert的Click事件,这里演示了TMemoryStream的用法。其中使用了Invert函数,这是一个简单的将图象反色的函数(仅对真彩图象有效),它返回一个指向处理过的图象数据块的指针。 <br><br>var<br> M<br>S: TMemoryStream;<br> pImage: pointer; <br>begin<br> MS:=TMemoryStream.create;<br> Image1.Picture.Bitmap.SaveToStream(MS);<br> MS.Position:=0;<br> pImage:=Invert(MS.Memory, MS.size); <br>file://Memory属性是指向实际内存块的指针<br> MS.Write(pImage^,MS.size);<br> MS.Position:=0;     <br>file://上一行代码使指针移到了Stream末尾,所以要复位<br> Image1.Picture.Bitmap.LoadFromStream(MS);<br> FreeMem(pImage); <br> MS.Free;<br>end;<br><br>Invert函数如下:<br>function TForm1.Invert<br>(pImage: pointer; size: Integer): pointer;<br>var<br> pData, pMem: PChar;<br> i: Integer;<br>begin<br> pMem:=AllocMem(size);<br> CopyMemory(pMem,pImage,size);<br> pData:=pMem+54;<br> for i:=0 to size-54-1 do<br> begin<br>  pData^:=Char(not integer(pData^));<br>  pData:=pData+1;<br> end;<br> Result:=pMem;<br>end;<br>1. btnSave的Click事件,这里演示了TMemoryStream的另一种用法,将Stream中的数据写到数据库中去。 <br><br>var<br> MS: TMemoryStream;<br>begin<br> MS:=TMemoryStream.create;<br> Image1.Picture.Bitmap.SaveToStream(MS);<br> MS.Position:=0;<br> Table1.Append;  <br>file://在数据库中添加一条记录<br> TBlobField(Table1.FieldbyName<br>('image')).LoadFromStream(MS);<br> Table1.Post;    <br>file://将所作的更新写入数据库<br>end;<br>4. DBNavigator1的Click事件,这里演示了TBlobStream的用法,使用了和写入时不同的方法来读出数据库的图象数据。 <br><br>var<br> MS: TStream;<br>begin<br> with Table1 do<br> MS:=CreateBlobStream<br>(FieldbyName('image'),bmRead);<br> Image1.Picture.Bitmap.<br>LoadFromStream(MS);<br> MS.Free;<br>end; <br><br></span></td>
                
              </tr>
            </table>
            <table width="100%" border="0" cellspacing="10" cellpadding="5" align="center">
              <tr> 
                <td background="images/ENDBG.gif"> 
                  <div align="center">
                  <table width="100%" border="0" cellspacing="5" cellpadding="5" bgcolor="#00ccff">
                      <tr> 
                        <td>
                          <div align="center"><b class="titil"><font color="#003399">相关文章</font></b></div>
                        </td>
                      </tr>
                    </table>
                    <table width="100%" border="1" cellspacing="0" cellpadding="2" bordercolor="#00ccff" bordercolorlight="#ffffff">
                      &nbsp;
                    </table>
                  <br>
                    如果您有什么疑问或看法请到 <A href="../F">精彩论坛</a> 发表意见 <br>
                    <br>
                    <a onclick="JavaScript:history.back();" style="CURSOR: hand" onMouseOut="MM_swapImgRestore()" 
                  onMouseOver="MM_swapImage('Image71','','../images/back2.gif',1)" 
                 ><IMG alt=返回前一页 border=0 height=21 name=Image71 src="images/back1.gif" width=21></a> 
                    &nbsp;&nbsp;
                    <!-- <IMG alt=管理 border=0 height=21 name=Image51 onmouseout=MM_swapImgRestore() onmouseover="MM_swapImage('Image51','','../images/manage2.gif',1)" src="images/manage.gif" width=21> -->
                    &nbsp;&nbsp;
                    <A href="#" onmouseout=MM_swapImgRestore() onmouseover="MM_swapImage('Image72','','../images/end2.gif',1)"><IMG alt=返回上面 border=0 height=21 name=Image72 src="images/end1.gif" width=21></a> 
                    <br>
                  </div>
                </td>
              </tr>
            </table>
          </td>
        </tr>
        <tr> 
          <td><IMG border=0 height=5 src="images/spacer.gif" width=1></td>
        </tr>
        <tr> 
          <td><IMG border=0 height=75 src="images/spacer.gif" width=1></td>
        </tr>
        <tr> 
          <td colspan="3"><IMG border=0 height=18 name=Untitled6_r5_c1 src="images/Untitled-6_r5_c1.gif" width=540></td>
          <td><IMG border=0 height=18 src="images/spacer.gif" width=1></td>
        </tr>
      </table>
    </td></TR></TBODY> 
</table>
<table cellSpacing="0" cellPadding="0" width="760" align="center" border="0">
  <tr align="middle" bgColor="#007cb9">
    <td height="43" bgcolor="#007cb9"><span class="fontshadow"><font color="#ffffff"><br>
      版权信息</font><font color="#ffffff">|</font> <font color="#ffffff">隐私保护</font> 
      <font color="#ffffff">|</font> <font color="#ffffff">合作事项</font> <font color="#ffffff">|</font> 
      <font color="#ffffff">广告刊登</font> <font color="#ffffff">|</font> <font color="#ffffff">留言薄</font> 
      <font color="#ffffff">|</font> <font color="#ffffff">联系方式 |</font> <font color="#ffffff">加入收藏</font>
      <FONT color=white>
      <br><br>
      筹建办地址:广州市先烈中路100号大院60号10楼<br>
      电话:(020)87611593&nbsp;&nbsp;传真:(020)87611575</FONT>
      <br>
      <font class="unnamed2" color="#ffffff" size="2">Copyright @ GDSoftPark All rights reserved</font> 
    <br>
    <br>
      </span>
    </td>
  </tr>
</table>

</body></html>

⌨️ 快捷键说明

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