2024年6月11日发(作者:)

・情报技术・

                        

JournalofInformationNo.7,2003

浅谈网络数据库系统的设计和开发

刘 雷  朱志清

(

河北经贸大学 石家庄 

050061

)

摘 要 探讨了网络数据库的设计模式、客户端程序设计和服务器程序的优化

,

以及网络应用中避免并发的各种解决

方法的优缺点。

关键词 网络数据库 程序设计 设计模式

  用

XBase

开发的程序在系统老化之后

,

不应盲目推翻重

,

而是要利用新技术把原有资源转化

,

以适应现在的需求。

XBase

型数据库比较适合转化成网络数据库。做网络数据库要

不提倡直接建立数据库、表格

,

输入数据。我们采取的方法是

利用已有

DBF

数据库

,

Delphi

DatabaseDesktop

DBF

换成

SQLServer

中的表格

,

这样

XBase

开发的程序的资源就不

会浪费了。对新表

,

FoxBase

建表格

,

输入数据后再转换。具

体方法是

:

先用

ODBC

建立与

SQLServer

连接的数据源

,

DatabaseDesktop

的菜单项

TOOLS->UTILITIES->COPY

有前台的应用程序和后台的网络数据库。前台程序的开发平

台可以用

Delphi

VisualFoxPro

PowerBuilder,

后台的网络数

据库可以是

Novell

Sybase

WindowsNT

SQLServer

UNIX

Informix,

以及

DB/2forNT

等等。

Client/Server

模式的突出优点是数据集中化

,

跨系统信息

的功能。其实这个工具可以进行异种数据库转换

,

在本身具有

ODBC

驱动程序或

Delphi

SQLLINK

支持的数据库之间任意

共享

,

便于数据管理和维护

,

但对客户端维护困难的问题我们

在后面提出一个解决方法。客户端与主服务器通过网络以

TCP/IP

协议连接。客户端可以并发的存取主服务器上的数

进行转换。

 

1

1

3

 前台程序的基本编程 

Delphi

与后台数据库的连接可

有两种途径

:

一是

ODBC,

这是标准

,

兼容性很好

;

二是

Delphi

SQLLink,

它由

Delphi

自己开发

,

速度稍快

,

但我们在应用中

发现

SQLLink

对有些数据库系统的支持并不是很稳定

,

如连

Informix

,

退出时就很容易死机

,

所以常以

ODBC

连接数据

,

系统管理员可以在主服务器上监视客户的上线情况及数据

库的使用情况

,

做到实时监控。

Delphi

Borland

(

已经更名

In

2

prise

)

的产品

,

控件多

,

比较适合数据库开发。下面用

Delphi3.0

C/SforWin95

做前台应用程序

,

后台采用

WindowsNT

SQL

SERVER6.5

(

以下简称

SQL

服务器

)

做服务器来说明一个程序

库。在控制面板的

ODBC

中需要设置数据源名称、服务器名称

(

如果不设置登录的数据库名称

,

就将登录到后台数据库给你

的开发过程及注意事项。

1

 基本编程原理和步骤

这个用户的默认数据库

)

Delphi

是快速开发工具

(

RAD

)

中最容易上手的

,

编程一般

经过三个步骤

:

注册

ODBC

数据源

;

配置

BDE;

FROM

上放

Query/Table

DataSource

DBgrid

控件

,

分别设置控件属性以

实现与数据库的连接操作。

Delphi

涉及数据库编程的控件有两类

:

数据显示控件用来

 

1

1

1

 开发环境 我们在开发

Client/Server

应用程序时需要

两台机器

(

服务器

,

一个客户机

)

,

Delphi

可以做到单机开发。

Delphi

的可伸缩性很强

,

把应用程序由单层过渡到两层

,

只要简

单地把连接的数据集由本机的数据库重新指向

SQL

服务器即

可。像

PowerBuild

一样

,Delphi

也有本地库

,

这就是

InterBase

Server,

它提供了一个单用户多实例的

SQL

服务器平台

,

可以做

显示数据库内的数据

,DBGrid

用于全屏显示和编辑数据库表中

的记录

;

数据连接控件负责掌管数据库的连接。

Database

控件是为开发两层数据库应用程序时

,

设置登录

测试平台。我们在将数据库应用程序转移到对

Sybase

等远程

数据库的访问之前

,

可以在

LocalInterBaseServer

平台建立和测

试数据库应用程序

,

这样可暂时不考虑网络连接

,

专心致力于

解决业务逻辑。当业务逻辑实现后

,

只要把

Database

控件中的

Aliasname

改成新的数据源即可将程序扩大到网络环境

,

大大提

数据库的有关参数

;Query

控件是用来传递

SQL

语句到服务器

上得到一个数据集或执行一个动作

;Datasource

控件是连接数

据显示控件和数据连接控件的桥梁。

Query

控件执行静态

SQL

语句的写法是

:

;

  

(

  

,

  

)

;*FROMdatabasename

高了开发软件的效率

,

并且降低了开发难度。

 

1

1

2

 后台建立数据库并创建连接 数据库建立包括安装系

统、建库建表、对数据库写触发子和存储过程。

安装时要注意把

SQLServer

的客户数留到

50

以上

,

否则

服务器会在用户多了以后死锁。

SQLServer

是图形化的管理

,

库表的建立非常容易。我们

值得一提的是

Delphi

中还有种动态

SQL,

可以嵌入变量参

,

给编程带来极大方便。

;

  

(

  

)

;ksWHEREpylike:py

60

情报杂志

2003

年第

7

                   

 

・情报技术・

+

%

Try

L;

DoSQL:=1;

Except

(

改状态时发生共享冲突

,

要重试吗’

IFMessageDlg

,

mtConfirmation,[mbYes,mbNo],0

)

=mrNoThenExit;

end;

end;

(

py

)

.AsString:=yName

  

;

  

Query

控件的执行方法有两种

:Open,ExecSQL

Open

方式

可以打开所联系的数据表格

,

得到一个数据集

;ExecSQL

方式

则只是运行

SQL

语句

,

并不将运行后的表格送往相连的数据显

示控件

,

所以执行像

UpdatedatanameSet

,Delete

FROM

…的

动作

,

就要用

ExecSQL

当应用程序第一次访问

SQL

数据库

,

会触发一个自动连接

过程。连接过程需要确认访问数据库的权限。如果你要在程

序中接受口令

,

则必须把

Database

控件的

LoginPrompt

属性设

False

(

username=

+myusername

)

;//myusername

在实际中还有一种情况也可能引起共享冲突

,

这就是缓存

更新。应用程序往数据库中写数据

,

先放在本地的缓冲区里然

后由

BDE

提交

,

这样在多用户情况下就可能发生数据同时由缓

存向数据库提交的情况

,

引起共享冲突。所以对频繁修改的数

据要取消缓存更新。

在数据库的应用中

,

利用临时表也能减小冲突的概率。利

SQL

语句可以在服务器上建立临时表

,

临时表会在使用完后

被系统自动删掉。

例如下面语句分别把查询结果和统计结果放入临时表

:

SELECT*FROMDatabaseNameINTOtemptemptable..

SELECTcity-id,COUNT

(

*

)

lzcount,SUM

(

jour-amt

)

lzsumFROMdb-

connect

WHEREflag=

2

GROUPBYcity-idORDERBYcity-idINTOTEMP

tempdatabase

量名

(

password=

+mypassword

)

;

ted:=true;

关于日期的处理

,

如果不存在

2000

年问题

,

只要在

Form.

OnCreate

事件中加上

ShortDateFormat:=

mm/dd/dddd/yyyy

;

mm:

有前导

0

的月份

;dd:

有前导

0

的日期

;dddd:

表示这一天

是星期几

;yyyy:

四位年份。此外

,

Delphi

中的

BDEAminis

2

trator

中的

Configuration

System

Formats

中有资料介绍

,

此方

法的可行性尚未得到证实。

2

 事务处理

3

 系统优化

在客户

/

服务器应用程序中

,

事务控制用来维护数据一致

性。

Delphi

中提供了事务的隐式和显式方法。隐式控制对写入

数据库的数据的每一行都要进行事务控制

,

导致网络繁忙和程

序性能下降

;

用显式控制能自定义开始、提交和终止事务的过

,

因而网络开销小

,

性能高。

显式控制有两种方法

:

a.

利用

Database

控件。

Database

控件用于事务控制的属性

 

3

1

1

 服务器端 要尽可能把客户端的工作向服务器上移

植。在服务器上大量使用触发子预处理程序、完整性约束才能

做到真正意义上的瘦客户端。

Delphi

可以用

Query

控件传递

SQL

语句到服务器端

,

而且可以动态地在服务器端创建存储过

,

StoreProc

控件调用服务器上的存储过程。一些涉及大量

记录的工作任务因此可以用存储过程改写。对唯一性字段

(

份证号

,

凭证提交号

)

可以作为数据库主键

,

让重复数据不能入

,

省去客户端对数据的检测。

下面的例子是利用触发子做数据库

RS

的更新日志功能

:

FORupdate

AS

declare@oldvaluechar

(

20

)

SELECT@oldvalue=xmFROMdeleted

declare@newvaluechar

(

20

)

SELECT@newvalue=xmFROMinserted

insertlogvalues//

LOG

表中写。

(

rs

数据库’‘‘用户’

,+user-name

()

,GETDATE

()

,@oldvalue,@newval

2

)

ue

‘更新’

,

//User-name

()

,GetDate

()

SQLSERVER

系统函数

TransIsolation,

方法有

StartTranstion

Commit

Rollback

。标

准写法如下

:

ransaction;

Try

;//

具体处理

(

updatedatabasenamesetgz=gz+1

)

;

L;

;

Except

ck;//

遇异常

,

回滚

End;

b.

直接利用远程

SQL

服务器的事务处理功能

,

SQL

句通过

Query

控件传递到服务器上。当程序不用本地库时

,

以使用这种方法

,

但要用在

BDE

SQLPassThroughMode

设置

NOTSHARED

。程序中我们可采用如下结构

:

(

确认改标志位

?

IFMessageDlg

,mtConfirmation,[mbYes,mbNo],0

)

=

mrYesthen

Begin

DoSQL:=0;//

用一个变量做标志

;//

改状态。

(

update

)

)

;

Set

WhileDoSQL=0do

 

3

1

2

 客户端

3

1

2

1

1

 客户端禁用

Table

控件。如对数据库的一个字段

进行求和

,Table

控件的做法是把整个数据集传到客户机上

,

后累加。而

Query

控件则是把

SQL

语句传到服务器上

,

由服务

器统计出结果。两者相比

,Query

在网络上只传回较少数据

,

Table

传输的数据较多。

3

1

2

1

2

 去除无用代码。有时程序中无用的代码占据大量

空间

,

在程序调试过程中

,

可整理代码。方法是在调试时不用

61

・情报技术・

           

对话框中选择

Cancel

即可去除无用代码。

             

JournalofInformationNo.7,2003

编译或保存

,

打开

File

菜单

,

选择

,

在保存文件

3

1

2

1

3

 减少不必要的

I/O

。要加快客户端程序的速度

,

多小的视图

,

不同的用户连接到不同的视图上

,

实现数据的真

正隔离

,

可使客户端程序在结构上进行简化

,

客户端程序运行

时连接服务器的用户表

,

从中找到与用户名对应的视图名

,

便

于管理

,

在服务器上可以强行注销用户。

应用程序在编译调试后立即推广使用

,

存在很大隐患

,

以建议将编译后的可执行文件进行压缩处理。对

WindowsPE

格式进行一次或多次的压缩

,

使可执行文件变小

,

变形。现在

常用的是

Upx,Wwpack32,Aspack

6

 程序的网上维护

要减少不必要的屏幕显示。例如

,

如果我们对流水表进行本地

密押的循环处理时

,

数据显示控件

DBgrid

会随着数据存取控件

Table

Query

中的数据指针的移动而向下翻屏

,

若表有

1000

记录

,

翻屏的时间都会比数据处理的时间多

1/3

。若处理时间

总共

10

,

翻屏的时间就有

3

秒。利用

Query

部件的

Disable

2

Controls

EnableControl

方法

,

可以用来隐藏和显示数据变化。

eControls;

Begin

//..dowork

End

Control;

;

Dephi

写的数据库程序安装到客户端时要有数据库引擎

BDE

的支持

,

否则客户端将不能连接到服务器。在分发程序时

要把数据库引擎

BDE

打包做成安装盘

,

每个客户端都要安装

一套

BDE

。这就是两层结构的不足之处

,

所以现在就有了多层

结构

:

提倡

Web

方式

(

客户端就是一个浏览器

)

或多层方式

(

两层基础上增加一个应用服务器

,

利用

DCom

OLEnterPrise

Corba,

使客户端的数据库引擎

BDE

中央化

)

。但多层结构

费用高

,

系统复杂。

两层结构的系统怎样在现有的基础上克服这个缺点

?

由于

Delphi

Session

控件的支持

,

即使

BDE

需要重新配

,

也可以在程序中用代码轻易实现。所以

BDE

在客户端只需

安装一次

,

配置的改变可由升级程序完成。每次维护升级只要

从指定服务器上下载可执行文件即可

,

而无须再次安装

BDE

我们可以仿照

NortonUtilityforWin95

的方法

,

在主程序中

做一个

LiveUpdate,

在线升级。具体方法是做一个引导程序

,

户端每次从引导程序开始执行。引导程序先判断是否有下载

的新程序

,

有则覆盖主程序

,

并做老程序的备份

,

没有则调用主

程序

,

继续执行。

这种方式也可以实现众多客户端与系统管理员的联系。

7

 

Delphi

PowerBuild

的对比

3

1

2

1

4

 编译优化。由于在编译时

,

一些运行库的代码也编

译到可执行文件中

,

所以编译出的可执行文件较大

,

一般有

500K

以上

,1-2

兆也很平常。此种文件不但占用了硬盘空间

,

而且在运行时也多占系统资源

,

更加不利于网上更新。所以一

般在编译时选择程序包

(

PACKAGE

)

方式。程序包是

Delphi

用程序和编程环境所使用的特定的动态连接库。像

一样

,

在分发程序时独立交付

,

因此使编译的

可执行文件长度骤减

,

速度明显加快

,

减少了系统资源的占用。

4

 帮助系统的设计

帮助系统大致可以有三种设计方法

:

a.

做成

WinHelp

调用的

HLP

文件

(

这是通常的模式

)

b.

做成

HTML

格式。我们现在的客户平台基本上为

Win

2

dows95OSR2,

自身带有

IE

浏览器

,

可以直接调用。在

Delphi

中有

Internet

组件的支持可以直接读

HTML,

它的范例程序就

有一个浏览器的写法。

c.

做成动画结构的帮助文件。用户在点击帮助后

,

放一段

Windows

平台下给一种编程语言打分的标准是看编译

器的功能和速度

,

能否在语言中嵌入汇编

,

编译后的可执行文

件是真正的机器码还是

P-code

解释系统

,

WindowsApi

数调用支持程度如何。

PowerBuild

是数据库专用的开发平台

,

虽有

watcomC++

相关内容的实际操作过程动画。动画制作的实现有两种方式

:

一是用

3dsMax

渲染成

AVI

格式

,

Windows

自带的

Media

Player

ActiveMovie

播放

;

二是用把示范动作录制成

AVI

变为

EXE

格式

,

在程序中用

WinApi

函数

WinExec

调用。在

Office97

,

有一个附加程序叫

MicrosoftCamcorder,

它可以录

的支持

,

可以扩充功能

,

但真正写起来不是很容易。

PowerBuild

的编译结果不是真正的二进制。虽然要比

VB

那种在代码外套

上一层解释外壳的

EXE

要好

,

但不如

Delphi

Delphi

能在源程序中嵌入汇编

,

能把所有

WindowsApi

制计算机执行的操作、过程和声音

,

既可以将录制的内容保存

为影片

,

然后在

Camcorder

中播放

,

也可以将影片保存为能够独

立运行的程序

,

以便发送给其他人播放

,

而无须

Camcorder

境。

我们提倡第二种与第三种方法结合使用。

5

 安全性讨论

数当做自己的内部函数来调用

,

而调用格式上无任何变化。这

就意味着用

Delphi

可以重新构造一个

Windows95

的外壳。

Del

2

phi

最大的优点就是它门类齐全

,

数据库应用、系统程序、网络应

(

浏览器

,Email

应用

)

、工业控制

,

甚至病毒。

参考资料

1

 林 江1利用

Delphi

开发网络数据库应用1计算机世界日报

2

 周海滨1网络数据库的实现1中国计算机报

,1997;

(

679

)

(

责编

:

钧加勃

)

一个网络数据库会有很多用户使用

,

每类用户要限定对数

据库信息的访问权限。譬如我们的系统有三类用户

:

人事科

,

行长

,

一般用户。人事科的权限最大

,

可对数据库进行读写操

;

行长只能读所有的数据

;

一般用户只能访问到一些基本的

信息。这类问题我们可以用视图来解决

,

把大数据库派生出很

62