=#===>>如何制作含ACCESS数据库的安装程序,都包含那些DLL和注册表项?100分!参与有奖<<===#=

yueyang 2002-05-22 01:05:45
安装程序制作大家都知道,需要把PB的支持DLL文件随程序发布出去。如果用了ASA也需要把ASA的DLL相关文件一同发布出去。这样自己开发的程序到用户那里才能正常使用。
现在我用PB8加ACCESS2000数据库编了一个程序,在本机上已测试完成。需要发布到用户那里去用,
1、考虑用户的机子没有安装ACCESS2000及OFFICE2000,都应该将哪些ACCESS数据库使用相关的文件包含到安装文件中,还有些什么注册表项需要建立?
2、如果用户安装了更高或低版本的怎么避免冲突?
3、怎么做出判断:如果用户用2000或XP或NT就把DLL放到 驱动盘符:\系统目录\SYSTEM32,98就放到 驱动盘符:\系统目录\SYSTEM 下?
望高手速回答,参与着有也有奖,但大将只留给解决问题的人。谢谢!
...全文
327 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueyang 2002-05-22
  • 打赏
  • 举报
回复
C:\WINDOWS\SYSTEM\odbcjt32.dll这个文件是不是所有系统都带,还是要另加?
关于注册表部分我把我自己的导出来后在别人那里添加了,因为对方装过ACCESS2000了所以正常,但ODBCJT32。DLL文件一定要有才行,我将ODBCJT32。DLL挪个位置就不行了,注册表中的路径也改了还不行,所以我得先去找台新机子看看有无ODBCJT32程序,如果没有那么关于ACCESS的DLL文件就难判断了。
zbh68 2002-05-22
  • 打赏
  • 举报
回复
如果你有InstallShield5.1国际版,上面有个模板关于ODBC的,有怎么安装ACCESS,相关的DLL也有。
如怕DLL被覆盖,可以拷在自己软件目录下,搜索路径是先当前目录的。
不过注意修改一下上面仁兄说的注册表,把HKEY_CURRENT_USER\Software\ODBC\ODBC.INI下的有关启动之类的路径不要。
pei 2002-05-22
  • 打赏
  • 举报
回复
你把所需要的文件(EXE、DLL等)最好都放到你自己程序的安装文件夹里,不要放到系统目录,这样移动也方便, 另外还要注册数据源

我这有一个自动注册ODBC数据源的例子,就是注册的ACCESS数据库,虽然不是PB8但都一样,只是DLL文件取PB8里的就行了

外部公共函数(global external functions)
//得到当前路径
public Function Long GetCurrentDirectoryA(long nBufferLength, ref string lpBuffer) Library "kernel32";
//得到年的农历表示
function long MyFormatLunarYear(long iYear,ref string text) library "calendar.dll"
//得到日的农历表示
function long MyGetLunarDate(long iYear, long iMonth, long iDay, ref long iLunarYear, ref long iLunarMonth, ref long iLunarDay) library "calendar.dll"
//得到某日的农历节气序号
function long getjieqi(long iYear, long iMonth, long iDay) library "calendar.dll"


1、sea day plan.ini

/*
run_flag :表示系统是否第一次运行,0为第一次,以便系统判断是否进行建立新的数据源
dsn_def :默认的数据源
week_month:表示开始运行的输入界面是以星期的形式显示还是以月份的形式显示,1-月份;2-星期
icon_flag :表示运行时是否以最小化界面显示。1-是 0 -否
iuser :上次登录的用户id
idiff :上次登录的区分(公司、家庭、其他)
*/

[public]
begin_year=2001
end_year=2005
year_step=1
month_step=1
curr_path=D:\pb\日?`排\pbl
week_month=1

[ini]
ini_flag=1
run_flag=1
dsn_def=dsn_sdp
icon_flag=0
iuser=jdh
idiff=1

2、ue_ini() returens(none)

//设置默认数据源
if len(trim(profileString("sea day plan.ini","ini","dsn_def","")))=0 then
setprofileString("sea day plan.ini","ini","dsn_def","dsn_sdp")
end if

3、ue_outo_set_odbc() returns(none)

/*自动设置odbc数据源
与odbc相关的键中:
HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER 中记录了所有已安装的ODBC?驱动程序
HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI 中记录了各种ODBC?驱动程序的相关信息
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources 记录了各种数据源的类型
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI 则记录了各种数据源的详细信息*/

string ls_sys[]
ls_sys[1]="HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC DRIVERS"
ls_sys[2]="HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI"
ls_sys[3]="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources"
ls_sys[4]="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI"

//判断系统是否已安装Access
string ls_install
RegistryGet(ls_sys[1], "Microsoft Access Driver (*.mdb)", RegString!,ls_install)
if trim(ls_install)<> "Installed" then
messagebox("错误","未安装Microsoft Access Driver")
halt
end if
//取得当前路径
string ls_curr_path
ls_curr_path=profileString("sea day plan.ini","public","curr_path","")
if len(trim(ls_curr_path))=0 then
messagebox("错误","系统发生当前路径初始化文件错误!")
halt
end if
//取得默认数据源名称
string ls_dsn
ls_dsn=profileString("sea day plan.ini","ini","dsn_def","")
if len(trim(ls_dsn))=0 then
messagebox("错误","系统发生数据源初始化文件错误!")
halt
end if
//修改注册表
RegistrySet(ls_sys[3], ls_dsn,RegString!,"Microsoft Access Driver (*.mdb)")//记录数据源类型
RegistrySet(ls_sys[4]+"\"+ls_dsn,"DBQ",RegString!,ls_curr_path+"\sea_day_plan.mdb")//记录数据源的详细信息
RegistrySet(ls_sys[4]+"\"+ls_dsn,"Driver",RegString!,"C:\WINDOWS\SYSTEM\odbcjt32.dll")
RegistrySet(ls_sys[4]+"\"+ls_dsn,"FIL",RegString!,"MS Access;")
RegistrySet(ls_sys[4]+"\"+ls_dsn,"PWD",RegString!,"sql")
RegistrySet(ls_sys[4]+"\"+ls_dsn,"UID",RegString!,"dba")

ulong lu_driverid,lu_SafeTransactions
lu_driverid=25
lu_SafeTransactions=0
RegistrySet(ls_sys[4]+"\"+ls_dsn,"DriverId",Regulong!,lu_driverid)
RegistrySet(ls_sys[4]+"\"+ls_dsn,"SafeTransactions",Regulong!,lu_SafeTransactions)

4、open事件

open(w_ver_promp)

if profilestring("sea day plan.ini","ini", "run_flag", "")="0" then
//取得当前路径
string ls_current_path
long ll_length=50
int li_rtn
string ls_dsn="dsn_sdp"
li_rtn=GetCurrentDirectoryA(ll_length,ref ls_current_path) //放到ue_ini事件中出错
if li_rtn=0 then
messagebox("存取失败","应用程序目录存取失败,请重新安装")
halt
end if
setProfileString("sea day plan.ini","public", "curr_path", ls_current_path)
//初始化
this.triggerevent("ue_ini")
//初始化注册表
this.triggerevent("ue_auto_set_odbc")
end if
//取得默认数据源
ls_dsn=profileString("sea day plan.ini","ini","dsn_def","")
if len(trim(ls_dsn))=0 then
messagebox("错误","系统发生数据源初始化文件错误!")
halt
end if
//配置数据源
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN="+ls_dsn+";UID=dba;PWD=sql'"

connect using sqlca;

IF SQLCA.SQLCode <> 0 THEN
MessageBox("数据库连接失败","不能连接到数据库,可能原因"+ SQLCA.SQLErrText)
RETURN
END IF
close(w_ver_promp)

open(w_main)
open(w_promp)
//清空数据库
if isvalid(w_promp) then
w_promp.dw_1.Object.t_1.Text = "正在载入数据,请稍候......"
end if
w_main.triggerevent("ue_new")
setProfileString("sea day plan.ini","ini", "run_flag", "1")
close(w_promp)
open(w_test)




*******************

//窗口自动居中
environment le_envir
int li_ReturnCode
this.SetRedraw(False) // 获得屏幕分辨率大小??
li_ReturnCode = GetEnvironment(le_envir) // 把窗口移动到屏幕中央
if li_ReturnCode<>1 then //失败
this.SetRedraw(true)
return
end if
li_ReturnCode=this.move((PixelsToUnits(le_envir.ScreenWidth,XPixelsToUnits!) - this.Width)/2,(PixelsToUnits(le_envir.ScreenHeight,YPixelsToUnits!) - This.Height)/2)
if li_ReturnCode=1 then this.SetRedraw(true)

--------------------------------------------------------------------------------
liuyxit 2002-05-22
  • 打赏
  • 举报
回复
1.沒試過,現一般的机子都裝有office
2.用制作安裝程序的軟件做﹐它可以判別要安裝的文件是否比原來的新﹐是不履蓋
3.同2.如用create install3.14軟件﹐它提供一個%syspath%為系統目錄﹐你可以定義那些文件放在該目錄。
詳細請看軟件幫忙。
在Windows 10或Windows 11操作系统中,用户经常会遇到共享打印机时出现的一系列错误代码,这些错误代码可能会阻碍打印机共享功能的正常使用。常见的错误代码包括0x00000057、0x00000709和0x0000011b,这些代码通常指出了不同的问题,比如权限不足、服务未运行或配置错误等。除此之外,还有一些故障提示如“连接失败”或“内存不足”,这些都可能影响到打印机共享的稳定性。 要解决这些故障,首先要确保打印机已经正确地连接到网络,并且在需要共享的电脑上进行了设置。确保打印机驱动程序是最新的,并且在共享设置中没有错误配置。对于权限问题,需要检查网络上的用户账户是否具有足够的权限来访问共享打印机。同时,也要确保打印机服务正在运行,特别是“Print Spooler”服务,因为这是打印机共享服务的核心组件。 在某些情况下,问题可能与操作系统的更新有关,如升级到最新版的Windows 10或Windows 11后可能出现的兼容性问题。这时,可能需要查看微软的官方支持文档来获取特定的解决方案或更新。 对于错误代码0x00000057,这通常是由于没有足够的权限来访问网络打印机或其共享资源,解决方法是确保网络打印机的权限设置正确,包括在组策略中设置相应的访问权限。而0x00000709错误可能是由于打印机驱动问题或打印机端口配置错误,可以尝试重新安装或更新打印机驱动来解决。至于0x0000011b错误,这往往是因为打印机队列服务的问题,检查并重启“Print Spooler”服务通常是解决这类问题的常见手段。 至于“连接失败”或“内存不足”这类故障,通常与客户端和打印机之间的网络连接以及打印机本地资源的使用情况有关。检查网络连接,确保打印机所在的网络段没有故障或中断。同时,如果打印机的打印队列长时间得不到处理,可能会导致内存不足的情况,这时可能需要清理打印队列或增加打印机的内存配置。 为了帮助用户更快速地解决这些问题,市面上出现了各种打印机共享错误修复工具。这些工具往往通过预设的修复程序来自动检测和修正打印机共享中常见的问题。它们可以快速检查打印机驱动、网络连接以及共享设置,并且能够提供一键修复功能,大幅减少了用户自行排查和解决问题的难度。 然而,在使用这些修复工具之前,用户应确保这些工具的来源是安全可靠的,避免因使用不当的修复工具而引发其他系统安全或隐私问题。用户可以到官方平台或者信誉良好的软件提供商处下载这些工具。通过细心检查打印机的共享设置,及时更新驱动程序和服务,以及合理使用修复工具,大多数共享打印机的问题都可以得到有效的解决。

754

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧