如何制作数据库产品的安装版(转) (0分)

  • 主题发起人 主题发起人 icic
  • 开始时间 开始时间
I

icic

Unregistered / Unconfirmed
GUEST, unregistred user!
黄春雨
齐欢华中理工大学
摘要:本文介绍了一种制作数据库软件安装版的方法。
关键词:安装版、Create Install、dsn
How To Make Database Installation Product
Abstract: This paper introduces a way to make database installation product.
Keywords: installation, Create Install、dsn
现在所使用的比较流行的制作由PB+ODBC+后台数据库开发的信息管理系统的安装版的工具
通常是PB所附带的Install Shield。由于均是由同一家公司所开发的产品,因此有相当强
的针对性,而且可以方便的配制数据库运行环境和ODBC,所以制作出来的安装版产品不仅
功能齐全而且界面也非常符合Windows程序的规范。但是,存在的一个问题就是:由于市面
上介绍Install Shield使用的资料非常的少,加之Install Shield的使用也是比较复杂的,
因此许多人在使用时可能会遇到相当的困难。而且,笔者个人认为即使有资料学习起来也是
比较麻烦的。在实际开发的过程中,笔者发现了一种较为简单的制作如PB + Sybase + ODBC
产品的安装版的方法(这种情况是最为复杂的)。
在制作中所使用的安装工具是Create Install。这是一个免费程序,可以从网址
www.Gentee.com处下载。在下面将会看到,只要所使用的安装制作工具具有最基本的一些
功能(如:拷贝文件、写INI格式的文件等)就可以了,并不一定必需是Create Install。
(就笔者所看,大多数安装版制作工具均具有这些基本功能。)这种产品安装版制作方法的
基本思想就是将一台可以运行所开发产品的电脑上的软件环境完全移植到客户的电脑上去,
这样就可以保证使用者安装后可以正确的使用产品了。下面就以Create Install为例讲述如
何制作PB + Sybase + ODBC情况下的安装版。
首先必需将所要安装的产品以及相应的数据库文件(对于Sybase的db数据库,一定不要将
log日志文件拷如,否则会出问题)拷贝到一个目录中(这个目录下的文件将全部被打包),
然后在该台微机上安装合适的软件,最好将Sybase安装在C:盘上(这样做主要是考虑到用户
硬盘上可能只有C:盘一个盘符的情况)。这样便完成了配置一台微机的基本工作。制作安装
版时将这个目录选为打包的目录(源目录)就可以了。
接着,便是对注册表的写入。这里介绍一种较为简便的写入注册表的方法。首先,在
Windows开始菜单中选择‘运行’,然后在编辑框中输入:regedit,点‘回车’即会出现
Windows注册表编辑器。然后单击键‘HKEY_LOCAL_MACHINE’前的‘+’号,展开该键后再
同样展开其下面的键‘Software’。这时便会看到有一个键的名称是‘Sybase’,接着直
接单击它;再选择‘注册表’菜单下的‘导出注册表文件’,然后输入文件名称并选择将
文件保存到开始选择的产品所在的目录下,在这里便会得到一个以‘reg’为后缀的注
图(一) 册表文件,这个文件就是安装了SQL Anywhere后所写入注册表的全部信息。最后
需要将Windows安装目录下的regedit.exe文件也一同拷贝到源目录下。再写入用户的注册表
时则只需在安装版制作工具中选择安装完成后运行‘Regedit myregfile.reg’即可。具体
在Create Install中的使用如图(一)所示:
但需要注意的是由于这里注册表的内容是完全符合所配置的电脑上的数据库环境的,因此,
还需要在安装制作工具中选择将安装的数据库文件所在的目录全部拷贝到使用者的相同盘符
下,并且目录名称不能改动(这里建议安装在c:盘下)。至此已基本上完成了数据库驱动环
境移植的问题,在客户的电脑上已经配置了可以使用的数据库了。对于其他数据库,如:
Excel等同样可以如此进行。
PB所生成的可执行文件的运行,需要一些动态链接文件(DLL)和INI文件的支持。因此,
必须将以下文件拷贝到可执行文件所在的目录下。共有以下几个文件:
pbodb60.dll、pbodb60.ini Pb ODBC 专用接口 (sql anywhere必须
装)
pbor7360.dll Pb oracle7.3 专用接口
pbsyc60.dll Pb Sybase 专用接口
Pbdwe60.dll Pbfnt60.ini
Pblab60.ini Pbrtc60.dll
Pbtra60.dll Pbvm60.dll
将这些文件拷贝到源目录下后,就可以保证可执行文件的正确运行了。但是还有一个需要
注意的问题就是ODBC的安装问题。如果客户的微机上没有正确的安装ODBC,所开发的数据
库产品同样无法通过ODBC正确的连接数据库。为了安全起见,还应该将以下这些用于配置
ODBC的文件拷贝到Windows安装目录下的System目录内:
Ds16gt.dll、Ds32gt.dll 、Odbc16gt.dll、Odbc32.dll、
Odbc32gt.dll、Odbcad32.exe、 Odbccp32.cpl、Odbccp32.dll、
Odbccr32.dll、Odbcint.dll、Odbctrac.dll;
同样可以在安装制作工具中选择拷贝这些文件,这样便避开了修改Autoexec文件中Path的
问题。但是如果了解修改Path知识的,可以将以上这些文件全部拷贝到安装目录下的一个
子目录下,然后修改Path。
真正难以解决的问题还是如何动态配置DSN的问题。PB程序通过ODBC与数据库相连接便需要
配置DSN,但是用户安装数据库的目录是不确定的,这不同于上门做项目安装时可以手动配
制,因此必须要在程序中进行自动配置。这里有两种自动配置DSN的方法。
第一种方法是将数据库文件所在的目录写入注册表的方法。在安装版生成软件具有写注册
表的功能时可以使用这种方法(很多这类软件具有这个功能)。首先在配置安装版的时候
便选择将用户所选择的安装目录的路径写入到某一个键值中,同时也要确保数据库文件
(dB文件)在此目录下,接着在程序中便可以读入数据库记录文件所在路径并动态配置
DSN了。将写入Profile的代码改为如下的即可:
String try
RegistryGet("HKEY_LOCAL_MACHINE/Software/MyApp.Settings/Fonts","Installpath",&
RegString!, try)
//读出写入注册表某一键值中的应用程序所安装的路径
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
Sqlca.dbparm="connectstring='UID=dba;PWD=sql;Start= dbeng50.exe;DatabaseFile="
+ try + "/xwb.db;AutoStop=yes;Driver={Sybase SQL Anywhere 5.0}'")
Connect;
其中UID是数据库的用户名,PWD是数据库的密码。
第二种方法则较为简单:将数据库文件所在的目录信息写入到一个INI文件中然后再读出来。
同样可以在配置安装版的时候便选择将用户选择的安装目录的路径按一定的格式写入到某个
INI文件中去,接着在程序中读出相应的信息就可以了。将写入Profile的代码改为如下的即
可完成动态配置DSN:
String try
try=profilestring("c:/ win.ini","ok","InstPath","none")
//读入数据库记录文件所在的路径
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
Sqlca.dbparm="connectstring='UID=dba;PWD=sql;Start= dbeng50.exe;DatabaseFile="
+ try + "/xwb.db;AutoStop=yes;Driver={Sybase SQL Anywhere 5.0}'")
Connect;
其中try=profilestring("c:/win.ini","ok","InstPath","none")中的"ok"是段名,
"InstPAth"是键的名称,而"none"则表示当没有取出数据时没有默认值。具体的INI文件的
格式是:
[ok]
InstPath=c:/myinstall //具体路径值由Create Install的系统变量写入
这里同样需要注意的是将INI文件存放位置的问题。考虑到用户盘符的问题,笔者建议存放
在c:盘根目录下。具体在Create Install中的配置如图(二)所示:
图(二)
至此便完成了将开发的数据库产品制作成安装版的全部工作,然后只需点击‘创建安装程
序’按钮生成安装文件即可。由于在这种安装产品的制作方法中为了简便而采取了许多措
施,因此它所生成的产品在安装过程的界面效果上也较为简单(和Install Shield所生成
的相比)。但是它所完成的功能却是完整的,在时间较紧而且对Install Shield不是很了
解的情况下这也不失为一种可以选择的制作数据库软件安装版的方法。
 
如果是delphi5+aql7的呢?
中间层用oledb连接没有用odbc和bde该如何安装?
中间层是mts,客户端用socketconnection连接。
能告诉详细的做法吗?
如果能有详细的步骤可以解决的话我给200分,急!
 
接受答案了.
 
后退
顶部