![DELPHI基础教程:简单数据库应用的创建及MASTAPP介绍(三)[1],第1张 DELPHI基础教程:简单数据库应用的创建及MASTAPP介绍(三)[1],第1张](/aiimages/DELPHI%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B%EF%BC%9A%E7%AE%80%E5%8D%95%E6%95%B0%E6%8D%AE%E5%BA%93%E5%BA%94%E7%94%A8%E7%9A%84%E5%88%9B%E5%BB%BA%E5%8F%8AMASTAPP%E4%BB%8B%E7%BB%8D%EF%BC%88%E4%B8%89%EF%BC%89%5B1%5D.png)
利用GotoNearest方法执行不精确查找
窗体中的 不精确查找 按钮的事件处理过程代码如下
procedure TForm Button Click(Sender: TObject)
begin
with table do
begin
IndexFieldNames:= Company ;
setkey;
FieldByName( Company ) AsString:=Edit text;
GotoNearest;
label caption:=FieldByName( Company ) AsString;
end;
end;
读者可以利用 FindNearest 方法执行上面的不精确查找 具体使用方法可以参看Findkey方法的使用
在上面的例子中要设置table 的IndexFieldNames属性为Company
GotoNearest方法进行不精确查找
修改数据库中的记录
我们掌握了字段对象的概念和如何查找数据库中的记录之后 下面我便可以很方便地修改数据库中现存的记录了 一般来说 在程序中修改数据库中的记录包括下面这些步骤
在数据库中找到要修改的记录 并将记录指针移至该记录
调用Edit方法将与数据库表相连的TTable部件设置成编辑状态
修改一个或多个字段
调用post方法将修改后的记录写入数据库
以上这几个步骤只是概述性的 具体实现时还有很多细节需要留心 我们通过一个例子来演示上面的全过程 以便让读者进一步地了解和掌握修改记录的方法
例 我们为四个按钮分别编写了事件处理过程 用来遍历数据库中的记录并对每个客户记录的Company字段进行修改 在程序对记录进行更新 *** 作时窗口中的控件都是无效的 在这个例子中我们还编写了一个简单的异常代码块用来确保在更新过程中出现异常时使控件恢复正常 *** 作
修改数据库记录
Edit方法Post方法
为了能让用户通过程序修改数据库表中的记录 TTable部件必须要处在编辑状态下 在大多数情况下 数据库表都是以浏览(只读方式)方式打开的 也就是说它的每一个字段可以被读取介不能被编辑修改 调用Edit 方法能够将 TTable 部件置成编辑状态 当TTable部件处于编辑状态后 我们才可以通过程序修改当前记录指针所指向的记录 但这样修改后的记录不会立即被写入到磁盘上的实际数据库表中 要想保存对记录的修改 必须要调用Post方法 Post方法才真正将我们对记录的修改写入实际的数据库表中
一般来说 用来扫描整个数据库表并修改每个记录的某一个字段的程序如下所示
with Table Do
begin
DisableControls;{在修改记录的过程中 使其它部件无效}
First; {将记录指针指向第一条记录}
while not EOF do
begin
<读取记录的一个字段值到一个变量中>
<做适当的修改>
Edit; {将TTable部件置成编辑状态}
<将修改后的字段值写回到其对应的字段>
post; {将修改后的记录写回数据库}
next; {修改下一条记录}
end;
enablecontrols; {恢复其它部件的功能}
end;
程序都是对TTable部件进行 *** 作 因此使用With语句来防止错误的扩散是很有意义的 在这里要注意Disablecontrols方法和EnableControls方法的使用 DisableControls方法是在程序修改TTable部件中的记录时 切断TTable部件与数据访问部件TDatasource 部件的联系 否则 在对TTable中的每一修改之后 TDataSource 部件都会更新窗体中所有数据浏览部件的显示内容 这样会急剧减慢处理过程而且浪费时间 EnableControls方法是与DisableControle方法执行相反的 *** 作 它是用来恢复TTable部件与TDatasource部件的联系并促使所有的数据浏览部件更新显示
调用First方法是将记录指针移到数据库表中的第一条记录 确保程序从表中的第一条记录开始进行修改 调用Next方法是将记录指针从当前的记录移到下一条记录 这样保证了从表中的第一条记录开始逐条记录进行修改 直到修改完最后一条记录 如果不调用Next方法 程序将会陷入无穷的死循环
实现异常保护的TRY…FINALLY语句
上面的程序存在着潜在的危险 在实际应用过程中 可能因为某些原因使得对数据库表的更新不能进行下去 如当程序试图执行Post方法将修改后的记录写回磁盘时 而又因为某种原因磁盘没有准备好 这时便出现了异常 当出现异常时 应用程序会暂停下来并且会d出一对话框显示有关的错误信息 在用户单击错误信息对话框之后 程序将继续执行到某一个地方去 而这个地方常常不是用户所能预料到的 在我们的程序中 在执行Post方法之前 窗体中所有的部件与TTable部件都已失去联系 因此 这种异常将导致窗体中显示的数据和数据库无关
Object Pascal中的Try…Finally语句为我们解决上述异常问题提供了一个解决方法 在Delphi中仍然采用了这一语句用来处理异常问题 实际上 Try…Finally 语句是把两组语句组合在一起 语句的Try部分包含了可能产生异常的程序代码 Finally部分包含了即使发生了异常也必须执行的一条或多条语句 在本例中 Finally 部分只包含了EnableControls方法调用这一条语句 我们将前面的代码改写并组合进Try…Finally 语句
with Table Do
begin
DisableControls;{在修改记录的过程中 使其它部件无效}
Try;
First; {将记录指针指向第一条记录}
while not EOF do
begin
<读取记录的一个字段值到一个变量中>
<做适当的修改>
Edit; {将TTable部件置成编辑状态}
<将修改后的字段值写回到其对应的字段>
post; {将修改后的记录写回数据库}
next; {修改下一条记录}
end;
enablecontrols;
Finally;{出现异常时 执行下面的程序}
enablecontrols; {恢复其它部件的功能}
end; {结束Try…Finally语句}
end;
在保留字Try和Finally之间的代码跟前面的代码是一样的 它们用于在记录之间移动记录指针并处理对记录的修改 这一段代码可能会出现异常 当异常发生时 我们想保证执行EnableControls 以便窗体中各控件恢复与 TTable 部件的联系 因此我们必须将EnableControls语句放在Finally和结束语句End之间
在这里要特别注意 请读者们不要混淆了Try…Finally语句和Try…Except 语句 如果真正想在发生异常时采取相应的处理 就要使用Try…Except语句 Try… Finally语句只是用来处理当异常出现时 使应用程序执行Finally部分的语句 使程序继续执行下去 Try…Except语句是实现异常处理 Try…Finally语句是实现异常保护
有了上述这些概念 我们便可以提供这个例子的一些程序代码 它涉及了所有这些内容
lishixinzhi/Article/program/Delphi/201311/25167
Berkeley DB (DB)是一个高性能的,嵌入数据库编程库,和C语言,C++,Java,Perl,Python,PHP,Tcl以及其他很多语言都有绑定。Berkeley DB可以保存任意类型的键/值对,而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时 *** 作数据库,支持最大256TB的数据,广泛用于各种 *** 作系统包括大多数Unix类 *** 作系统和Windows *** 作系统以及实时 *** 作系统。 20版本或以上的Berkeley DB由Sleepycat Software公司开发,并使用基于自由软件许可协议/私有许可协议的双重授权方式提供[1],附有源代码。开发者如果想把Berkeley DB嵌入在私有软件内需要得到Sleepycat公司的许可,若将软件同样遵循GPL发布,则不需许可即可使用。而20版本以下的则使用BSD授权,可自由作商业用途。 Berkeley DB最初开发的目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的 ndbm,GNU项目的gdbm),Berkeley DB的第一个发行版在1991年出现,当时还包含了B+树数据访问算法。在1992年,BSD UNIX第44发行版中包含了Berkeley DB185版。基本上认为这是Berkeley DB的第一个正式版。在1996年中期,Sleepycat软件公司成立,提供对Berkeley DB的商业支持。在这以后,Berkeley DB得到了广泛的应用,成为一款独树一帜的嵌入式数据库系统。2006年Sleepycat公司被Oracle 公司收购,Berkeley DB成为Oracle数据库家族的一员,Sleepycat原有开发者继续在Oracle开发Berkeley DB,Oracle继续原来的授权方式并且加大了对Berkeley DB的开发力度,继续提升了Berkeley DB在软件行业的声誉。Berkeley DB的当前最新发行版本是4725。 值得注意的是DB是嵌入式数据库系统,而不是常见的关系/对象型数据库,对SQL语言不支持,也不提供数据库常见的高级功能,如存储过程,触发器等。 Berkeley DB的体系结构Berkeley DB以拥有比Microsoft SQL Server和Oracle等数据库系统而言更简单的体系结构而著称。例如,它不支持网络访问—程序通过进程内的API访问数据库。 他不支持SQL或者其他的数据库查询语言,不支持表结构和数据列。 访问数据库的程序自主决定数据如何储存在记录里,Berkeley DB不对记录里的数据进行任何包装,每个记录有且只有两部分:键、值,所以在Berkeley DB的背景下通常用key/data pair指代一个记录。记录和它的键都可以达到4G字节的长度。 尽管架构很简单,Berkeley DB却支持很多高级的数据库特性,比如ACID 数据库事务处理,细粒度锁,XA接口,热备份以及同步复制。 Berkeley DB包含有与某些经典Unix数据库编程库兼容的接口,包括:dbm,ndbm和hsearch。Berkeley DB的核心数据结构数据库环境句柄DB_ENV: 每个DB_ENV相当于一个数据库,它包含了数据库全局信息,比如缓冲区大小、以及对事务、日志、锁等子系统的全局配置信息。数据库句柄结构DB:每个DB相当于关系数据库的一个表,其中存储了很多key/data pair。DB句柄代表了一个包含了若干描述数据库表属性的参数,如数据库访问方法类型、逻辑页面大小、数据库名称等;同时,DB结构中包含了大量的数据库处理函数指针,大多数形式为 (dosomething)(DB , arg1, arg2, …)。其中最重要的有open,close,put,get等函数。 数据库记录结构DBT:DB中的记录由关键字和数据构成,关键字和数据都用结构DBT表示。实际上完全可以把关键字看成特殊的数据。结构中最重要的两个字段是 void data和u_int32_t size,分别对应数据本身和数据的长度。 数据库游标结构DBC:游标(cursor)是数据库应用中常见概念,其本质上就是一个关于特定记录的遍历器。注意到DB支持多重记录(duplicate records),即多条记录有相同关键字,在对多重记录的处理中,使用游标是最容易的方式。 数据库环境句柄结构DB_ENV:环境在DB中属于高级特性,本质上看,环境是多个数据库的包装器。当一个或多个数据库在环境中打开后,环境可以为这些数据库提供多种子系统服务,例如多线/进程处理支持、事务处理支持、高性能支持、日志恢复支持等。 DB中核心数据结构在使用前都要初始化,随后可以调用结构中的函数(指针)完成各种 *** 作,最后必须关闭数据结构。从设计思想的层面上看,这种设计方法是利用面向过程语言实现面对对象编程的一个典范。 Berkeley DB数据访问算法在数据库领域中,数据访问算法对应了数据在硬盘上的存储格式和 *** 作方法。在编写应用程序时,选择合适的算法可能会在运算速度上提高1个甚至多个数量级。大多数数据库都选用B+树算法,DB也不例外,同时还支持HASH算法、Recno算法和Queue算法。接下来,我们将讨论这些算法的特点以及如何根据需要存储数据的特点进行选择。 B+树算法B+树是一个平衡树,关键字有序存储,并且其结构能随数据的插入和删除进行动态调整。为了代码的简单,DB没有实现对关键字的前缀码压缩。B+树支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构HASH算法DB中实际使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整。关键字可以为任意的数据结构。 要求每一个记录都有一个逻辑纪录号,逻辑纪录号由算法本身生成。实际上,这和关系型数据库中逻辑主键通常定义为int AUTO型是同一个概念。Recho建立在B+树算法之上,提供了一个存储有序数据的接口。记录的长度可以为定长或不定长。 和Recno方式接近, 只不过记录的长度为定长。数据以定长记录方式存储在队列中,插入 *** 作把记录插入到队列的尾部,相比之下插入速度是最快的。 对算法的选择首先要看关键字的类型,如果为复杂类型,则只能选择B+树或HASH算法,如果关键字为逻辑记录号,则应该选择Recno或Queue算法。当工作集关键字有序时,B+树算法比较合适;如果工作集比较大且基本上关键字为随机分布时,选择HASH算法。Queue算法只能存储定长的记录,在高的并发处理情况下,Queue算法效率较高;如果是其它情况,则选择Recno算法,Recno算法把数据存储为平面文件格式。Berkeley DB的资源链接:官方主页: >
数据库的基本概念和应用领域简单地说,可以把数据库定义为数据的集合,或者说数据库就是为了实现一定的目的而按某种规则组织起来的数据的集合
数据库管理系统就是管理数据库的系统,即对数据库执行一定的管理 *** 作
目前使用的数据库一般都是关系数据库管理系统(RDBMS)
它可以从下面3个方面来定义
●关系(R):它表示一种特殊种类的数据库管理系统,即通过寻找相互之间的共同元素使存放在一个表中的信息关联到存放在另一个表中的信息
●管理系统(MS):是允许通过插入、检索、修改或删除记录来使用数据的软件
●数据库:数据库管理系统由一个互相关联的数据集合和一组用以访问这些数据的程序组成,这个数据集合通常被称为数据库(DataBase)
数据库是存储信息的仓库,以一种简单、规则的方式进行组织
它具有以下4个特点:●数据库中的数据集组织为表
●每个表由行和列组成
●表中每行为一个记录
●记录可包含几段信息,表中每一列对应这些信息中的一段
数据库的应用领域非常广泛,不管是家庭、公司或大型企业,还是政府部门,都需要使用数据库来存储数据信息
传统数据库中的很大一部分用于商务领域,如证券行业、银行、销售部门、医院、公司或企业单位,以及国家政府部门、国防军工领域、科技发展领域等
随着信息时代的发展,数据库也相应产生了一些新的应用领域
主要表现在下面6个方面
1.多媒体数据库这类数据库主要存储与多媒体相关的数据,如声音、图像和视频等数据
多媒体数据最大的特点是数据连续,而且数据量比较大,存储需要的空间较大
2.移动数据库该类数据库是在移动计算机系统上发展起来的,如笔记本电脑、掌上计算机等
该数据库最大的特点是通过无线数字通信网络传输的
移动数据库可以随时随地地获取和访问数据,为一些商务应用和一些紧急情况带来了很大的便利
3.空间数据库这类数据库目前发展比较迅速
它主要包括地理信息数据库(又称为地理信息系统,即GIS)和计算机辅助设计(CAD)数据库
其中地理信息数据库一般存储与地图相关的信息数据;计算机辅助设计数据库一般存储设计信息的空间数据库,如机械、集成电路以及电子设备设计图等
4.信息检索系统信息检索就是根据用户输入的信息,从数据库中查找相关的文档或信息,并把查找的信息反馈给用户
信息检索领域和数据库是同步发展的,它是一种典型的联机文档管理系统或者联机图书目录
5.分布式信息检索这类数据库是随着Internet的发展而产生的数据库
它一般用于因特网及远距离计算机网络系统中
特别是随着电子商务的发展,这类数据库发展更加迅猛
许多网络用户(如个人、公司或企业等)在自己的计算机中存储信息,同时希望通过网络使用发送电子邮件、文件传输、远程登录方式和别人共享这些信息
分布式信息检索满足了这一要求
6.专家决策系统专家决策系统也是数据库应用的一部分
由于越来越多的数据可以联机获取,特别是企业通过这些数据可以对企业的发展作出更好的决策,以使企业更好地运行
由于人工智能的发展,使得专家决策系统的应用更加广泛
以上就是关于DELPHI基础教程:简单数据库应用的创建及MASTAPP介绍(三)[1]全部的内容,包括:DELPHI基础教程:简单数据库应用的创建及MASTAPP介绍(三)[1]、怎么修改db数据库文件、数据库的应用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)