Delphi数据库技术

原创 2012年03月22日 11:40:03

  Delphi数据库技术

Delphi数据库组件

TField对象的使用

数据集的操作

1Delphi数据库组件

Delphi使用VCLBDE封装成组件,为数据库应用程序提供统一的访问接口,组件面板的BDE页、DataAccess页和Data Controls页提供了不同的数据库组件。其中,BDE页和Data Access页的组件为非可视组件,Data Controls页的组件为可视组件。

BDE组件集(BDE页):提供了以BDE方式访问数据库的数据表和查询等数据集组件,如TTableTQueryTStoredProc等;

数据访问组件集(DataAccess页):提供了数据源等连接组件;

数据控制组件集(DataControls页):用来浏览和编辑数据,为用户使用数据库提供接口,如TDBGridTDBEditTDBMemo等。

1.1 TTable组件

TTable组件用于连接一个数据表并对数据表的各种状态进行控制,它通过BDE从一个数据库表格中取得数据,并通过TDataSource组件将数据传递给一个或多个数据控制组件,或者反之,从数据控制组件得到的信息通过BDE传递给数据库。TTable组件既可以访问本地的数据库,也可以访问ODBC数据库,还可以访问远程数据库。

TTable组件连接数据表的一般步骤

步骤一:把一个TTable 组件放到窗体上,设置DatabaseName属性指定要访问的数据库。

步骤二:设置TableName属性指定要访问的表。

步骤三:把一个TDataSource 组件放到窗体上,设置DataSet属性指向该TTable组件。

步骤四:把一个数据控制组件放到窗体上,设置DataSource属性指向该DataSource组件。

步骤五:把TTable组件的Active属性设为True

字段组件的访问

字段组件对应着数据表中实际的字段,读写数据表中的字段值是通过访问相应的字段组件行的。一般采用的方法有两种:使用数据集组件的Fields属性可以通过Fields属性的下标(即索引号)来访问各字段,索引号从0开始。例如,Table1.Fields[0]表示当前记录的第一个字段的数据。如:Table1.Fields[0].AsString:=Edit1.Text;Edit1.Text:=Table1.Fields[0].AsString;

使用数据集组件的FieldByName方法用这种方法访问字段组件时,必须知道数据表中各个字段的名字。

例如:

Edit1.Text:=Table1.FieldByName('Name').AsString;

记录的增加与删除

  Insert方法:在当前记录之前插入一条新的记录。

  Append方法:在文件的最后追加一条新的记录。

  Edit方法:修改当前记录。

  Delete方法:删除数据表中的当前记录。

  Post方法:当数据集处于编辑状态时,将当前记录的修改写回数据库表。

1.2 TDataSource组件

TDataSource组件是联系数据集组件与数据控制组件的桥梁。其常用属性如下:AutoEdit属性:该属性值是一个布尔值,用于说明是否将数据集置于编辑状态,为Ture时允许用户编辑数据集中的数据。DataSet属性:指明与当前数据源组件相联系的数据集组件对象的名字。Enabled属性:该属性值是一个布尔值,决定了与此数据源组件相连的数据控制组件是否显示数据。为True(默认值)时,数据控制组件将显示数据。

1.3 数据控制组件

数据控制组件也称为数据感知组件,它应用程序的接口,让用户能浏览和操作数据库。数据控制组件在Data Controls页上。数据控制组件与数据集组件之间的联系是通过数据源组件TDataSource来实现的。

数据控制组件常用属性:

DataSource:将此属性设置为窗体上数据源组件的名称,建立数据控制组件与数据源组件之间的联系。

DataField :用来确定访问的是数据集中的哪一字段。

TDBGrid组件和TDBNavigator组件访问数据集中所有的字段,所以没有这一属性。

Enabled:决定数据控制组件能否接受来自鼠标、键盘和定时器事件的消息。

ReadOnly:确定是否可以在数据浏览中编辑修改字段的值。默认值为False,也就是可以在其中编辑修改字段的值,反之,则不可以。

TDBGrid组件

TDBGrid组件的作用是一个将数据集记录显示在网格中,并且可以对其中的数据进行编辑修改。Columns属性。指定TDBGrid对象中各栏目的特性,如栏目的标题、栏目的宽度及颜色、在该栏目中显示的字段的名称、数据在栏目中的位置方式等。

TDBNavigator组件

TDBNavigator组件是用来在数据集中浏览数据和编辑数据的,它由一组控制按钮组成,通过这些控制按钮,用户可以完成在数据集中移动记录指针,插入、删除、编辑、确认、取消、刷新记录数据等。它一般与其他数据控制组件(如TDBGridTDBEdit)一起使用。

设置按钮

TDBNavigator组件中提供了10个按钮,设置各按钮的VisibleButtons属性可以控制按钮的显示与否。

设置按钮提示字符串

TDBNavigator组件的Hints属性和ShowHint属性就用来设置和显示提示字符串。

设置按钮的操作方式

CanfirmDelete属性。该属性值是一个布尔值,用于控制执行删除操作时是否弹出确认对话框缺省值为True

TDBText组件

TDBText组件是用来显示数据集里当前记录中一个特定字段的值,随着记录指针的移动,其显示的内容也不断变化,这是它与TLabel组件不同的地方。用TDBText组件显示的字段值是只读属性的。如果用户要修改数据,就需要使用TDBEdit组件或者TDBMemo组件。DBText组件的重要属性有DataSourceDataField属性。

TDBEdit组件

TDBEdit组件用来显示和编辑数据集里当前记录中一个特定字段的值,随着记录指针的移动,其显示的内容也不断变化。常用属性有DataSourceDataFieldEnabledReadOnly

TDBMemo组件

TDBMemo组件用来显示和编辑数据集中的多行文本,TDBMemoText属性代表了该字段的内容。TDBMemo组件除了具有其他数据控制组件所具有常用属性以外,还具有以下不同的属性:

AutoDisplay属性:决定是否自动显示数据集中备注类型的字段值。

Alignment属性:说明文本的对齐方式。

MaxLength属性:限定可以输入的最大字符数。值为0时表明不限制最大字符数。

WordWrap属性:指明文本是否自动换行。

TDBCheckBox组件

  TDBCheckBox组件是允许用户选择或不选择一个值的数据控制组件,TDBCheckBox组件适合于表达布尔类型数据的字段。TDBCheckBox组件除了完成CheckBox组件的功能外,主要是用来显示和修改一个布尔类型数据的字段值。

TDBListBox组件

TDBListBox组件用来提供给用户一个可选的列表,用户可以从中选取适当的值来修改当前记录中的特定字段值。它与TListBox组件类似。

TDBComboBox组件

TDBComboBox组件与TDBListBox组件的功能相似,其用法与TDBListBox组件相应的属性一样。

TDBRadioGroup组件

TDBRadioGroup组件是允许用户在一组选项中选取唯一一项的数据控制组件,它必须指向数据集中一个特定的字段。TDBRadioGroup组件与普通单选框用法相似。

TDBImage组件

TDBImage组件用来显示和编辑当前记录中BLOB类型的图形字段。该组件除了可以在窗体中显示数据集里的图形数据外,还允许通过剪贴板对图形数据进行编辑操作。其特殊的属性有:

Picture属性:保存DBImage对象中的图形数据。

Center属性:控制是否将图形自动显示在对象的中心。该属性默认值为False,图形显示在DBImage对象的左上角。

2TField对象的使用

动态字段对象和永久字段对象

设置字段属性

对字段进行格式化

字段的有效性检查

创建查找字段

创建计算字段

2.1 动态字段对象和永久字段对象

  TField字段对象可以方便地访问数据集中的字段。当把一个数据集放到窗体上并且打开它时,Delphi会为数据集中的每一个字段自动生成一个动态的字段对象。当数据集关闭时,这些字段对象也跟着消失。动态字段对象的最大特点是适应性强,动态字段对象的不足之处是:要想改变字段的显示属性、数据格式,就要编写代码。不能把某些字段暂时隐去,也不能增加新的字段。

永久字段对象的最大好处是可以在设计时设置它的属性。此外,永久字段对象还具有以下优势:选择部分字段;增加新的字段,包括“计算字段”等;在永久字段对象列表中删除某些需要保护的字段,避免用户访问这些特定的字段;在数据库查询或特定数据表的字段基础上定义新字段,代替现存的字段;改变原有字段的显示和编辑属性。对于同一个数据集来说,动态字段对象和永久字段对象不能同时存在。

2.2 设置字段属性

为数据集创建永久TField对象步骤如下:

步骤一:设置一个数据集组件(如TTable)和数据表关联;

步骤二:双击TTable组件,或右击Ttable组件,选择“Fileds Editor”菜单命令,将打开字段编辑器;

步骤三:右击字段编辑器窗口的空白处,弹出快捷菜单,单击“Add Fields”菜单命令,打开“Add Fields”对话框;

步骤四:选择一个或几个字段,单击OK按钮。Delphi将根据选择的字段创建永久字段对象。

TField对象常用属性:

Alignment:设置字段在数据组件中的对齐方式

Currency:仅用于数字字段,True表示按货币格式显示

DisplayFormat:设置字段在数据组件中的显示格式

DisplayLabel:设置字段在数据表格中的列标签

EditFormat:设置字段在编辑时的显示格式

EditMask:设置用户编辑数据时必须遵守的规则

FieldKind:指定字段的生成类型

FieldName:指定字段的名称

TField对象常用属性:

Index:指定字段在数据集中的序号

Max Value:指定字段的最大值

Min Value:指定字段的最小值

Name:指定永久字段对象的内部名称。

Size:指定字段的长度(以字符为各单位)

2.3 对字段进行格式化

操作步骤如下:

步骤一:双击TTable组件,在字段属性编辑器中添加字段后,选定BIRTHDAY字段。

步骤二:在对象浏览器(Object Inspector)窗口中双击“EditMask”属性,将打开“Input Mask Editor”对话框。

步骤三:为选定的字段设置掩模码并测试,然后单击“OK”按钮关闭对话框。

2.4 字段的有效性检查

字段的有效性可以保证字段中的数据与预定义的数据格式、限定范围、条件等相符。可以使用TField对象的Validation事件来控制字段的有效性规则。

2.5 创建查找字段

使用查找字段可以在表格中添加一个下拉列表框,使得用户可以在数据集对象设定的一些选项中选择,而不必盲目地用键盘输入数据。用这种方法可以确保用户输入的总是有效数据,从而不必总是要进行有效性检查。

2.6 创建计算字段

DelphiTField对象还允许创建另一种特殊的字段——计算字段。计算字段是根据数据表中的字段数据计算出来的,用户可以通过计算字段很直观地看到几个字段的计算结果,但数据表不会将计算字段的数据存入内存,因此计算字段不会被存储在数据表中,它只是用来显示某些计算结果的。

3、数据集的操作

数据集的打开和关闭

数据集的状态

移动记录指针

限制记录集

查找记录

数据集的修改

建立数据表的主从关系

3.1 数据集的打开和关闭

1. 设置Active属性

Active属性用来说明数据表文件的打开状态。通过设置Active属性来决定一个数据集组件与数据表数据之间的联系。

2. 调用OpenClose方法

使用OpenClose方法也能打开和关闭一个数据集。

3.2 数据集的状态

数据集的状态(State属性)决定了当前能够对数据集进行的操作。在程序运行期间,可以通过检测数据集的只读属性State来确定其当前状态。

3.3 移动记录指针

在对数据表操作时,系统使用一个记录指针指向当前正在访问的记录。浏览数据表就是通过移动记录指针来查看数据表中的记录。

Bof属性:Bof属性为布尔值。为True表明当前记录指针所处的位置为数据集的第一条记录;

Eof属性:Eof属性为布尔值。为True表明当前记录指针所处的位置为数据集的最后一条记录;

First方法:将记录指针移至数据集的第一条记录处,并使之成为当前记录,同时将Bof属性值设置为True

Last方法:将记录指针移至数据集的最后一条记录处,并使之成为当前记录,同时将Eof属性值设置为True

Next方法:将记录指针后移一条记录,并使之成为当前记录。如果记录指针指向了数据集的最后一条记录,将Eof属性设置为True

Prior方法:将记录指针前移一条记录,并使之成为当前记录。如果记录指针指向了数据集的第一条记录,将Bof属性设置为True

MoveBy方法:将记录指针从当前记录开始向后或向前移动若干条记录。格式如下:

function MoveBy(Distance:Integer):Integer;

3.4 限制记录集

Delphi提供了以下两种常用的限制记录集的方法。

1. SetRangeStart方法和SetRangeEnd方法

  SetRangeStart方法和SetRangeEnd方法可以过滤记录,SetRangeStart方法用来限制记录集的开始,SetRangeEnd方法用来限制记录集的结束,调用ApplyRange方法使限制生效。调用CancelRange方法取消为数据表设定的限制范围。这种限制记录集的方法要求指定数据集的检索字段。

2. 使用数据集的Filter属性

Delphi提供了一种更简便的限制记录集的方法:用数据集的Filter属性。Filter属性值是一个用来指明数据表过滤标准的字符串,Filtered属性决定了过滤器是否起作用。当使用Filter属性时,不必指定数据集的检索字段,各字段或字段的组合都可以运用该属性。

3.5 查找记录

1. 使用FindKey方法

使用TTableFindKey方法或FindNearest方法,可以查找数据表中满足条件的记录,要查找的表必须按查找关键字建立了索引。其定义如下:

function FindKey(Const KeyValues:Array of Const):Boolean;

procedure FindNearest(Const KeyValues:Array of Const);

2.搜索特定记录(Locate

FindKeyFindNearest方法只能在TTable组件中使用,如果使用的是TQueryTStoreProc组件,就要使用Locate方法来查找记录。Locate 函数适合于所有数据集组件,也适合于TTable组件。Locate函数可以在任何表中基于任何类型的字段来查找记录,而不管表格是否建立了索引。

Locate函数定义如下:

function Locate(const KeyFields:string;

Const KeyValues:Variant;Options):Boolean;

3.6 数据集的修改

与数据集修改有关的属性和方法:

ReadOnly属性:确定相应的数据集是否为只读方式。True表示只读,不能修改。

Exclusive属性:确定相应的数据集是否为独占方式。如果设定为True,则其他程序不能使用该数据集,否则可同时使用。

CanModify属性:确定相应的数据集是否可以改变。当以只读方式打开数据集时,该属性的返回值为False

Modified属性:标记相应的数据集是否已被修改过。当其值为True时,表示已被修改过。

Delete方法:删除数据集中的当前记录,并使当前记录指向下一条记录。

Edit方法:使数据集处于编辑状态,此时才可对数据集进行编辑修改操作。

Insert方法:在当前记录之前插入一个新的空记录,并将新记录作为当前记录。用户向记录的字段中输入数据后,通过调用Post方法将这些更改提交给数据库。

Post方法:使当前对数据集所作的修改有效,即对数据集所作的修改写入到数据库中。调用了EditInsertAppend等方法后,需要调用Post方法将修改的数据写回数据库。

Cancel方法:使当前对数据集所作的修改无效,即取消对数据集所作的修改。

AppendRecord方法与InsertRecord方法:这两个方法分别与Append方法和Insert方法相似,它们都是用于在表中插入一条新记录,但AppendRecord方法和InsertRecord方法比Append方法和Insert方法更简单、更方便一些,不需调用Post方法。其过程形式如下:procedure AppendRecord(Const Values: Array of Const);

procedure InsertRecord(Const Values: Array of Const);

SetFields方法:以参数的形式来修改当前记录中的多个字段值。其过程形式如下:

procedure SetFields(Const Values: Array ofConst)

Refresh方法:从数据库中取出数据来更新数据集的内容。它保证了应用程序拥有数据库的最新数据。

3.7 建立数据表的主从关系

设置表之间的主从关系是通过设置从表的MasterSource属性和MasterField属性来实现的。且从表必须是按MasterField属性中指定的字段建立了索引的。

相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

多线程技术在Delphi数据库编程中的应用

引言   在传统上,并发多任务的实现采用的是在系统级运行多个进程,由操作系统按照一定的策略(优先级、循环等),调度各个进程的执行,以最大限度的利用的各种资源。在这种实现方法中最基本的调度单位是操作系...

[转]多层数据库应用基于Delphi DataSnap方法调用的实现(三)对象池技术

[转]多层数据库应用基于Delphi DataSnap方法调用的实现(三)对象池技术 之前说到中间层通过向客户端暴露方法的方式提供服务,实现数据库数据的读取和更新。方法调用的方式...

delphi数据库技术续

delphi数据库技术续 TQuery组件 ADO技术 1.1 TQuery组件与TTable组件的比较 TQuery组件和TTable组件同属于数据集组件,它们在很多地方是相似的,但二者又有...
  • luolunz
  • luolunz
  • 2012年03月22日 14:22
  • 887

多层数据库应用基于Delphi DataSnap方法调用的实现(三)对象池技术

之前说到中间层通过向客户端暴露方法的方式提供服务,实现数据库数据的读取和更新。方法调用的方式,其潜在的意义,就是说中间层不保存客户端状态信息,就像WEB服务一样,客户端需要自己保存自己的状态信息。进一...
  • ddqqyy
  • ddqqyy
  • 2011年02月12日 15:13
  • 5936

Delphi 停靠技术的应用1(在一个窗体中停靠另一个窗体)

一、基础知识介绍 1、VCL组件的基础知识         在TWinControl类中有一个DockSite属性(boolean),它的作用是是否允许别的控件停靠在它的上面;在TCont...

Delphi6数据库深入编程技术

  • 2007年05月23日 19:05
  • 6.74MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi数据库技术
举报原因:
原因补充:

(最多只允许输入30个字)