delphi完美经典-第16章 Delphi数据库程序设计----使用BDE组件
第16章 Delphi数据库程序设计----使用BDE组件
Delphi访问数据库的方式有:ADO、BDE、dbExpress、InterBase Express。
一、TDataSet组件
虽然Delphi有多种方式访问数据库,但它们必须依赖TDataSet。它用来显示从数据库单一或多个数据表取得的所有记录。
1、TDataSet常用属性
Active:指定或取得DataSet是否为打开状态。为True时,相当于调用Open。
Bof、Eof:Bof检测DataSet是否停在第一条记录。Eof用来检测DataSet是否停在最后一条记录。
|
Bof在以下任一条件成立时,为True |
Eof在以下任一条件成立时,为True |
|
打开DataSet |
打开空的DataSet |
|
调用First |
调用Last(除非这个DataSet是单向的) |
|
调用Prior,且因已达到第一条而失败时 |
调用Next,且因已达到最后一条而失败时 |
|
调用SetRange,取得空的DataSet或选取区时 |
调用SetRange,取得空的DataSet或选取区时 |
|
仅当DataSet为空时,Bof和Eof同时为True。 |
|
Bookmark:当DataSet并非单向时,Bookmark属性可用来指定或取得当前记录指针所在位置,如此,程序便可轻易返回指定位置。
CanModify:检测DataSet是否允许写入。
FieldCount:取得字段数。
FiledDefs:取得字段定义:字段名称、数据类型、大小等。
Fields:通过Field数组索引值取得对应的TField控件,访问对应字段数据,其常用属性和事件:
Ø AsBoolean、AsDataTime、AsString、AsVariant等:将字段值转为Boolean、DataTime、String、Variant等。
Ø Value:直接访问字段值内容。
Ø OnGetText事件:可在字段数据显示前做些额外的处理操作。其做法分为两个步骤:首先编写处理函数(处理函数有特定格式,参考API),然后将这个处理函数指定给某个字段(如:Query1.Fields[0].OnGetTextMetrics := 处理函数)。
Ø FieldValue:设置或取得字段的Variant值,输入参数为字段名称。如Query1.FieldValue[‘name’]
Ø Filter、Filtered:Filtered开关过滤条件。Filter用来取得或设置当前的过滤字符串。Filtered为False时,则Filter无效。Filter设置方法:’NAME = ‘’MWJ’’’
Ø State:DataSet目前的状态。它用来判断DataSet目前的操作模式,及接下来可做的行为。具体参考API。
2、TDataSet常用的方法
Append和AppendRecord:Append新增空记录于DataSet末端。AppendRecord新增空记录于DataSet末端。且根据输入的Values参数数组,保存到数据库。
Insert和InsertRecord:Insert新增空记录。InsertRecord新增记录,并完成Post。
Cancel:只要DataSet还在编辑模式,且尚未Post,则Cancel可放弃改变。
Post:回存记录到数据库。
Close:与Active设为False相同作用。
FieldByName:通过输入的参数字段名称,取得相应的Field。
Lookup:找到后不移动记录指针到找到的记录。
Locate:从当前记录开始查找,找到时,返回True,并将记录指针移动到找到的记录。查找时,注意先First。
First、Last、Next、Prior与Find First、Find Last、Find Next、FindPrior:后面四个,有返回值。找到时返回True。
FreeBookmark、GetBookmark、GotoBookmark:GetBookmark指定当前记录为书签,GotoBookmark定位到指定书签,FreeBookmark释放书签。
3、TDataSet常用的事件
OnFilterRecord:当Filtered为True,且过滤结果DataSet不为空时触发。
貌似无法直接使用TDataSet,无法建立TDataSet对象。没错,TDataSet是TTable、TQuery、TStoreProc及非BDE数据访问组件的共同父类。要使用TDataSet,必须通过它的子类功能。
二、TTable组件
TTable通过BDE访问数据库的“单一”数据表,它继承自TDataSet。大部分属性和方面前面在TDataSet中已讲,仅介绍TTable特有的部分。
常用属性:
Exclusive:用来锁住Paradox、dBase等数据库的数据表,它必须在TTable关闭时使用。并非所有数据库都支持Exclusive操作。
IndexDefs:建立、维护Table的索引。
TableName:设置或取得数据表名称。
常用方法:
BatchMove:从一DataSet移动记录到另一个Table。数据库有索引键时才有用。
CreateTable:建立数据表。调用前通过DataSet的FieldDefs.AddFieldDef定义字段名称、类型等。
DeleteTable:删除前先关闭Table。
三、TQuery控件
TQuery继承自TDataSet,用来通过SQL指令,访问数据库的单一或多个数据表。
常用属性:
DataSource:DataSource用来自动填满与参数相同名称的字段对应值。
SQL:用来设置、取用SQL指令。
Text:只读。取得SQL字符串。
ParamCheck:设为False可避免Query将SQL字符串视为带参数的。如当 SQL中含有时间值(15:20:39),设为False可避免将冒号视为参数。
Params:设置或取得Query的参数名称、参数值与参数的数据类型。
RequestLive:设为True可通过SELECT的DataSet结果,直接改变数据库。
常用方法:
ExecSQL:执行SQL指令的操作查询(INSERT、UPDATE、DELETE等)。执行SELECT,请调用Open方法。
ParamByName:通过参数名称操作Query的参数。
Prepare、UnPrepare:Prepare提高Query的执行效率,UnPrepare用来关闭Prepare。不需调用,Query组件已自动帮我们开关Prepare。
TQuery的使用:需设置DatabaseName和SQL语句,设置完后使其Active为True。若更改SQL语句,则需重新置Active为True。
四、TDatabase组件
TDatabase对象统一管理连接单一数据库的BDE架构应用程序,它常用来处理事件或登录数据库的设置。
常用属性:
AliasName、DatabaseName、DriverName:AliasName读写。连接的BDE的数据库别名。DatabaseName:数据库名。若DatabaseName与AliasName相同,则不需设置AliasName和DriverName。DriverName:数据库驱动器名称。更改前,Connected必须为False。
Connected、KeepConnection:Connected:读写。数据库是否已经联机。KeepConnection:指定程序是否保持联机数据库(即使DataSet不处于打开状态)。
Exclusive:当程序使用数据库时,设置Exclusive可将数据库加锁,避免其他程序使用它。并非所有数据库都支持这个属性。
LoginPrompt:设置为True,登陆数据库会出现账号、密码提示对话框。
InTransaction:检查数据库事件是否正在处理中。
TransIsolation(isolation:隔离):事件的隔离层,这个属性用来设置各事件间互动的关系。并非所有数据库都支持。取值:
|
tiDirtyRead |
允许读取其他事件尚未改变的内容 |
|
tiReadCommitted |
默认值,允许读取其他事件已改变的内容 |
|
tiRepeatableRead |
最严谨的隔离层。它保证读取后其他事件不会改变目前所得数据(除非目前事件自行改变记录数据)。 |
常用方法:
ApplyUpdates:当指定DataSet的
CloseDatasets:关闭所有的DataSets,但不关闭数据库连接。Close会关闭数据库连接。
Commit:确认改变(新增、更新、删除)当前事件,并结束当前事件。调用Commit前必须先以InTransaction确认目前事件是否存在,否则会出错。
Rollback:取消事件中所有的新增、更新、删除操作,并结束当前事件。
常用事件:
OnLogin:当LoginPrompt为True时,连接数据库会触发OnLogin事件。
TTable控件举例:建立两个数据表之间的一对多关系:即俗称的Master/Detail。如订单系统就是一对多关系,一个客户会有好几条数据,但一个订单就仅对应到一条客户资料。
两个TDataSource、两个TTable、两个TDBGrid。将DataSource1的DataSet设为Table1。DBGrid1的DataSource设为DataSource1。此时已完成Master数据表设定,接下来设定Detail数据表:Table2的MasterSource设为DataSource1,MasterFields设定对应属性。然后DataSource2的DataSet设为Table2,DBGrid2的DataSource设为DataSource2。运行后,光标在DBGrid1上的数据上移动时,DBGrid2的数据也会发生相应的变化。但光标在DBGrid2上移动时,DBGrid1不会变。注意与18章讲到的TDBLookupList控件区分(此控件会双向改变,而Master/Detail只会单向改变)。
http://blog.csdn.net/mwj_88/article/category/1426754
delphi完美经典-第16章 Delphi数据库程序设计----使用BDE组件的更多相关文章
- java JDK8 学习笔记——第16章 整合数据库
第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...
- delphi完美经典--第十八章
第18章数据感知组件 一.TDBText组件 用来以只读.一次一条记录的方式,显示DataSet中的某一字段值.因同样继承自TCustomLabel,TDBText组件除了数据感知功能外,与标准组件T ...
- 算法竞赛入门经典_第二章:循环结构程序设计_上机练习_MyAnswer
习题2-1 位数 输入一个不超过109的正整数,输出它的位数.例如12735的位数是5.请不要使用任何数学函数,只用四则运算和循环语句实现. #include<stdio.h> int m ...
- 在Delphi中处理word文档与数据库的互联 1
在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...
- 在Delphi中处理word文档与数据库的互联
在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...
- Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件
Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件 朋友们,今天我对你们说,在此时此刻,我们虽然遭受种种困难和挫折,我仍然有一个梦 ...
- MySQL性能调优与架构设计——第8章 MySQL数据库Query的优化
第8章 MySQL数据库Query的优化 前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 ...
- springboot深入浅出系列(16章97节)-看了都说好
章节目录 第一章 spring boot 2.x基础及概念入门 1.1.spring boot 产生的背景及其优势 1.2.spring boot 2.x 新特性说明 1.3.helloworld及项 ...
- MySQL性能调优与架构设计——第 16 章 MySQL Cluster
第 16 章 MySQL Cluster 前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等 ...
随机推荐
- 篇一、安装配置Android Studio
系统:Mac 10.10 Java JDK:官方JDK1.8 IDE:Android Studio 1.2 Android SDK:24.2 模拟器:genymtion 安装 Mac版本的Androi ...
- xshell 连接腾讯服务器
1.先关机, 创建秘钥,再绑定主机,下载秘钥保存下来 2. 填写好主机好和端口 3 4.导入刚才下载的文件 记住用户名是ubuntu 不是root!!
- 源码安装Apache,报错:Cannot use an external APR with the bundled APR-util
一般在第一次源码安装是没有问题的,在版本变化情况下在次源码安装可能会遇到此问题: apache2.0.x与apache2.2.x在apr有很大区别,前者为依赖公用apr,后者依赖于自身的apr.一般前 ...
- 自定义circleindicator
在此申明,并不是自己写的,只是为了方便日后使用 我使用的circleindicator是从大神的gitHub中弄来的, 使用如下: 一.在配置中导入 compile 'me.relex:circlei ...
- 关于angularjs的model的一些问题
有的时候 在一些页面中 我们会需要用到弹出的模态框,这里主要是使用angularjs的uimodel. 页面效果如下: 首先我们需要在JS的controller中导入$uibModal模块. HTML ...
- springboot带分页的条件查询
QueryDSL简介 QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询. Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者 ...
- ARDUINO使用GPRS发送GPS数据到OneNet测试
功能: 测试把固定的GPS数据发送到OneNet平台 调试途中碰到的问题 ARDUINO不支持sprintf的double打印,只能转换为char字符串然后再%s打印 #include <Tim ...
- 3.07课·········if分支语句
语句分类:顺序语句,选择语句(分支语句),循环语句 分支语句:(一)if(表达式) //表达式返回值是True或False{}说明:1.表达式返回的是bool值:2.小括号和花括号后面不需要加分号. ...
- Effective java -- 1
写博客我也不知道是不是一个好习惯,但是目前还不知道有什么其他更有效率的学习方法.现在的学习方法:看书,写博客.如果看明白一个东西,去写博客的话,这通常是一个浪费时间的行为,但是这个过程同样帮助自己二次 ...
- IE盒模型和标准盒模型
标准盒模型和ie盒模型(怪异盒模型) w3c标准盒模型 width和height不包括padding和border ie盒模型 width和height包含padding和border ie8以上都是 ...