开发Delphi对象式数据管理功能(四)
2008-02-23 07:16:48来源:互联网 阅读 ()
20.1.7.2 TBlobStream的实现原理
说明TBlobStream对象的实现原理,不可避免地要涉及它的私有域,下面是私有域的定义:
TBlobStream = class(TStream)
private
FField: TBlobField;
FDataSet: TDataSet;
FRecord: PChar;
FBuffer: PChar;
FFieldNo: Integer;
FOpened: Boolean;
FModified: Boolean;
FPosition: Longint;
…
public
…
end;
FField是与BLOB流相联的数据库BLOB域,该域用于BLOB流的内部访问。FDataSet是代表FField所在的数据库,它可以是TTable部件,也可以是TQuery 部件。FRecord和FBuffer都是BLOB流内部使用的缓冲区,用于存储FField所在记录的数据,该数据记录中不包含BLOB数据,TBlobStream使用FRecord作为调用BDE API函数的参数值。FFieldNo代表BLOB字段的字段号,也用于BDE API的参数传递,FOpened和FMocified都是状态信息,FPosition表示BLOB流的当前位置,下面介绍TBlobStream方法实现。
1. Create方法和Destroy方法的实现
Create方法的功能主要是建立BlobStream流与BLOB字段的联系并初始化某些私有变量。其实现如下:
constructor TBlobStream.Create(Field: TBlobField; Mode: TBlobStreamMode);
var
OpenMode: DbiOpenMode;
begin
FField := Field;
FDataSet := Field.DataSet;
FRecord := FDataSet.ActiveBuffer;
FFieldNo := Field.FieldNo;
if FDataSet.State = dsFilter then
DBErrorFmt(SNoFieldAccess, [FField.DisplayName]);
if not FField.FModified then
begin
if Mode = bmRead then
begin
FBuffer := AllocMem(FDataSet.RecordSize);
FRecord := FBuffer;
if not FDataSet.GetCurrentRecord(FBuffer) then Exit;
OpenMode := dbiReadOnly;
end else
begin
if not (FDataSet.State in [dsEdit, dsInsert]) then DBError(SNotEditing);
OpenMode := dbiReadWrite;
end;
Check(DbiOpenBlob(FDataSet.Handle, FRecord, FFieldNo, OpenMode));
end;
FOpened := True;
if Mode = bmWrite then Truncate;
end;
该方法首先是用传入的Field参数给FField,FDataSet,FRecord和FFieldNo赋值。方法中用AllocMem按当前记录大小分配内存,并将指针赋给FBuffer,用DataSet部件的GetCurrentRecord方法,将记录的值赋给
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Delphi自定义部件开发(四)
- 开发Delphi对象式数据管理功能(八) 2008-02-23
- 开发Delphi对象式数据管理功能(九) 2008-02-23
- 开发Delphi对象式数据管理功能(六) 2008-02-23
- 开发Delphi对象式数据管理功能(三) 2008-02-23
- 开发Delphi对象式数据管理功能(七) 2008-02-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash