delphi完美经典--第十六章

16 Delphi数据库程序设计----使用BDE组件

Delphi访问数据库的方式有:ADOBDEdbExpressInterBase Express

一、TDataSet组件

虽然Delphi有多种方式访问数据库,但它们必须依赖TDataSet。它用来显示从数据库单一或多个数据表取得的所有记录。

1TDataSet常用属性

Active:指定或取得DataSet是否为打开状态。为True时,相当于调用Open

BofEofBof检测DataSet是否停在第一条记录。Eof用来检测DataSet是否停在最后一条记录。

Bof在以下任一条件成立时,为True

Eof在以下任一条件成立时,为True

打开DataSet

打开空的DataSet

调用First

调用Last(除非这个DataSet是单向的)

调用Prior,且因已达到第一条而失败时

调用Next,且因已达到最后一条而失败时

调用SetRange,取得空的DataSet或选取区时

调用SetRange,取得空的DataSet或选取区时

仅当DataSet为空时,BofEof同时为True

Bookmark:当DataSet并非单向时,Bookmark属性可用来指定或取得当前记录指针所在位置,如此,程序便可轻易返回指定位置。

CanModify:检测DataSet是否允许写入。

FieldCount:取得字段数。

FiledDefs:取得字段定义:字段名称、数据类型、大小等。

Fields:通过Field数组索引值取得对应的TField控件,访问对应字段数据,其常用属性和事件:

Ø  AsBooleanAsDataTimeAsStringAsVariant等:将字段值转为BooleanDataTimeStringVariant等。

Ø  Value:直接访问字段值内容。

Ø  OnGetText事件:可在字段数据显示前做些额外的处理操作。其做法分为两个步骤:首先编写处理函数(处理函数有特定格式,参考API),然后将这个处理函数指定给某个字段(如:Query1.Fields[0].OnGetTextMetrics := 处理函数)

Ø  FieldValue:设置或取得字段的Variant值,输入参数为字段名称。如Query1.FieldValue[‘name’]

Ø  FilterFilteredFiltered开关过滤条件。Filter用来取得或设置当前的过滤字符串。FilteredFalse时,则Filter无效。Filter设置方法:’NAME = ‘’MWJ’’’

Ø  StateDataSet目前的状态。它用来判断DataSet目前的操作模式,及接下来可做的行为。具体参考API

2TDataSet常用的方法

AppendAppendRecordAppend新增空记录于DataSet末端。AppendRecord新增空记录于DataSet末端。且根据输入的Values参数数组,保存到数据库。

InsertInsertRecordInsert新增空记录。InsertRecord新增记录,并完成Post

Cancel:只要DataSet还在编辑模式,且尚未Post,则Cancel可放弃改变。

Post:回存记录到数据库。

Close:与Active设为False相同作用。

FieldByName:通过输入的参数字段名称,取得相应的Field

Lookup:找到后不移动记录指针到找到的记录。

Locate:从当前记录开始查找,找到时,返回True,并将记录指针移动到找到的记录。查找时,注意先First

FirstLastNextPriorFind FirstFind LastFind NextFindPrior:后面四个,有返回值。找到时返回True

FreeBookmarkGetBookmarkGotoBookmarkGetBookmark指定当前记录为书签,GotoBookmark定位到指定书签,FreeBookmark释放书签。

3TDataSet常用的事件

OnFilterRecord:当FilteredTrue,且过滤结果DataSet不为空时触发。

貌似无法直接使用TDataSet,无法建立TDataSet对象。没错,TDataSetTTableTQueryTStoreProc及非BDE数据访问组件的共同父类。要使用TDataSet,必须通过它的子类功能。

二、TTable组件

TTable通过BDE访问数据库的“单一”数据表,它继承自TDataSet。大部分属性和方面前面在TDataSet中已讲,仅介绍TTable特有的部分。

常用属性:

Exclusive:用来锁住ParadoxdBase等数据库的数据表,它必须在TTable关闭时使用。并非所有数据库都支持Exclusive操作。

IndexDefs:建立、维护Table的索引。

TableName:设置或取得数据表名称。

常用方法:

BatchMove:从一DataSet移动记录到另一个Table。数据库有索引键时才有用。

CreateTable:建立数据表。调用前通过DataSetFieldDefs.AddFieldDef定义字段名称、类型等。

DeleteTable:删除前先关闭Table

三、TQuery控件

TQuery继承自TDataSet,用来通过SQL指令,访问数据库的单一或多个数据表。

常用属性:

DataSourceDataSource用来自动填满与参数相同名称的字段对应值。

SQL:用来设置、取用SQL指令。

Text:只读。取得SQL字符串。

ParamCheck:设为False可避免QuerySQL字符串视为带参数的。如当   SQL中含有时间值(15:20:39),设为False可避免将冒号视为参数。

Params:设置或取得Query的参数名称、参数值与参数的数据类型。

RequestLive:设为True可通过SELECTDataSet结果,直接改变数据库。

常用方法:

ExecSQL:执行SQL指令的操作查询(INSERTUPDATEDELETE)。执行SELECT,请调用Open方法。

ParamByName:通过参数名称操作Query的参数。

PrepareUnPreparePrepare提高Query的执行效率,UnPrepare用来关闭Prepare。不需调用,Query组件已自动帮我们开关Prepare

TQuery的使用:需设置DatabaseNameSQL语句,设置完后使其ActiveTrue。若更改SQL语句,则需重新置ActiveTrue

四、TDatabase组件

TDatabase对象统一管理连接单一数据库的BDE架构应用程序,它常用来处理事件或登录数据库的设置。

常用属性:

AliasNameDatabaseNameDriverNameAliasName读写。连接的BDE的数据库别名。DatabaseName:数据库名。若DatabaseNameAliasName相同,则不需设置AliasNameDriverNameDriverName:数据库驱动器名称。更改前,Connected必须为False

ConnectedKeepConnectionConnected:读写。数据库是否已经联机。KeepConnection:指定程序是否保持联机数据库(即使DataSet不处于打开状态)

Exclusive:当程序使用数据库时,设置Exclusive可将数据库加锁,避免其他程序使用它。并非所有数据库都支持这个属性。

LoginPrompt:设置为True,登陆数据库会出现账号、密码提示对话框。

InTransaction:检查数据库事件是否正在处理中。

TransIsolation(isolation:隔离):事件的隔离层,这个属性用来设置各事件间互动的关系。并非所有数据库都支持。取值:

tiDirtyRead

允许读取其他事件尚未改变的内容

tiReadCommitted

默认值,允许读取其他事件已改变的内容

tiRepeatableRead

最严谨的隔离层。它保证读取后其他事件不会改变目前所得数据(除非目前事件自行改变记录数据)

常用方法:

ApplyUpdates:当指定DataSet

CloseDatasets:关闭所有的DataSets,但不关闭数据库连接。Close会关闭数据库连接。

Commit:确认改变(新增、更新、删除)当前事件,并结束当前事件。调用Commit前必须先以InTransaction确认目前事件是否存在,否则会出错。

Rollback:取消事件中所有的新增、更新、删除操作,并结束当前事件。

常用事件:

OnLogin:当LoginPromptTrue时,连接数据库会触发OnLogin事件。

TTable控件举例:建立两个数据表之间的一对多关系:即俗称的Master/Detail。如订单系统就是一对多关系,一个客户会有好几条数据,但一个订单就仅对应到一条客户资料。

两个TDataSource、两个TTable、两个TDBGrid。将DataSource1DataSet设为Table1DBGrid1DataSource设为DataSource1。此时已完成Master数据表设定,接下来设定Detail数据表:Table2MasterSource设为DataSource1MasterFields设定对应属性。然后DataSource2DataSet设为Table2DBGrid2DataSource设为DataSource2。运行后,光标在DBGrid1上的数据上移动时,DBGrid2的数据也会发生相应的变化。但光标在DBGrid2上移动时,DBGrid1不会变。注意与18章讲到的TDBLookupList控件区分(此控件会双向改变,而Master/Detail只会单向改变)

 

Delphi11 是最新的 Delphi 版本,而 `delphi-opencv-master` 是一个开源的 Delphi 与 OpenCV 集成的项目,它提供了一组 Delphi 封装的 OpenCV 函数和类,方便 Delphi 开发者使用 OpenCV 进行图像处理和计算机视觉操作。 在 Delphi11 中,你可以通过以下步骤来使用 `delphi-opencv-master`: 1. 首先,你需要下载 `delphi-opencv-master` 项目的源代码,可以从 GitHub 上下载:https://github.com/Laex/Delphi-OpenCV 2. 解压缩下载的源代码,并将其中的 `OpenCV` 文件夹复制到 Delphi11 项目的根目录下。 3. 在 Delphi11 中打开你的项目,然后在菜单栏中选择 `Project` -> `Options` -> `Delphi Compiler` -> `Search Path`,将 OpenCV 文件夹所在的路径添加到搜索路径中。 4. 在 Delphi11 中使用 `uses` 语句引入 `OpenCV_Image` 单元,并调用其中的函数和类来进行图像处理和计算机视觉操作。 例如,以下代码演示了如何使用 `delphi-opencv-master` 进行图像读取和灰度化: ``` uses OpenCV_Image; var img: IplImage; begin // 读取图像 img := LoadImage('lena.jpg'); // 将图像转换为灰度图像 cvCvtColor(img, img, CV_RGB2GRAY); // 显示图像 ShowImage('My Image', img); // 等待用户按下任意键 WaitKey; // 释放图像内存 img.Release; end; ``` 这段代码使用了 `OpenCV_Image` 单元中提供的 `LoadImage` 函数和 `ShowImage` 函数来读取和显示图像,使用了 OpenCV 库中的 `cvCvtColor` 函数将图像转换为灰度图像。你可以根据自己的需要,使用 `delphi-opencv-master` 中提供的其他函数和类来进行更加复杂的图像处理和计算机视觉操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值