首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

2.5  使用TSQLMonitor控件

当开发人员开发应用程序时,经常会需要进行调试的工作。除了调试应用程序的程序代码错误之外,也会想要观察应用程序对于后端的数据源使用了什么SQL语句来处理或是变更数据,以便了解应用程序是否使用了正确的SQL语句。当然,在许多的情形中,能够观察应用程序对于后端的数据源使用的SQL语句也可以进行效率调整的工作,这对开发人员的帮助也非常大。

dbExpress吸引人的地方是它提供了一个控件TSQLMonitor,这个控件可以让开发人员追踪前端应用程序对于后端数据源使用的SQL语句。借助TSQLMonitor控件,开发人员不但可以调试,也可以利用它了解dbExpress是如何和后端数据源互动的,以便了解dbExpress和后端数据源的执行行为。

使用TSQLMonitor控件非常地简单,只需要连接它到TSQLConnection,并且在它的事件处理函数中撰写程序代码便可以抽取dbExpress控件和后端数据源之间互相传递的信息。现在就让我们来说明如何使用它。

步骤加入TSQLMonitor控件

首先打开2.1节建立的范例应用程序,打开数据模块,在数据模块中加入一个TSQLMonitor控件,如图2-48所示。

2-48  范例应用程序的数据模块

接着设定TSQLMonitorSQLConnection属性值为数据模块中的scnnDemo控件,再设定它的Active属性值为True以启动追踪SQL的功能。

步骤修改主窗体

回到范例应用程序的主窗体,在TPageControl中加入一个新的页签,并在其中放入一个TMemo控件,设定它的Name属性值为slmDemo,如图2-49所示。

2-49  在范例应用程序中加入一个新的页签和TMemo控件

这个TMemo控件将会显示所有由TSQLMonitor控件追踪的信息。

步骤实现追踪程序代码

TSQLMonitor控件有两个事件可以用来追踪dbExpress的信息,分别是OnTraceOnLogTraceOnTrace事件发生在dbExpress和后端数据源间有任何互动信息之时,而OnLogTrace则会发生在互动信息已经登记到TSQLMonitorTraceList属性后。要追踪dbExpress和后端数据源之间的信息,开发人员可以根据需要来决定使用哪一个事件。OnTrace以及OnLogTrace事件的原型函数如下:

type TTraceEvent = procedure(Sender: TObject; CBInfo: pSQLTRACEDesc; var
   LogTrace: Boolean) of object;

property OnTrace: TTraceEvent;

type TTraceLogEvent = procedure (Sender: TObject; CBInfo: pSQLTRACEDesc) of object;

property OnLogTrace: TTraceLogEvent;

OnTrace以及OnLogTrace事件处理函数中,开发人员可以借助存取pSQLTRACEDesc数据结构中的pszTrace来取得dbExpress和后端数据源的命令。

了解了TSQLMonitor这两个事件之后,本节的范例应用程序便可以使用OnTrace事件来记录dbExpress的命令。请点击数据模块中的TSQLMonitor控件,再使用对象查看器撰写它的OnTrace事件处理函数,如下:

procedure TdmDemo1.slmDemoTrace(Sender: TObject; CBInfo: pSQLTRACEDesc30;

  var LogTrace: Boolean);

begin

  frmMain.mmTrace.Lines.Add(CBInfo.pszTrace);

end;

OnTrace事件中,我们把dbExpress和后端数据库之间的命令显示在主窗体的TMemo中。

步骤执行范例应用程序

现在可以编译并且执行范例应用程序了,图2-50是范例应用程序一开始执行时的画面。从画面中可以看到dbExpress下达的命令都显示在主窗体的TMemo控件中。

2-50  执行范例应用程序时,SQL命令会显示在主窗体的TMemo

现在先让我们清除主窗体TMemo控件中的信息,因为我们要开始观察dbExpress如何处理数据变更的工作。首先让我们随便变更1笔记录并且Post变更的数据,图2-51显示了当范例应用程序Post变更的数据时,TSQLMonitor控件并没有追踪到dbExpress和后端数据源之间有任何的命令,这代表变更的数据在使用Post方法更新时,dbExpress只是更新暂时储存在内存之中的数据,也就是TSimpleDataSet控件的DataDelta属性值,并不会真正把变更的数据更新回数据源中。

2-51  变更范例应用程序的数据,并且观察dbExpress的执行行为

如果我们继续点击主窗体中的【ApplyUpdates】按钮,那么范例应用程序便会在主窗体的TMemo控件中显示由dbExpress控件向后端数据源下达的命令,这些信息完全由TSQLMonitor追踪到,如图2-52所示。

借助TSQLMonitor控件可以向我们证明前面章节讨论的DataSnap技术的执行行为,也可以观察到dbExpress是如何使用SQL语句的,以及dbExpress使用的SQL语句是不是有效率。TSQLMonitor控件在使用上非常地方便,实用性也非常广,连Borland的工程师也是使用TSQLMonitor来观察和调整dbExpress以及dbExpress引擎的执行行为呢。

本节的范例说明了如何使用TSQLMonitor控件,在稍后讨论执行效率的章节中会说明如何借助TSQLMonitor控件来观察dbExpress应用程序的执行行为以及调整执行效率。

2-52  ApplyUpdates范例应用程序的数据,并且观察dbExpress的执行行为

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论