|
3. 安装的软件项目 当你安装InterBase SQL Link驱动程序,下列项目将被安装于你的工作站上。 表18.7 安装的文件名 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 项目 描述 ────────────────────────────────────── SQLD-IB.DLL 包含InterBase驱动程序和支持文件的动态链接库 SQLINT32.DLL INTRBASE驱动类型 加在配置工具的驱动管理程序中以配置基本的Borland InterBase SQL Link驱动程序 INTRBASE别名类型 加入配置文件的别名以使建立联接SQL服务器数据库的 别名 SQLD_IB.HLP 配置InterBase驱动程序的帮助文件 READLINK.TXT Borland SQL Links for Windows自述文件 INTERBAS.MSG InterBase消息文件,通常安装上C:\INTERBAS CONNECT.EXE 测试工作站和InterBase服务器连接情况的工具 REMOTE.DLL、 InterBase的支持动态链接库 GDS.DLL、GDS32.DLL 将InterBase服务器描述安装过程修改工作站的SERVICES文件以增加用于 加入SERVICES文件 InterBase 服务器访问所需的协议描述, 如:gds- db 3050/tcp ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
软件项目中还应包括TCP/IP接口软件 下表列出的文件给InterBase客户端应用提供访问Winsock 1.1的接口
表18.8 TCP/IP接口软件 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 文件名 描述 ──────────────────────────────── MVWASYNC.EXE 异步通信模块 VSL.INT TCP/1P传输初始化文件 WINSOCK.DLL Windows Socket动态链接库 MSOCKLIB.DLL 将Windows Socket调用映射到VSL驱动程序 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
如果TCP/IP产品不是Winsock1.1兼容,InterBase客户端应用将也可采用其它TCP/1P 驱动程序。InterBase服务器还可支持其它通信协议,如SPX/1PX,NetBeIU等。 4. 解决一般的联接问题 如果用SQL Links建立与InterBase服务器的连接有问题可采用下列步骤来分离问题原因: ⑴通过Windows ISQL工具测试能否与InterBase服务器联接 如果成功,状态信息会出现,并继续步骤⑵。 如果不成功,询问数据库管理员。 ⑵检验InterBase SQL Links 驱动程序是否正确安装。 ⑶重新安装SQL Links。 ⑷检查SERVICES,文件中应有行:
gds_db 3050/tcp
如果不能正确安装,就请询问数据库管理员,否则继续步骤⑸。 ⑸测试底层协议 ①输入TELNET命令,确认TCP库是否正确安装。 如果TCP库正确安装,注册提示符会出现。注册入网检查数据库是否存在。 如果消息是“can't resolve hostname”出现,检查工作站的HOSTS文件是否有你的主机名和IP地址的人口。如:
128.127.50.12 mis_server
如果用TELNET是成功的,但仍然无法正确联接,则没有正确安装InterBase。请寻 求数据库管理员的帮助。 ② PING到服务器服务器上,测试InterBase服务器是否正常运行并且为桌面应用可见 (如果PING是成功的,消息“servername is alive”被显示)。 PING成功但TELNET不成功,则inet daemon可能有问题。 如果PING到服务器上不成功,则有网络路径问题,将问题报给网络管理员。
如果底层协议不正常,请询问数据库管理员,否则继续帮助⑹。 ⑹确认是否有InterBase服务器的访问权,如果有请继续步骤⑺。 ⑺检查BDE应用程序的InterBase别名是否正确安装。 如果能够直接从工作站上联接,但不能从BDE应用程序中,那么很有可能你的 IDAPI32.CFG别名设置有问题。运行BDE配置工具检查InterBase别名。
18.3 Delphi Client/Server编程
本节介绍如何运用Delphi可视化开发工具和ObjectPascal语言开发Client\Server的数据库应用程序,采用的例子是CSDEMOS。这是Delphi2.0自带的演示Client\Server开发的例子,它安装在C:\Program Files\Borland\Delphi 2.0\Demos\DB\CSDemos中(缺省安装)。 本节将包含以下内容: ●使用TDatabase部件连接SQL服务器 ●用DataSet部件(又称数据集部件),如TTable和TQuery,联接TDatabase部件并访问数据库以及各种表之间如何切换 ●使用数据库连接 ●触发器的使用方法 ● TStoredProc部件的使用方法 ●客户和服务器之间的事务控制 ● TStoredProc部件的使用方法
18.3.1 使用TDatabase部件联接SQL服务器
18.3.1.1 TDatabase部件概述
TDatabase部件处理应用程序与单个数据库的联接。如果不需要控制数据库联接,可以不用创建TDatabase部件。当应用程序试图打开数据库表(Table)时,会自动创建一个临时的TDatabase部件。但如果你想控制数据库的持续联接、进入数据库服务器的注册和数据库别名的值或事务控制,那么你就必须为每个所需的联接创建一个TDatabase部件。 1. 创建TDatabase部件 TDatabase 部件在Component Palette中的Data Access页上,你能将其拖放在数据模块(Data module)或窗体中。在设计时创建TDatabase 部件,用户可以设置初始值和编写OnLogin事件处理过程(Event Handle)。OnLogin事件给用户提供了第一次注册数据库服务器时定制服务器安全参数,如口令,的能力。 2. TDatabase的关键属性 ⑴ DatabaseName属性 DatabaseName是所要联接的数据库名,并且用于DataSet软件,它将出现在DataSet部件的DatabaseName属性的下拉式列表框中。设置DataBaseName属性是定义数据库应用的特定别名。DataSet部件能引用该名字以取代直接使用BDE别名。当TDatabase部件的Connected属性为True时不能修改该属性。 ⑵ AliaName属性 AliasName是BDE配置工具定义的BDE别名的名字。TDatabase 从中获取其缺省的设置。如果设置DriveName属性,则该属性将被清除,如果当Connected为True 时强行设置DriveName属性将引发异常。 ⑶ DriveName属性 DriveName是BDE驱动程序,如STANDARD 、Oracle、Sybase、INFORMIX或INTERBASE的名字。如果设置AliasName,则该属性值将被清除。 ⑷ Params属性 Params属性包含了打开SQL服务器上数据库时所需的参数。在缺省情况下,这些参数由BDE配置工具设置;用户也可以用数据库参数编辑器(Database Parameters Editor)修改这些参数。对于数据库服务器而言,Params将描述一系列的参数,如服务器名、数据库名、用户名和口令。 ⑸ Connected属性 Connected属性指明是否建立数据库的联接,当应用程序打开数据库中的一个表时Connected将被置为True;反之,关闭数据库表,Connected将被置为False,除非KeepConnection为True。而将Connected置为True则可不需打开数据库表即可建立数据库联接。TDatabase的KeepConnection属性描述当数据库中没有表打开时是否维持数据库联连。 ⑹ KeepConnection属性 KeepConnection属性描述当数据库中没有打开表时是否要保持与服务器的联连,如果数据库应用需要打开和关闭单个数据库中的多个表时,将KeepConnection 设置为True是很有用的,那样,即使没有打开任何表,应用仍能保持与数据库的联接,它能够重复地打开和关闭数据库表,而不需要重复执行联接过程。如果KeepConnection置为False,当每次将Connected置为True,数据库都必须执行注册过程。 ⑺ LoginPrompt属性 LoginPrompt属性用于控制如何处理SQL数据库的安全性问题。如置为True,当应用程序试图建立数据库联接时屏幕上将出现标准Delphi注册对话框。用户必须输入正确的用户名和口令。如果置为False,则应用程序将寻找TDatabase部件的Params 属性中的注册参数。下面是USERNAME和PASSWORD参数的例子:
USERNAME = SYSDBA PASSWORD = masterkey
⑻ TransIsolation属性 TransIsolation属性描述SQL服务器所有的事务控制独立级别。 tiDirtyRead使所有修改都被返回,而不管记录是否已被提交。tiReadCommitted将只返回提交的记录,而提交的修改将不会在结果中反映出来。tiRepeatableRead 将只返回事务过程中最初的记录,即使另一个应用程序将所作的修改提交。 各种数据库服务器可能不同程度地支持这些独立级别,或者根本不支持。如果需要的独立级别不被服务器支持,那么Dephi将使用下一个更高的独立级别,如下表所示:
表18.10 各类服务器TransIsolation设置 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 独立级别 Oracle Sybase和 InterBase Microsoft SQL ────────────────────────────────────── Dirty Read Read Committed Read Committed Read Committed Read Committed Read Committed Read Committed Read Committed Repeatable read Repeatable read Not Supported Repeatable Read ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
各个独立级别的含义请见表18.12。
3. TDatabase的关键方法 ⑴ StartTransaction方法 StartTransartion方法在由TaransIsolation属性指定的独立级别下开始事务控制。如果在一个事务已被激活的情况下调用该方法,Delphi将引发异常。 调用了该方法后,对数据库所做的修改一直由数据库服务器维持到调用Commmit方法提交数据或调用Rollback方法取消修改为止。只有当联接数据库服务器时,才能调用该方法。 ⑵ Rollback方法 Rollback方法返转当前事务控制,并且取消自最近一次调用StartTransaction以来对数据库所做的所有修改。 ⑶ Commit方法 Commit方法提交当前事务控制,并且将自最近一次调用StartTransaction以来所有数据修改存入数据库。 4. TDatabase的OnLogin事件的处理 OnLogin事件的触发条件是当联接SQL数据库的TDatabase部件被打开并且LoginPrompt属性为True。使用OnLogin事件处理过程可以在运行时设置注册参数。OnLogin 事件处理过程得到TDatabase的注册参数数组Params,并且使用Values属性改变这些参数。 例如:
LoginParams.Vaiues['SERVER NAME'] := 'MYSERVERNAME'; LoginParams.Values['USER NAME'] := 'MYUSERNAME'; LoginParams.Values[PASSWORD'] := 'MYAPSSWORD';
当控制从OnLogin事件处理过程中返回时,应用程序用这些参数来建立联接。 OnLogin事件处理过程的声明是这样的:
TLoginEvent = procedure(Database: TDatabase; LoginParam: TStrings) of Object; property OnLogin: TLoginEvent;
TLoginEvent类型是处理OnLogin事件的方法头。Database参数是要联接的数据库。LoginParams是TStrings类型的对象,包含用户名和口令,以及打开数据库时所用的其它参数。用户名是形如USER NAME = John.Doe的字符串,口令是形如PASSWORD = is_Password的字符串。当OnLogin事件处理过程被调用时应当在LoginParams中加入用户名和口令。
18.3.1.2 定制数据库服务器的注册参数
大多数数据库服务器都包含限制数据库访问的安全特征。通常,在用户能访问数据库之前,服务器都要求注册的用户名和口令。 如果服务器需要注册,在设计阶段,Delphi 会在你试图联接时提示你,诸如在会TTable部件描述数据库表名时。 在缺省情况下,Delphi应用在打开数据库服务器的联接时,显示标准注册对话框。如果联接已建立,则注册对话框不会出现。 可以用下列方法处理服务器注册: 1. 将TDatabase部件的LoginPrompt属性置为True。这样,当应用程序试图建立数据库联接时,标准注册对话框会打开。 2. 将LoginPrompt属性置为False,在TDatabase部件的Params属性中包含用户名和口令参数。例如:
USERNAME = SYSDBA PASSWORD = mosterkey
但不推荐使用该方法,因为这会危害数据库安全 3. 使用TDatabase部件的OnLogin事件设置注册参数。OnLogin事件得到TDatabase 注册参数数组的拷贝,并利用Values属性改变这些参数。如:
LoginParams.Values['SERVER NAME'] := 'MYSERVERNAME'; LoginParams.Values['USER NAME'] := 'MYUERNAME'; LoginParams.Values['PASSWORD'] := 'MYPASSWORD';
当控制从数据库注册事件处理过程中返回时,这些参数被用来建立联接。
18.3.1.3 建立应用程序特定的别名
TDatabase的Aliases描述了数据库表的位置和数据库服务器的联接参数。通常都是在Delphi之外,运用BDE配置工具(BDECFG32.EXE)创建别名,并且别名被存在BDE 配置文件IDAPI32.CFG中。 用户也可以用TDatabase创建只在应用程序中可用的别名,用TDatabase 创建的别名不会加进BDE配置文件中。任何DataSet部件可通过描述DatabaseName 属性来使用这些别名。为了定制这些局部别名的参数,用鼠标左键双击TDatabase部件或从TDatabase部件中选择Database Editor,Delphi就会打开数据库属性编辑器(Database Properties Editor)。 |
