用access数据库做一个安装程序,急

/t/2002 05 22/13/743044 . html网址在这里。

你最好把你需要的所有文件(EXE,DLL等。)在自己程序的安装文件夹里,不在系统目录里,这样方便移动,还要注册数据源。

我有一个自动注册ODBC数据源的例子,就是注册的ACCESS数据库。虽然不是PB8,但都一样,就拿PB8里的那个当DLL文件。

外部公共函数(全局外部函数)

//获取当前路径

公共函数Long GetCurrentDirectoryA(Long nBufferLength,ref string lpBuffer)库“kernel 32”;

//获取年份的农历表示。

函数long MyFormatLunarYear(long iYear,ref string text)库“calendar.dll”

//获取一天的农历表示

函数long MyGetLunarDate(long iYear,long iMonth,long iDay,ref long iLunarYear,ref long iLunarMonth,ref long iLunarDay)库“calendar.dll”

//获取某一天的农历节气序号。

函数long getjieqi(long iYear,long iMonth,long iDay)库“calendar.dll”

1、海上日计划. ini

/*

Run_flag:表示系统是否第一次运行,0为第一次,以便系统判断是否创建新的数据源。

Dsn_def:默认数据源

Week_month:表示起始输入界面是以周还是月的形式显示,1-月;两周

Icon_flag:指示运行时是否显示在最小化的界面中。1-是0-否。

Iuser:上次登录的用户id。

Idiff:上次登录区别(公司、家庭、其他)

*/

[公共]

begin_year=2001

结束年份=2005年

year_step=1

month_step=1

Curr_path=D:\pb\ day?Pai \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()返回(无)

//设置默认数据源

如果len(trim(profileString(" sea day plan . ini "," ini "," dsn_def "," ")))=0则

setprofileString(" sea day plan . ini "," ini "," dsn_def "," dsn_sdp ")

如果…就会结束

3、ue_outo_set_odbc()返回(无)

/*自动设置odbc数据源

在odbc相关的关键字中:

HKEY _本地_机器\软件\ ODBC \ odbcinst.ini \ ODBCDriver记录所有安装的ODBC?驾驶员

HKEY _本地_机器\软件\ ODBC \ odbcinst.ini记录各种ODBC?关于驱动程序的信息。

HKEY _当前_用户\软件\ odbc \ odbc.ini \ ODBC数据源记录各种数据源的类型。

HKEY _当前_用户\软件\ odbc \ odbc.ini记录了各种数据源的详细信息*/

字符串ls_sys[]

ls _ sys[1]= " HKEY _ LOCAL _ MACHINE \ Software \ ODBC \ ODBC inst。INI\ODBC驱动程序"

ls _ sys[2]= " HKEY _ LOCAL _ MACHINE \ Software \ ODBC \ ODBC inst。INI "

ls _ sys[3]= " HKEY _当前用户\软件\ODBC\ODBC。INI\ODBC数据源"

ls _ sys[4]= " HKEY _当前用户\软件\ODBC\ODBC。INI "

//确定系统中是否安装了Access。

字符串ls_install

RegistryGet(ls_sys[1]," Microsoft Access驱动程序(*。mdb)",RegString!,ls_install)

if trim(ls _ install)& lt;& gt“安装”然后

Messagebox("错误","未安装Microsoft Access驱动程序")

停止

如果…就会结束

//获取当前路径

字符串最小二乘路径

ls _ curr_path = profile string(" sea day plan . ini "," public "," curr _ path ","")

如果len(trim(ls_curr_path))=0,则

Messagebox ("Error ","系统初始化当前路径文件出错!")

停止

如果…就会结束

//获取默认数据源名称

字符串ls_dsn

ls _ DSN = profile string(" sea day plan . ini "," ini "," dsn_def ","")

如果len(trim(ls_dsn))=0,则

Messagebox ("Error ","系统出现数据源初始化文件错误!")

停止

如果…就会结束

//修改注册表

RegistrySet(ls_sys[3],ls_dsn,RegString!,“Microsoft Access驱动程序(*。MDB)")//记录数据源类型。

RegistrySet(ls _ sys[4]+" \ "+ls _ DSN," DBQ ",RegString!,ls _ curr _ path+" \ sea _ day _ plan . MDB ")//记录数据源的详细信息。

registry set(ls _ sys[4]+" \ "+ls _ DSN," Driver ",RegString!,“C:\WINDOWS\SYSTEM\odbcjt32.dll”)

registry set(ls _ sys[4]+" \ "+ls _ DSN," FIL ",RegString!,“MS Access”)

RegistrySet(ls _ sys[4]+" \ "+ls _ DSN," PWD ",RegString!,“sql”)

registry set(ls _ sys[4]+" \ "+ls _ DSN," UID ",RegString!,“dba”)

ulong lu_driverid,lu_SafeTransactions

lu_driverid=25

lu_SafeTransactions=0

registry set(ls _ sys[4]+" \ "+ls _ DSN," DriverId ",Regulong!,lu_driverid)

registry set(ls _ sys[4]+" \ "+ls _ DSN," SafeTransactions ",Regulong!,lu_SafeTransactions)

4.公开竞赛

打开(w_ver_promp)

如果profilestring("sea day plan.ini "," ini "," run_flag "," ")="0 "那么

//获取当前路径

字符串ls _当前路径

long ll_length=50

int li_rtn

字符串ls_dsn="dsn_sdp "

Li _ RTN = getcurrentdirectorya(ll _ length,refls _ current _ path)//放入ue_ini事件出错。

如果li_rtn=0,则

Messagebox("访问失败","应用程序目录访问失败,请重新安装")

停止

如果…就会结束

setProfileString(" sea day plan . ini "," public "," curr_path ",ls_current_path)

//初始化

this.triggerevent("ue_ini ")

//初始化注册表

this . trigger event(" UE _ auto _ set _ odbc ")

如果…就会结束

//获取默认数据源

ls _ DSN = profile string(" sea day plan . ini "," ini "," dsn_def ","")

如果len(trim(ls_dsn))=0,则

Messagebox ("Error ","系统出现数据源初始化文件错误!")

停止

如果…就会结束

//配置数据源

SQLCA。DBMS = "ODBC "

SQLCA。自动提交=假

SQLCA。db parm = " connect string = ' DSN = "+ls _ DSN+";UID = dbaPWD=sql ' "

使用sqlca连接;

如果SQLCA。SQLCode & lt& gt那么0

MessageBox("数据库连接失败","无法连接到数据库,可能的原因"+SQLCA。SQLErrText)

返回

如果…就会结束

关闭(w_ver_promp)

打开(w_main)

打开(w_promp)

//清除数据库

如果isvalid(w_promp ),则

w _ promp . dw _ 1 . object . t _ 1 . text = "正在加载数据,请稍候..."

如果…就会结束

w_main.triggerevent("ue_new ")

setProfileString(" sea day plan . ini "," ini "," run_flag "," 1 ")

关闭(带提示)

打开(w_test)

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

//窗口自动居中

环境乐_环境

int li_ReturnCode

这个。SetRedraw(False) //获取屏幕分辨率?

Li _ return code = get environment(le _ envir)//将窗口移动到屏幕中央。

if li _ ReturnCode & lt& gt1然后//失败

这个。SetRedraw(true)

返回

如果…就会结束

Li _ return code = this . move((PixelsToUnits(le _ envir。屏幕宽度,XPixelsToUnits!)-这个。Width)/2,(PixelsToUnits(le_envir。屏幕高度,YPixelsToUnits!)-这个。高度)/2)

如果li_ReturnCode=1那么这个。SetRedraw(true)

我懒得排版。看着它。