高分求教,delphi ado mysql控件发生内存泄漏

西西软件下载最安全的下载网站、值得信赖的软件下载站!
→ Delphi通过ADO读写数据库
类型:编程工具大小:83.1M语言:中文 评分:4.0
第 2 页 一、 TADOConnection组件一、&TADOConnection组件该组件用于建立数据库的连接。ADO的数据源组件和命令组件可以通过该组件运行命令及数据库中提取数据等。该组件用于建立数据库的连接,该连接可被多个数据集所共享,但是并不是应用程序中必须的,因为ADO数据集及命令组件通过设置其ConnectionString属性,可以直接连接到数据库。但是如果多个数据集使用相同的数据库连接时,则使用TADOConnection就有一定的优势,因为不必为每个数据集都单独建立数据库的连接,同时也减少了资源的消耗,并且可以建立跨越多个数据集的事务。一个事务(transaction)是数据库操作的一个阶段,用户对数据库的修改都保存在本地计算机的内存中,只有提交一个事务后,才能将修改的内容提交到数据库中。如果选择了回滚事务,则所有的修改将被取消,而不会提交到数据库中。?&TADOConnection组件提供如下功能:v&控件数据库的连接v&控制服务器的注册v&管理事务v&为关联的数据集提供数据库连接v&将SQL命令发送到数据库中v&获得数据库的原数据(metadata)&TADOConnection的常用属性1)&Attributes&&& 此属性用于设置连接的数据库的自动处理的行为,它是TxactAttributes类型的集合,包括两个集合元素:I.&XaCommitRetaining:提交一个事务后自动开始一个新的事务。II.&XaAbortRetaining: 回退一个事务的同时将开始一个新的事务。2) CommandTimeout&&& 连接超时属性,用于设置一个命令执行时所能等待的最大时间值。以秒为计量单位。缺省值为30秒,即连接命令等待了30秒之后还没有被执行,系统就放弃这个命令。3) Connected&&& 标识和数据库的连接是否处于激活状态。用户可以查询Connected属性的值来判断数据库的连接状态。如果该属性为true,则表明数据库处于连接状态;为false,则当前数据库连接关闭。4) ConnectionString&&& 连字符串用于指定数据库的连接信息。连字符串的标准调用方为:ADOConnection1.ConnectionString:='Provider=ProviderRRemote Server=ServerRet';其中,连接串支持的常用参数如下:数据库连接参数及说明&&&&&&&& 参数&说明Provider&数据提供者名称,例如MSDASQL.1Password&登录数据库的口令&&&&&&&& 参数&说明Persist Security &支持安全登录User ID&登录数据库用户&&& DataSource&数据源名称、数据源的设置需要额外的操作设置成功之后,用户就可以将属性Connected设置为True,如果没有任何提示信息,说明数据库已经成功连接,此时,属性DefaultPatabase就被赋值为连接所指定的数据库的路径。&5) ConnectOptions&&& 指定数据库连接是按照同步方式还是异步方式。类型Tconnectoption包含两个值:v&coConnectUnspecified:数据库连接采用同步方式连接。v&coAsyncConnect:异步方式连接数据库。当服务器负载很重的时候,这种连接方式很有用。引用这种连接方式,在第一次建立连接的时候,应用程序不能获得全部的数据。&6) CursorLocation&&&& 指定数据库指针是指向客户端还是服务器端。类型TcursorLocation包含两个值:v&cluseServer:使用服务器端的数据库指针,适用于数据量大的数据集。v&cluseClient:使用客户端的数据指针的时候,数据将被下载到本地计算机上,并在本地进行操作。7) DefaultDatabase&&& 表明数据源成功连接后,这是由数据源自动赋值的。8) IsoLationLevel指定不同事务之间的相互独立的级别,事务实际上是对数据库的一系列操作的集合。事务具有整体性,如果事务中的某一个步骤不能正确执行,则整个事务都不会执行。由于数据库服务器可以同时支持多个连接,来自不同连接的事务有可能在同一时刻对同一个数据进行操作,这就有可能造成数据不一致性。为防止这种情况出现,ADO引入了事务独立级来确定不同事务之间的相互关系。设定事务独立级之后并调用BeginTrans方法后,新的事务独立级别将生效。TISolationLevel共包含9种常量值:如下:TISolationLevel常量及说明常量参数&说明ilUnspecified&使用默认的独立级别,没有其它的独立级别ilChaos&来自更高独立级别的事务对数据的改变不能被当前的事务覆盖ilReadUncommitled&当前事务可以读取其他事务未提交的数据ilBrowse&当前事务可以读取其他事务未提交的数据ilcursorStability&事务提交后数据才能被读取ilReadCommitled&事务提交后数据才能被读取ilRepeatableRead&不能读取其它事务的数据,执行Requery操作可以获得这些数据ilSerializable&从其他事务中获取事务的独立级别ilIsolated&从其他事务中获取事务的独立级别&&& 这些常量的定义在Microsoft Data Access SDK中有详尽的说明,需要进一步了解可以查询微软的SDK文档。9) KeepConnection&&& 指定如果在没有打开数据集的情况下是否仍然保持数据的连接。&&& 濒繁地打开和关闭数据库的操作将会影响系统的性能,特别在网络上,会在一定程度上增加网络的负载。这个属性设置数据源始终处于连接状态,可以显著提高程序的性能。10) LoginPrompt&&& 指定在每次建立连接时是否弹出登录对话框提示用户登录。如果设为False,则必须在ConnectionString中指定登录数据库的用户和密码。11) Mode&指定连接对数据库的操作权限,这种连接模式的值如下:连接模式参数及说明参数&说明cmUnknown&未指定数据库操作权限或无法确定cmRead&对数据库只能读操作cmWrite&对数据库只能写操作cmReadWrite&对数据库可读写操作cmShareDenyRead&禁止其他用户对数据库读操作cmShareDenyWrite&禁止其他用户对数据库写操作cmShareExclusive&禁止其他用户对打开数据连接cmShareDengNone&禁止其他用户对数据库任何操作&ADOConnection的主要方法:1) BeginTrans&&& 开始启动一个新的事务,必须保证数据连接处于激活状态。2) Cancel&&& 关闭于数据库的连接。3) CommitTrans&&& 向数据库提交一个事务。提交成功后,再事务中对数据库所作的修改则写入数据库中,同时一个事务也结束。4) Execute(constCommandText:WVarRecordsAExecuteoptions:TexcuteOptions=[eoExecuteNoRecords]);执行一个CommandText类型的SQL命令,其中,CommandText是指定的SQL命令;ReardsAffected指定该命令设计的记录数目;ExecuteOptions指定命令特征如下:ExecuteOption的值及说明参数&说明eoAsyncExecute&异步执行命令eoAsyncFetch&给定了Cache属性的值后,在异步地去数据eoAsyncFetchNonBlocking&非阻塞式线程执行eoExecuteNoRecords&没有返回记录5) GetProcedureNames(List:Tstring);&&& 获取数据库服务器上的存储过程名称,获取的存储过程名称在List参数中。6) GetTableNames(List:TSystemTables:Boolean=False);&&& 获取数据库中的数据表,获取的表名存放在List参数中SystemTables参数指示是否获取数据库系统表的名称。数据库系统表是指在数据库中关于数据库数据类型定义和用户信息的数据表,这种系统表是数据库本身自动生成的。7) Open(const UserID:constPassword:widestring)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 打开一个连接,参数UserID是数据库用户的用户名。Password是用户登录数据库的密码。8) RollbackTrams&&& 撤回一个没有全部执行的事务。事务撤回之后,事务中所作的任何修改都不会写入数据库。&ADOConnection的主要事件事件&说明AfterConnect& 发生在一个连接建立之后AfterDisconnect&发生在断开连接之后BeforeConnect&发生在连接建立前BeforeDisconnect&发生在断开连接前OnBeginTranscomplete&发生在开始一个事务时OnCommitTranscomplete&发生在提交事务成功时OnConnectComplete&发生在连接完成时OnDisconnect&发生在断开时OnExecuteComplete&发生在一个命令执行后OnInfoMessage&发生在收到数据库的消息OnLogin&发生在用户登录数据库的时候OnRollbackTransComplite&发生在一个事务撤回之后OnWillConnect&发生在发出一个连接数据请求的时候OnWillExecute&发生在数据库收到一个SQL命令并将要执行之前
第2页: 一、 TADOConnection组件
07-2105-2303-1403-0412-0612-0111-1810-0809-2508-29
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载Delphi著名皮肤控件库大全-皮肤技术-盒子文章
您现在的位置: >>
Delphi著名皮肤控件库大全
时间: 9:45:42 点击:
  核心提示:皮肤这东西很多人褒贬不一,有人认为程序做的好就行了,界面还是保持原生态来的稳定。的确,稳定是程序至关重要的一点,离开这点其他任何都无从谈起,但不可否认,无论是微软、苹果,还是大众用户,审美观越来越高,试想同样的QQ软件或者酷狗软件,功能稳定性相同,你是喜欢带皮肤漂亮的还是喜欢原生态的呢?因此,程序界...皮肤这东西很多人褒贬不一,有人认为程序做的好就行了,界面还是保持原生态来的稳定。的确,稳定是程序至关重要的一点,离开这点其他任何都无从谈起,但不可否认,无论是微软、苹果,还是大众用户,审美观越来越高,试想同样的QQ软件或者酷狗软件,功能稳定性相同,你是喜欢带皮肤漂亮的还是喜欢原生态的呢?因此,程序界面美化也是一个产品非常重要的一点。
做皮肤其实是项浩大的工程,从美工设计、到贴图、到程序设计,都非常的麻烦,如果不是一个非常成熟的产品且有很大的用户群体,并且公司具有相当实力,一般都不会去自己做皮肤,毕竟涉及的东西太多,一旦出现问题,那将对软件本身带来无法预计的后果。
因此我选择使用成品皮肤库在现有的软件上,在使用前为了在效果和稳定性上达到平衡,因此对目前DELPHI市场上的皮肤控件都进行了一一测试,包括稳定性测试、内存泄漏测试、贴图效果测试、使用效率、皮肤界面五大项进行了一个横向的对比,以便给正在准备使用皮肤的朋友一些参考。
这次选择的产品都是“著名”控件包,为什么加上“著名”二字,这个是有道理的,皮肤这东西用上后直接影响到程序的运行,后续维护一定要有保障,试想你用了一个皮肤控件,没有后续的保障,遇到BUG没人修正,你又没有源代码的情况下,除了换皮肤控件外没有任何办法。因此著名的DELPHI控件的标准是,有正规公司或个人运作,保持持续更新,遇到问题反馈后能得到响应的控件包。
这次参与测试的控件包包含了:AlphaControls、BusinessSkinForm、DynamicSkinForm、VCLSkin和AppFace 五个,我也测试过网上能找到的一些其他控件,但其长期不更新因此直接淘汰。在控件包方面,国外的产品比国内的强的太多,拿一款QQ界面控件包来说(这里不直接指明),控件BUG成堆,甚至连最起码的界面重绘、刷新和内存泄漏都没做好,这样的产品尽然也拿出来卖钱,而发现没人购买后,作者以免费名义发布控件,但不包含源代码后,近一年多都没更新过一次,你发现BUG提交给他,他就让你买源代码,价格不等,这样的控件包建议大家连用都不需要用,直接PASS,以免做很多徒劳的事。
这几个控件包除了AppFace外都提供的DEMO程序,除了AppFace外都是以Delphi组件形式提供的,而AppFace是DLL方式提供。
下表上概括了几个界面控件包的特点:
使用便利性
&内存泄漏测试
贴图效果测试
AlphaControls
BusinessSkinForm
DynamicSkinForm
下面详细介绍下这几个界面包测试时候遇到的问题。
最早测试的是AlphaControls,版本是最新的7.54 LITE EDITTION,说实在的,从界面效果来说,AlphaControls无疑是这几个界面包里面最好的,也是最精致的,同样提供了超过60种皮肤,而且在不断增加,贴图效果也是最好的。测试过程发现内存有轻微泄漏,主要集中在几个控件上,这个问题不大。但窗口标题后面经常出现一些像乱码的字符,这个让人很不舒服,原本以为是7.34版本的问题,结果更新到官方最新的7.54免费版后,还是有这个问题。但这些都可以忽略,最为重大的BUG是界面最小化后,恢复时经常会导致死机,注意是死机,并不是应用程序无响应,这时候除了按硬启动外没有任何办法。我原本以为是机器的问题,更换机器换使用官方DEMO,依然发现这个严重的问题。但该问题并不是每次都会出现,基本出现率在1/20样子。但这个问题不可谓不严重,导致死机是什么概念,真是让人无语。因此AlphaControls也是第一个被淘汰,且最不舍的控件包,希望以后的新版本可以解决这个问题。(看官方更新历史记录,曾经更新过这个问题,但似乎没有彻底修正)
二、AppFace
第二个测试的是AppFace(),这是个轻量级的皮肤控件,使用来说相当简单,加载个DLL即可,可以说不用对程序进行任何调整。提供的界面包比较少,皮肤也不怎么精致。但内存泄漏控制的很好。在测试过程,先用了一个简单的小软件加载做测试,没有什么问题,然后拿出我以前写的一个类似记事本的程序,这时候发现,加载AppFace后,软件尽然启动报错,为了确认是否是软件问题,我特意拿了一款开源程序(做脚本编辑的),结果发现一样的情况发生了。无奈只好PASS。
第三个测试的是BusinessSkinForm和DynamicSkinForm,这两个控件包可以说是孪生兄弟,因为是由一家公司开发的,DynamicSkinForm比BusinessSkinForm少了数据感知控件,不做数据库程序,没什么区别,界面皮肤包也是通用的,而且多达170多种。但说实话,精致度还不够高,但已经很好了。我们发现它还提供了很多新颖的界面设计组件,可以设计出非常具有特色的界面。在测试中均使用厂家提供的标准DEMO,内存无泄漏情况,这点难能可贵,毕竟是这么大型的控件包。贴图效果也算过得去,但和AlphaControls比还是稍显逊色。虽然提供的界面皮肤包多达170多种,但精致的还是有限,因此可以选择性的找一些皮肤发布。使用效率来说,如果窗口不使用动画效果,显示速度会比较快,但界面切换有闪烁情况。如果使用动画效果,使用效率就低了很多了,给人一种漫不经心的感觉。这两个控件在测试的两天中,发现稳定性很好,没有发送死机、无响应和自动退出这些情况。
四、VCLSkin
最后测试的是老牌VCLSkin(),这套控件包使用非常方便,提供的皮肤包也多,内存泄漏控制的也不错,使用效率很高,界面虽谈不上精致,不过也还说的过去。稳定性也还不错,比起早几年使用的时候,稳定性要提高很多,但在测试过程中还是发生了两次异常报错的问题。因此看来稳定性还有提高的空间。
通过测试后,我选择了这套控件包,虽然效率不是最高,界面不是最精致,但贵在稳定。截至文章发布前,这组控件包仍然在跑测试,没发生任何意外。
作者:demonbaby 录入: 来源:原创
上一篇:没有了下一篇:没有了
共有评论 12 条相关评论
发表我的评论
盒子文章() & 2016 版权所有 All Rights Reserved.

我要回帖

更多关于 delphi ado 的文章

 

随机推荐