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只会单向改变)

 

目录 : 第0章 认识Delphi 0-1 前言 0-2 Delphi简介 0-3 进入Delphi7 0-4 退出Delphi 第1章 常用的窗口工具 1-1 窗体(Form) 1-2 代码编辑器(Code Editor) 1-3 代码浏览器(Code Explorer) 1-4 组件面板(Componet Palette) 1-5 对象检视器(Object Inspector) 1-6 快捷工具栏(Speed Menu) 1-7 项目管理器(Project Manager) 1-8 桌面工具栏(Desktops Tollbar) 1-9 图像编辑器(Image Editor) 1-10 对象浏览器(Object TreeView) 1-11 关联选项卡(Digram Page) 第2章 常用的菜单 2-1 File菜单 2-2 Edit菜单 2-3 Search菜单 2-4 View菜单 2-5 Project菜单 2-6 Run菜单 2-7 Tools菜单 2-8 Windows菜单 第3章 集成开发环境的改变 3-1 Delphi集成开民环境介绍 3-2 操作菜单方面的改进 3-2-1 外面方面的改变 3-2-2 内容方面的改变 3-3 对象检视器方面的改进 3-4 组件面板的改进 3-5 代码编辑器的改进 3-6 设计陈列室的改进 3-7 编译信息的显示 3-8 调试器方面的改进 3-8-1 Watch List改进 3-8-2 Debugger选项的改进 3-8-3 Run Parameters对话框的改进 第4章 Delphi Object Pascal的初步印象 4-1 面向对象程序概论 4-1-1 类 4-1-2 对象 4-1-3 继承 4-1-4 封装 4-1-5 信息 4-2 Delphi项目结构及窗体的建立 4-2-1 GUI模式的项目 4-2-2 Console模式的项目 4-3 Object Pascal程序结构 4-3-1 项目程序(Program)的结构 4-3-2 单元程序(Unit)的结构 4-4 如何完成一个简单的窗体程序 第5章 简单的常用指令介绍 5-1 TLabel类对象 5-1-1 Caption属性 5-2 TButton类对象 5-2-1 Caption属笥 5-2-2 OnClick事件 5-3 TEdit类对象 5-4 TCanvas类对象 5-5 Showmessage函数 5-6 InputBox函数 5-7 MessageDlg函灵敏 第6章 Delphi与Object Pascal程序的基本概念 6-1 Object Pascal Program程序结构与Delphi项目结构的关系 6-1-1 标头(Heading) 6-1-2 Uses子句 6-1-3 编译指令(Compiler directive) 6-1-4 源代码区(begin end) 6-2 Unit程序结构与窗体的关系 6-2-1 Unit代码结构 6-2-2 语句(Statement) 6-2-3 Unit间Use的状况 6-3 数据类型与定义变量 6-3-1 数据类型概论 6-3-2 不需要使用type声明的数据类型 6-3-3 必须使用type声明的数据类型 6-3-4 定义变量 6-3-5 变量的作用域 6-3-6 定义常量 6-3-7 变量的类型转换(Typecast) 6-4 Object Pascal的运算符(Operator) 6-4-1 设置运算符(assign Operator) 6-4-2 算数运算符(Arithmetic Operator) 6-4-3 关系运算符(Relational Operator) 6-4-4 布尔运算符 6-4-5 集合运算符 6-4-6 字符串运算符 6-4-7 位逻辑运算符 6-4-8 运算符优先级 6-5 流程控制 6-5-1 语句的基本概念 6-5-2 表达式语句(Expression-Statement) 6-5-3 流程控制语句 6-5-4 可视化程序与嵌套程序 6-6 数组与指针 6-6-1 数组类型 6-6-2 指针类型 6-6-3 浅谈指针与数据结构 6-7 程序与函数(Procedures and Functions) 6-7-1 函数的意义与优点 6-7-2 函数的分类与效用 6-7-3 自定义函数使用方法概述 6-7-4 函数的声明、定义及其实现 6-7-5 参数传递方式 6-7-6 声明修饰字 6-7-7 常用的内建函数 第7章 Object Pascal面向对象设计 7-1 类和对象 7-1-1 类(Class)与对象(Object)的基本概念 7-1-2 对象的构造与类的关系 7-2 类的声明与对象的定义 7-2-1 类的声明与对象的实现 7-2-2 对象的构造与析构 7-3 类成员的封装等级与可见度 7-3-1 封装的意义 7-3-2 Object Pascal类成员的封装等级 7-3-3 以实例说明类成员封装等级的可见度 7-3-4 开头不加保留字的类成员 7-3-5 成员封装等级的变更法则 7-4 类成员的定义与实现 7-4-1 字段(Field)与对象引用(Object Reference)的实现 7-4-2 方法(Method) 7-4-3 属性(Property) 7-5 类的继承 7-5-1 继承的意义与优点 7-5-2 子类成员的存在方式 7-6 成员函数的Override及 Overload 7-6-1 Override 适用的情况——Virtual与 Dynamic的成员函数 7-6-2 Override成员函数的定义语法 7-6-3 Virtual成员函数与动态绑定(Dynamic Binding) 7-6-4 覆盖(Overriding)与隐藏(Hiding)的差别 7-6-5 Override与OVerload的差别 7-7 Abstract成员函数与多态(Polymorphic) 7-7-1 一般纯虚函数的多态实现概念 7-7-2 纯虚函数的定义语法及实现 7-8 Self、AS、is、Sender、Parent、owner、inerited 7-8-1 Self变量 7-8-2 AS运算符 7-8-3 is运算符 7-8-4 Sender 7-8-5 Parent 7-8-6 owner 7-8-7 inerited保留字 7-9 静态成员方法——Class Methods 第8章 异常处理 8-1 异常处理存在的目的 8-2 Object Pascal异常的种类 8-2-1 Delphi内建的异常类 8-2-2 自定义异常类 8-3 触发异常的方法 8-3-1 由程序系统自动触发 8-3-2 使用Raise指令触发 8-4 处理异常情况 8-4-1 try…finally…end语法说明 8-4-2 ty…except…end语法说明 第9章 Delphi用户接口设计详述 9-1 基本概念 9-2 TForm的属性 9-2-1 由TComponent继承而来的属性 9-2-2 由TControl继承而来的属性 9-2-3 由TWinControl继承而来的属性 9-2-4 由TScrollingWindControl继承而来的属性 9-2-5 由TCustomForm继承而来的属性 9-3 TForm的方法 9-3-1 由TObject继承而来的属性 9-3-2 由TPersistent继承而来的属性 9-3-3 由TComponent继承而来的属性 9-3-4 由TControl继承而来的属性 9-3-5 由WinControl继承而来的属性 9-3-6 由TScrollingWinControl继承而来的属性 9-3-7 由TCustomForm继承而来的属性 9-3-8 由TForm继承而来的属性 9-4 TForm的事件 9-4-1 由TControl继承而来的属性 9-4-2 由TWinControl继承而来的属性 9-4-3 由TCustomForm继承而来的属性 9-5 TLabel的类成员 9-5-1 TLabel的属性 9-5-2 TLabel的方法 第10章 标准组件介绍及实作范例 10-1 Frames组件 10-2 MainMenu组件 10-3 PopuMenu组件 10-4 Label组件 10-5 Edit组件 10-6 Memo组件 10-7 Button组件 10-8 CheckBox组件 10-9 RadioButton组件 10-10 ListBox组件 10-11 ComboBox组件 10-12 ScrollBar组件 10-13 GroupBox组件 10-14 RadioGroup组件 10-15 Panel组件 10-16 ActionList组件 第11章 TApplication与TScreen类介绍及应用 11-1 TApplication类 11-1-1 TApplication类对象常用的属性 11-1-2 TApplication类对象常用的方法 11-2 TScreen类 第12章 高级组件介绍 12-1 Additional选项卡中的常用组件 12-1-1 TBitBtn组件 12-1-2 TMaskEdit组件 12-1-3 TImage组件 12-1-4 TShape组件 12-2 Win32选项卡中的常用组件 12-2-1 TPageControl组件 12-2-2 TImageList组件 12-2-3 TRichEdit组件 12-2-4 TDateTimePicker组件 12-2-5 TStatusBar组件 12-3 System选项卡中的常用组件 12-3-1 TTimer组件 12-4 Dialogs选项卡中的常用组件 12-4-1 TOpenDialog组件 12-4-2 FTontDialog组件 12-4-3 TColorDialog组件 第13章 封装Delphi7开发的应用程序 13-1 安装Borland的InstallShiled程序 13-2 利用InstallShield封装 Delphi7开发的程序 13-2-1 InstallShield环境界面简介 13-2-2 封装一个简单的Delphi项目 第14章 数据库概念及SQL指令介绍 14-1 数据库基本概念 14-1-1 数据库结构 14-1-2 开放数据库连接协议(ODBC) 14-1-3 SQL Explorer 14-2 结构化查询语言SQL 14-2-1 CREATE语句 14-2-2 ALTER TABLE语句 14-2-3 DROP语句 14-2-4 SELECT语句 14-2-5 INSERT、UPDATE语句 14-2-6 DELETE语句 14-3 SQL指令高级使用 14-3-1 UNION运算 14-3-2 JOIN运算 14-3-3 特殊运算符 14-3-4 子查询(Sub Query) 第15章 Delphi数据库程序基础 15-1 Delphi各种数据库连接设置 15-1-1 建立dBase、Paradox连接 15-1-2 建立Access连接 15-1-3 建立MSSQL连接 15-1-4 建立MySQL连接 15-2 Delphi的Database Desktop使用方法 15-2-1 字段定义 15-2-2 输入数据 15-2-3 设置BDE数据库别名与连接数据库 第16章 Delphi数据库程序设计——使用BDE组件 16-1 TDataSet组件 16-1-1 TDataSet组件常用的属性 16-1-2 TDataSet组件常用的方法 16-1-3 TDataSet组件常用的事件 16-2 TTable组件 16-2-1 TTable组件常用的属性 16-2-2 TTable组件常用的方法 16-3 TQuery组件 16-3-1 TQuery组件常用的属性 16-3-2 TQuery组件常用的方法 16-4 TDataModule组件 16-5 TDatabase组件 16-5-1 TDatabase组件常用的属性 16-5-2 TDatabase组件常用的方法 16-5-3 TDatabase组件常用的事件 16-6 综合范例 16-6-1 员工管理系统——使用TTable组件 16-6-2 员工管理系统——使用TQuery组件 16-6-3 订单管理系统——使用TTable组件 16-6-4 订单系统——使用TQuery组件 第17章 数据程序设计——使用Delphi组件 17-1 TADOConnection组件 17-1-1 TADOConnection组件常用的属性 17-1-2 TADOConnection组件常用的方法 17-1-3 TADOConnection组件常用的事件 17-2 TADOCommand组件 17-2-1 TADOCommand组件常用的属性 17-2-2 TADOCommand组件常用的方法 17-3 TADODataSet组件 17-3-1 TADODataSet组件常用的属性 17-3-2 TADODataSet组件常用的方法 17-3-3 TADODataSet组件常用的事件 17-4 TADOTable组件 17-4-1 TADOTable组件常用的属性 17-4-2 TADOTable组件常用的方法 17-5 TADOQuery组件 17-6 综合范例 17-6-1 客户管理系统——使用TADODataSet组件 17-6-2 客户管理系统——使用TADOTable组件 17-6-3 客户管理系统——使用TADOQuery组件 17-6-4 订单管理系统——使用TADOTable组件 17-6-5 订单系统——使用TADOQuery组件 第18章 数据感知组件 18-1 TDBText组件 18-2 TDBEdit组件 18-3 TDBMemo组件 18-4 TDBImage组件 18-5 TDBListBox组件 18-6 TDBComboBox组件 18-7 TDBLookupListBox与TDBLookupComboBox组件 18-8 TDBNavigator组件 18-9 TDBGrid组件 第19章 设计Delphi数据库报表 19-1 设计报表的基本观念 19-1-1 报表的组成 19-1-2 报表的主体组件——TquickRep 19-1-3 建立第一个报表程序 19-2 QuickReport中可打印出组件 19-2-1 TQR系列组件介绍 19-2-2 TQRDB系列组件介绍 19-3 综合范例 19-3-1 一般表达报表范例 19-3-2 标签式报表范例 19-3-3 主/明细报表范例 19-3-4 一般表达式附图片报表范例 19-3-5 分组式报表范例——打印多色报表 19-3-6 报表输出及输出范例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值