中国程序员联盟 正在重新改版中ing 不便之处还请见谅 改版后将内容涉及java delphi .net php
 
  首页 | 数据库开发 | 网络通讯 | 多线程 | 多媒体开发 | 图像处理 | 程序人生 | 系统函数 | 控件开发 | Web服务
 
  当前位置:笨鱼delphi技术网>数据库开发>代码分析>文章内容

delphi DBExpress 提高

来源:站内 关于:bill 发布时间:2007-06-22   [收藏] [推荐]
一、TSQLConnection
TSQLConnectionTdatabase,TADOConnection\TIBDatabase一样,继承自TcustomConnection. TcustomConnection提供了ConnectedDataSetCount DataSetsLoginPromptStreamedConnected等常用属性。
1、dbxconnections.ini和dbxdrivers.ini
在讨论TSQLConnection的之前,让我们先看看dbxconnections.inidbxdrivers.ini,它们默认存放在.\Borland Shared\dbExpress\dbxdrivers.ini中保存着各种dbExpress驱动程序信息,所需要的库信息(DLL),默认参数设定;dbxconnections.ini保存每个连接的具体设定(在dbExpress Connections对话框中看到的信息)。
2、TSQLConnection的重要属性
Connected:是否连接到数据库;
ConnectionName:连接名称,可以双击TSQLConnection控件进行设定、增减;
DataSets:当前所有连接到本SQLConnection的活动DataSet(包括TSQLDataSetTSQLTableTSQLQueryTSQLStoredProc;
DriverName:驱动程序名;
KeepConnection:保持连接状态;
TableScope:此属性决定当取得数据库中表时返回表的类型。其定义如下:
type
 TTableScope = (tsSynonym, tsSysTable, tsTable, tsView);
 TTableScopes = set of TTableScope;
property TableScope: TTableScopes;
 TTableScope = (tsSynonym, tsSysTable, tsTable, tsView);
 TTableScopes = set of TTableScope;
其中:
tsSynonym:返回重名表
tsSysTable:返回系统表
tsTable :返回普通表
tsView views:返回视图
VendorLib:返回dbExpress与数据库服务器连接所需的DLL
3、重要方法
CloseDataSets:关闭与此SQLConnection连接所有活动DataSet(包括TSQLDataSetTSQLTableTSQLQueryTSQLStoredProc;
StartTransactionCommitRollback:一组处理事务的命令,应该都很熟悉了。先执行StartTransaction,然后执行关键任务,如果执行Commit,则保存执行结果,如果执行RollBack,则取消上一次StartTransactionCommit到目前为止所有任务。给出简单实例(摘自Delphi帮助):
procedure TForm1.TransferButtonClick(Sender: TObject);
var
 Amt: Integer;
 TD: TTransactionDesc;
begin
 if not SQLConnection1.InTransaction then //如果目前不在一个事务中
 begin
    TD.TransactionID := 1;
    TD.IsolationLevel := xilREADCOMMITTED;
    SQLConnection1.StartTransaction(TD);
    try
      Amt := StrToInt(AmtEdit.Text);
      Debit.Params.ParamValues['Amount'] := Amt;
      Credit.Params.ParamValues['Amount'] := Amt;
      SQLConnection1.Commit(TD); //一切顺利则递交
    except
 
      SQLConnection1.Rollback(TD); //发生任何错误则回滚
    end;
 end;
end;
         Execute:执行一条SQL语句;
function Execute(const SQL: string; Params: TParams; ResultSet:Pointer=nil): Integer;
参数:
SQL:需要执行的SQL语句;
ParamsTparams类型,执行此SQL的参数;
     ExecuteDirect:执行不带参数的SQL语句;。
function ExecuteDirect(const SQL: string ): LongWord;
                 参数为需要执行的SQL语句,如果执行成功则返回0
       GetFieldNamesGetIndexNamesGetProcedureNamesGetProcedureParamsGetTableNames:获得有关信列、索引、存储过程、存储过程参数、表名等信息。
4、事件
TSQLConnection的事件相当简单,也相当易懂OnLoginAfterConnectAfterDisconnectBeforeConnectBeforeDisconnect
        
二、TSQLDataSet
TSQLDataSet 继承自TCustomSQLDataSet,而TCustomSQLDataSet继承自TdataSet。所以,其大多数方法、属性、事件大家都很熟悉了。
其重要属性如下:
CommandText:向数据库服务器发送的命令;
         CommandType:决定命令类型,其定义如下:
type TSQLCommandType = (ctQuery, ctTable, ctStoredProc);
property CommandType: TSQLCommandType;
ctQuery:此命令是一条需要执行的SQL语句;
ctStoredProc:命令是一个存储过程名;
ctTable:命令是数据库服务器上的表名,系统会自动生成SELECT语句返回记录。
         DesignerData:字符类型,没有任何实际意义,我们可以保存任何信息在此属性中。
         MaxBlobSize:整数型,BLOB类型数据的最大值。如果为-1,则返回所有数据。
         SQLConnection:指向TSQLConnection对象,以连接数据库服务器。
三、TSQLClientDataSet
TSQLClientDataSet是一个在使用类似于TClientDataSet而在内部使用了TSQLDataSetTSQLProvider的组件。这意味着,它可以使用dbExpress的机制来访问数据库,而又能在内存中保存让用户浏览、修改,最后递交到数据库服务器(这也牺牲部分性能)。这就在数据库访问性能和易操作性间给出了平衡。
这里,我们给出了一个实例来正式这一点(dbsqlclientdataset2)。我们使用一个TDBGrid,一个TDBNavigator,一个TSQLConnection,一个TSQLClientDataSet,一个TButton组成了一个最简单的程序。
1TSQLClientDataSet的实例
    我们可以清晰的看到,在按了Button1后执行了 SQLClientDataSet1.ApplyUpdates(-1);,数据被修改了。
    这里又给出了一个使用TClientDataSet连接dbExpress数据源的例子(dbsqlclientdataset2\),就和连接其它数据源一样,这和TSQLClientDataSet并没有联系。由于可以达到类似的效果,我们给出实例。
遗憾的是,在Borland文档中,不推荐使用TSQLClientDataSet作主要/明细结构,因为,TSQLClientDataSet无法在这样的情况下优化查询。
四、多层应用MIDAS
为什么要用dbExpressdbExpress的设计目的是什么?在传统的Client/Server程序中,为了提高这点性能,牺牲那么多程序开发中的灵活性值得吗?
我个人认为,dbExpress是为了多层应用而设计的。
在应用程序服务器上,使用单向数据集,可以把访问数据库的效率提到最高,而在客户端的开发又不受任何影响。这真实鱼与熊掌兼得之、
dbExpress开发Midas应用程序和以前几乎一样,我们给出了实例(Midas\)。
五、调试dbExpress(Debugging)
根据Delphi6帮助说明,你可以使用两种方法跟踪dbExpress的行为、第一种方法是使用TSQLConnection控件的SetTraceCallbackEvent方法。这是一个CallBack方法,以后每当SQLConnectin向数据库服务器发送命令,就会触发你的CallBack事件。由于这个方法比较复杂(其实也不复杂,可如果你不熟悉WindowsCallback概念,那它真的复杂了),我们不对其进行详细介绍。为了方便用户,Delphi提供了第二种方法——TSQLMonitor控件,它封装了SetTraceCallbackEvent方法。设定SQLMonitorSQLConnection属性为需要调试的TSQLConnection控件,设置其ActiveTrue,以后,每当通过SQLConnection向数据库服务器发送命令,其TraceList属性(TStringList)会被更新,且会触发LogTrace事件;如果你希望自动保存这些信息,可以设置TSQLMonitorFilename属性及AutoSave属性。根据一段Delphi帮助中的代码就很说明问题:
procedure TForm1.SQLMonitor1LogTrace(Sender: TObject; CBInfo: Pointer);
var
 LogFileName: string;
begin
 with Sender as TSQLMonitor do
 begin
    if TraceCount = 10 then
    begin
      LogFileName := 'c:\log' + IntToStr(Tag) + '.txt';
      Tag := Tag + 1; {ensure next log file has a different name }
      SaveToFile(LogFileName);
      TraceList.Clear; { clear list }
    end;
 end;
end;

[浏览: 次]   
上一篇:delphi DBExpress 入门   下一篇:delphi 判断系统是否有打印机连接
[收藏] [推荐] [返回顶部] [打印本页] [关闭窗口]  
    评论加载中…
google adsense热点文章
·delphi Delphi_动态数组介绍----Delphi
·delphi 检查IP地址
·delphi 复制Excel列到二维数组
·delphi Delphi_VCL消息处理机制的内幕
·delphi 产生不重复的随机数
·delphi 如何在DELPHI里调用MS office
·delphi 缓冲池
·delphi 在WORD文档里添加页签
·delphi MIDAS——多层分布式应用程序服
·delphi Asta多层应用实现
·delphi Datamodule的应用方式
·delphi DBExpress 入门
     delphi技术网 | firefox 下载 | Avant Browser下载 | dedecms 技术网 | drupal 爱好者 | php 技术网
  Copyright@www.delphichm.com,2006-2009.All Rights Reserved.
 
程序员联盟 | delphi Java .net|QQ:707102932