制作含access数据库的安装程序,急

发布网友 发布时间:2022-04-21 05:43

我来回答

1个回答

热心网友 时间:2022-06-18 07:13

http://topic.csdn.net/t/20020522/13/743044.html 网站在这里

你把所需要的文件(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)

本人懒 没有排版 走火着看吧

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com