📄 046.htm
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>—DELPHI基础教程—第十八章 Delphi客户服务器应用开发(四)</TITLE><META NAME="keywords" CONTENT=" DELPHI基础教程 第十八章 Delphi客户服务器应用开发(四)"><META NAME="description" CONTENT=" - DELPHI基础教程 - 第十八章 Delphi客户服务器应用开发(四)"><style><!--#page {position:absolute; z-index:0; left:0px; top:0px}.tt3 {font: 9pt/12pt "宋体"}.tt2 {font: 12pt/15pt "宋体"}a {text-decoration:none}a:hover {color: blue;text-decoration:underline}--></style></HEAD><body text="#000000" bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3"><TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0><TR><TD CLASS="tt3" VALIGN="top" width="8%" ><strong><A HREF="047.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR><A HREF="045.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR></strong></TD><TD class="tt2" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="隶书">第十八章 Delphi客户服务器应用开发(四)</FONT></B></center><hr width="94%"><font face="Arial"><p>18.3.4.1 </font><font face="宋体" lang="ZH-CN">适化概述 </p></font><font face="Arial"><p></font><font face="宋体" lang="ZH-CN"> </font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">所谓适化就是将桌面应用转化为</font><fontface="Arial">Client/Server</font><font face="宋体" lang="ZH-CN">应用。</p><p> 适化是一个很复杂的主题,这里不详细讲述。本节将介绍适化</font><fontface="Arial">Delphi </font><font face="宋体" lang="ZH-CN">应用程序中最重要的方面。</p><p> 适化的主要方面有:</p><p> ●</font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">将数据库从桌面平台到服务器的适化</p><p> </font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">●</font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">将应用程序转化为</font><fontface="Arial">Client/Server</font><font face="宋体" lang="ZH-CN">的适化</p><p> </p><p> 适化还需要实现从桌面环境到</font><font face="Arial">Client/Server</font><fontface="宋体" lang="ZH-CN">环境的转化。</p><p> 桌面数据库和</font><font face="Arial">SQL</font><font face="宋体"lang="ZH-CN">服务器数据库在许多方面有不同之处。例如:</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> ●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">桌面数据库用于同一时刻单用户的访问,而服务器用于多用户访问</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> ●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">桌面数据库是面向记录的,而服务器是面向集合的</p><p> </font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">●</font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">桌面数据库将每个表存储在独立的文件中,</font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">而服务器将所有的表存储在数据库中</font><fontface="Arial">Client/Server</font><font face="宋体" lang="ZH-CN">应用必须解决更新的问题,最复杂的是联接、网络和事务控制</p><p> </font><font face="Arial"></p><p>18.3.4.2 </font><font face="宋体" lang="ZH-CN">适化数据库</p><p> </p><p> 适化数据库包含下列步骤:</p><p> ●</font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">在桌面数据库结构的基础上,定义服务器上的元数据</p><p> </font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">●</font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">将数据从桌面转化到服务器中</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> ●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">解决下列问题:</font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> </font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">●</font><font face="Arial"> </font><font face="宋体"lang="ZH-CN">数据类型差异</font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> </font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN"> ●</font><font face="Arial"> </font><font face="宋体"lang="ZH-CN">数据安全性和完整性</font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> </font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">●</font><font face="Arial"> </font><font face="宋体"lang="ZH-CN">事务控制</font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> </font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">●</font><font face="Arial"> </font><font face="宋体"lang="ZH-CN">数据访问权</font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> ●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">数据合法性</font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> ●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">锁定</p><p> </font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> </font><font face="Arial">Delphi</font><fontface="宋体" lang="ZH-CN">提供了两种方法适化一个数据库。</p><p> </font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">●</font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">使用</font><font face="Arial">DatabaseDesktop</font><font face="宋体" lang="ZH-CN">工具,选择菜单</font><fontface="Arial">Tools/Utilities/Copy to</font><font face="宋体" lang="ZH-CN">命令将数据库表从桌面方式拷贝到</font><fontface="Arial">SQL</font><font face="宋体" lang="ZH-CN">格式</font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN">●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">建立应用</font><font face="Arial">TBatchMove</font><fontface="宋体" lang="ZH-CN">部件的应用程序</p><p> </p><p> 这两种方法都可以将表结构和数据从桌面数据源转化到服务器上。依靠这些数据库,可能需要改变结果表。例如,可能想进行不同数据类型的映射。</p><p> 也可以将下列特征加入数据库:</font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN">●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">完整性约束</font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN">●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">索引</p><p> </font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">●</font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">检测约束</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN">●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">存储过程和触发器</p><p> </font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">●</font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">其它服务器特征</p><p> </p><p> 如果用</font><font face="Arial">SQL</font><font face="宋体" lang="ZH-CN">脚本和服务器数据定义工具定义元数据会更有效。然后用前面介绍的两种方法转移数据。因为如果是手工定义数据库表,</font><fontface="Arial">Database Desktop</font><font face="宋体" lang="ZH-CN">和</font><fontface="Arial">TBatchMove </font><font face="宋体" lang="ZH-CN">部件将只拷贝数据。</p><p> </font><font face="Arial"></p><p>18.3.4.3 </font><font face="宋体" lang="ZH-CN">适化应用程序</p><p> </p><p> 在理论上,设计用来访问局部数据的</font><font face="Arial">Delphi</font><fontface="宋体" lang="ZH-CN">应用程序做很少的修改就可以访问远程服务器上的数据。如果在服务器上定义适合的数据源,你就能将应用程序指向访问它,这只需简单地改变应用程序中</font><fontface="Arial">TTable</font><font face="宋体" lang="ZH-CN">或</font><font face="Arial">TQuery</font><fontface="宋体" lang="ZH-CN">部件的</font><font face="Arial">DatabaseName</font><fontface="宋体" lang="ZH-CN">属性。</p><p> 实际上,在访问局部和过程数据源之间有许多重要的不同之处。</font><fontface="Arial">Client/Server</font><font face="宋体" lang="ZH-CN">应用程序必须解决大量的在桌面应用中所没有的问题。</p><p> 任何</font><font face="Arial">Delphi</font><font face="宋体" lang="ZH-CN">应用程序都能用</font><fontface="Arial">TTable</font><font face="宋体" lang="ZH-CN">或</font><font face="Arial">TQuery</font><fontface="宋体" lang="ZH-CN">部件访问数据。桌面应用程序通常都是使用</font><fontface="Arial">TTable</font><font face="宋体" lang="ZH-CN">部件。当适化到</font><fontface="Arial">SQL</font><font face="宋体" lang="ZH-CN">服务器上时,用</font><fontface="Arial">TQuery</font><font face="宋体" lang="ZH-CN">会更有效,如果应用程序要检索大量记录,则</font><fontface="Arial">TQuery</font><font face="宋体" lang="ZH-CN">部件要略胜一筹。</p><p> 如果应用程序使用统计或数学函数,那么在服务器上通过存储过程执行这些函数会更有效。因为存储过程执行更快,使用存储过程还可以减少网络负载,特别是大量行数据的函数。</p><p> 例如,计算大量记录的标准差:</p><p> ●</font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">如果该函数在客户端执行,所有的值从服务器上检索出来并送到客户端,导致网络拥塞</p><p> ●</font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">如果该函数在服务器端执行,则应用程序只需要服务器上的答案</p><p> </p><p> </font><font face="Arial"></p><p> </p><p> </p><p> </p><p> </p><p>18.4 Delphi</font><font face="宋体" lang="ZH-CN">客户</font><font face="Arial">/</font><fontface="宋体" lang="ZH-CN">服务器应用实例分析</p><p> </p><p> 本节中采用的实例是</font><font face="Arial">Delphi2.0</font><fontface="宋体" lang="ZH-CN">数据库的例子</font><font face="Arial">CSDEMO</font><fontface="宋体" lang="ZH-CN">。</font><font face="Arial">CSDEMO</font><font face="宋体"lang="ZH-CN">是</font><font face="Arial">Delphi</font><font face="宋体" lang="ZH-CN">客户</font><fontface="Arial">/</font><font face="宋体" lang="ZH-CN">服务器编程的示例程序,它采用的数据库服务器是</font><fontface="Arial">Local InterBase Server</font><font face="宋体" lang="ZH-CN">。</font><fontface="Arial"></p><p>CSDEMO</font><font face="宋体" lang="ZH-CN">较好地示范了</font><fontface="Arial">BDE</font><font face="宋体" lang="ZH-CN">环境的配置,</font><fontface="Arial">InterBASE Server</font><font face="宋体" lang="ZH-CN">高级功能应用,</font><fontface="Arial">SQL</font><font face="宋体" lang="ZH-CN">服务器联接,触发器应用、存储过程编程和事务控制技术等,具有较高的参考价值。本节讲述下列内容:</p><p> </font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">●</font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">数据库环境介绍</p><p> ●</font><font face="Arial"> TDatabase</font><font face="宋体" lang="ZH-CN">的应用</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> ●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">不同数据库表的切换</p><p> </font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">●</font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">触发器编程</p><p> ●</font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">存储过程编程</font><fontface="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> ●</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">事务控制应用</p><p> </font><font face="Arial"></p><p>18.4.1 </font><font face="宋体" lang="ZH-CN">数据库环境介绍</p><p> </p><p> 本例中采用的数据库服务器是</font><font face="Arial">Local InterBaseServer</font><font face="宋体" lang="ZH-CN">。</font><font face="Arial">Local InterBase</font><fontface="宋体" lang="ZH-CN">是</font><font face="Arial">InterBase Server</font><fontface="宋体" lang="ZH-CN">的单用户版</font><font face="Arial">32</font><fontface="宋体" lang="ZH-CN">位、兼容</font><font face="Arial">ANSI SQL</font><fontface="宋体" lang="ZH-CN">。</font><font face="Arial">Local InterBase</font><fontface="宋体" lang="ZH-CN">支持客户</font><font face="Arial">/</font><fontface="宋体" lang="ZH-CN">服务器应用在单机上的开发和测试,并且可以很容易地适化到</font><fontface="Arial">InterBase Server</font><font face="宋体" lang="ZH-CN">上。因此,开发客户</font><fontface="Arial">/</font><font face="宋体" lang="ZH-CN">服务器应用采用</font><fontface="Arial">Local InterBase</font><font face="宋体" lang="ZH-CN">作为原型开发环境是很方便的。</p><p> </font><font face="Arial"></p><p>18.4.1.1 IBLOCAL</font><font face="宋体" lang="ZH-CN">的</font><font face="Arial">BDE</font><fontface="宋体" lang="ZH-CN">参数</p><p> </p><p> 本例中的</font><font face="Arial">SQL</font><font face="宋体" lang="ZH-CN">数据库是</font><fontface="Arial">IBLOCAL</font><font face="宋体" lang="ZH-CN">。它是由</font><fontface="Arial">BDE</font><font face="宋体" lang="ZH-CN">配置工具</font><fontface="Arial">(BDECFG32.EXE)</font><font face="宋体" lang="ZH-CN">设置参数值。它的各项参数值列于下表:</p><p> </font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN">表</font><font face="Arial">18.13 IBLOCAL</font><fontface="宋体" lang="ZH-CN">的各项参数值</p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p>参</font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">数</font><fontface="Arial"> </font><font face="宋体" lang="ZH-CN">名</font><font face="Arial"> </font><fontface="宋体" lang="ZH-CN">参</font><font face="Arial"> </font><font face="宋体"lang="ZH-CN">数</font><font face="Arial"> </font><font face="宋体" lang="ZH-CN">值</font><fontface="Arial"> </p><p></font><font face="宋体" lang="ZH-CN">────────────────────────────────────</p><p></font><font face="Arial">TYPE INTRBASE</p><p>PATH </p><p>SERVER NAME C:\INTRBASE\EXAMPLES\EMPLOYEE.GDB</p><p>USER NAME SYSDBA</p><p>OPEN MODE READ/WRITE</p><p>SCHEMA CACHE SIZE 8</p><p>LANGDRIVER</p><p>SQLQRYMODE</p><p>SQLPASSTHRU MODE SHARED AUTOCOMMIT</p><p>SCHEMA CHCHE TIME -1</p><p>MAX ROWS -1</p><p>BATCH COUNT 200</p><p>ENABLE SCHEMA CACHE FALSE</p><p>SCHEMA CACHE DIR </p><p></font><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p> </font><font face="Arial"></p><p>18.4.1.2 </font><font face="宋体" lang="ZH-CN">数据库结构介绍</p><p> </font><font face="Arial"></p><p></font><font face="宋体" lang="ZH-CN"> </font><font face="Arial">IBLOCAL</font><fontface="宋体" lang="ZH-CN">数据库的结构都是由</font><font face="Arial">InterBase</font><fontface="宋体" lang="ZH-CN">服务器工具交互式</font><font face="Arial">SQL</font><fontface="宋体" lang="ZH-CN">工具</font><font face="Arial">(ISQL)</font><fontface="宋体" lang="ZH-CN">定义的。</p><p> 用</font><font face="Arial">ISQL</font><font face="宋体" lang="ZH-CN">定义数据库,首先要用</font><font
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -