pb开发的程序如何脱离pb的开发环境

pb技术文章 专栏收录该内容
21 篇文章 0 订阅
pb开发的程序应用

pb+sqlserver应用程序
原理,把pb开发的程序编译好后,放到客户端,
然后把pb运行跟连接sqlserver需要的dll文件考过来放到pb应用的根目录下,就是放到一块.
然后就可以了
pb+sqlserver客户端需要的dll文件下载
//现在不能下了,大家自己找找吧,有个帖子说名了这些


使用ini文件连接的各个参数的介绍
用ini文件来动态链接数据库

普通链接数据库的方式有三种

odbc还有直连,oledb(这个没有用过)

直接链接
// Profile gzdn
SQLCA.DBMS = "MSS Microsoft SQL Server"
SQLCA.Database = "gzdn"
SQLCA.LogPass = 'hejian520'
SQLCA.ServerName = "192.168.0.136"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = ""


上面的IP地址 192.168.0.138 固定死了,所以如果采用这种方式的话,数据库服务器地址改变后,程序就需要重新编译
很不方便
。ini文件方式
原理就是把数据库的名字,服务器名称等写到ini文件中,,可以理解成一种变量的方式
读写ini文件一般的方法是profilestring//还有其他的类型,
ProfileString ( filename, section, key, default )
第一个参数  要读取得ini文件名 带路径,
第二个,文件中得哪一节 就是刚才得[database]//
第三个, 每一节中得键值名称  比如Database,userid等
第四个 ,默认值, 当找不到ini文件或者找不到节名,或者找不到某一节下的键值的时候才会取最后一个默认值

例程:

在程序跟目录下新建一个文件后缀名为ini
比如 frame.ini
内容为

[database]//
DBMS=MSS (Msoft) SQL Server 6.X//驱动器名称,如果是oracle得换成oracle733等等。。
Database=van_store//要连接得数据库名称
UserId=// 连接数据库得id,一般没有
DatabasePassword=//连接数据库得密码,一般没有
ServerName=192.168.0.236//服务器得名称,一般写ip地址
LogId=sa//服务器用户名
LogPassword=//服务器密码
Lock=//一般为空
DbParm=//一般为空
可参考pb中得帮助  profilestring函数
string str_file
str_file = "frame.ini"//配置文件得名称
ProfileString ( filename, section, key, default )
第一个参数  要读取得ini文件名 带路径,
第二个,文件中得哪一节 就是刚才得[database]//
第三个, 每一节中得键值名称  比如Database,userid等
第四个 ,默认值,当找不到ini文件或者找不到节名或者找不到键值的时候取这个值


SQLCA.DBMS       = ProfileString(str_file,”database“,"DBMS"," ")
SQLCA.Database   = ProfileString(str_file,”database“,"DataBase"," ")
SQLCA.LogID      = ProfileString(str_file,”database“,"LogID"," ")
SQLCA.LogPass    = ProfileString(str_file,”database“,"LogPassword"," ")
SQLCA.ServerName = ProfileString(str_file,”database“,"ServerName"," ")
SQLCA.UserID     = ProfileString(str_file,”database“,"UserID"," ")
SQLCA.DBPass     = ProfileString(str_file,”database“,"DatabasePassword", " ")
SQLCA.Lock       = ProfileString(str_file,”database“,"Lock"," ")
SQLCA.DbParm     = ProfileString(str_file,”database“,"dbparm"," ")
SQLCA.autocommit = false
connect using sqlca;


pb+asa数据库

这个应用一般是用在单机版.
如果客户端安装了asa数据库的话,,配置一下数据源,也可以运行

但如果不想进行手工配置,,想让程序来实现的话,,
程序需要操作两件事情,,一个就是注册odbc的驱动(不知道这种方法是否正确),
一个就是配置数据库,设置数据库的路径.

这样客户端就需要一些pb的dll文件跟odbc所需要的文件,
下载可见//自己找,现在没法下载了

可以把下载的文件考到客户端跟程序编译后的pbd或者exe文件放到一块.
如果运行中出现问题,可能是下载的odbcad32.exe或者其他几个文件版本不对造成的,可以把编写程序机器上的这个文件考到客户端覆盖,,根据提示替换一下文件.
这个可以参见论坛上的 西门坡公交查询程序,,可以下载后运行一下,看看它都需要了哪些文件
在应用的open事件中需要写的代码

自动注册数据源,odbc


//获取程序所在目录
String ls_curdir
//ls_curdir=Space(256)
为字符缓冲区开辟内存空间
//GetCurrentDirectoryA(256,ls_curdir)
ls_curdir = GetCurrentDirectory()
gs_path = ls_curdir
string ls_ob
Registryget("HKEY_LOCAL_MACHINE/Software","ODBC", RegString!, ls_ob)
if ls_ob = '' then
registryset("HKEY_LOCAL_MACHINE/Software/",'odbc',regstring!,'')
end if
registryset("HKEY_LOCAL_MACHINE/Software/odbc",'odbcinst.ini',regstring!,'')

ulong ul_num
Int Answer,Answer1,Answer2,Answer3,Answer4,Answer5,Answer6,Answer7,ansApp
string ls_driver,ls_start,ls_location,apppath,db_path,db_name,ODBCStr,ds_name,ls_dbpath
//设置Adaptive Server Anywhere 8.0的驱动程序路径
ls_Location =ls_curdir
ls_dbpath=ls_curdir+"/gjcx.db"
//判断Adaptive Server Anywhere 8.0的驱动程序是否正确安装
ls_Driver=ls_Location+"/dbodbc8.dll"
ls_Start=ls_Location+"/dbeng8.exe"
//IF Not (FileExists(ls_Driver) AND FileExists(ls_Start)) Then
//MessageBox("错误!","系统中没有安装Adaptive Server Anywhere 7.0"+&
//"的驱动程序,系统将终止运行!",StopSign!)
//Return
//End IF
//设置ODBC/ODBCINST.INI/ODBC DRIVERS
Answer=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBCINST.INI"+&
"/ODBC Drivers","Adaptive Server Anywhere 8.0", RegString!, "Installed")
IF Answer = -1 Then
MessageBox("错误!","应用程序无法设置ODBC/ODBCINST.INI/"+&
"ODBC DRIVERS,系统将终止运行",Information!)
Return
End if
//设置ODBC/ODBCINST.INI/
Answer1=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBCINST."+&
"Adaptive Server Anywhere 8.0", "CPTimeout", RegString!, "not pooled")
Answer2=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBCINST."+&
"INI/Adaptive Server Anywhere 8.0", "Driver", RegString!,ls_Driver)
Answer3=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBCINST."+&
"INI/Adaptive Server Anywhere 8.0", "Setup", RegString!,ls_Driver)
IF Answer1 = -1 OR Answer2 = -1 OR Answer3 = -1 Then
MessageBox("错误!","应用程序无法设置ODBC/ODBCINST.INI,"+&
"系统将终止运行!",Information!)//程序中不折行
Return
End if
db_path = ""+ls_dbpath+""//设置数据库路径及文件名
db_name = "gjcx"               //设置数据库名称
ds_name = "gjcx"                     //设置ODBC数据源名

//设置ODBC DATA SOURCE名称
Answer=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.ini/"+&
"ODBC Data Sources", ds_name, RegString!, "Adaptive Server Anywhere 8.0")
Answer1=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.ini/"+&
ds_name,"driver", Regstring!, ls_Driver)
Answer2=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.ini/"+&
ds_name,"start", Regstring!, ls_Start)
Answer3=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.ini/"+&
ds_name,"autostop", Regstring!, "yes")
Answer4=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.ini/"+&
ds_name,"DataBaseFile", Regstring!, db_path)
Answer5=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.ini/"+&
ds_name,"DataBaseName", Regstring!, db_name)
Answer6=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.ini/"+&
ds_name,"pWD", Regstring!, "sql")
Answer7=RegistrySet("HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.ini/"+&
ds_name,"UID", Regstring!, "dba")
IF Answer = -1 Then
MessageBox("错误!","应用程序无法设置ODBC DATA SOURCE名称,"+&
"系统将终止运行!",Information!) //程序中不折行
Return
End if
//====================================================================
// 设置ODBC.ini细节
//====================================================================
answer1 = RegistrySet("HKEY_current_user/software/odbc/odbc.ini/"+&
ds_name,"driver", regstring!, ls_driver)
answer2 = RegistrySet("HKEY_current_user/software/odbc/odbc.ini/"+&
ds_name,"start", regstring!, ls_start)
answer3 = RegistrySet("HKEY_current_user/software/odbc/odbc.ini/"+&
ds_name,"autostop", regstring!, "yes")
answer4 = RegistrySet("HKEY_current_user/software/odbc/odbc.ini/"+ds_name,&
"DataBaseFile", regstring!, db_path)
answer5 = RegistrySet("HKEY_current_user/software/odbc/odbc.ini/"+ds_name,&
"DataBaseName", regstring!, db_name)
answer6 = RegistrySet("HKEY_current_user/software/odbc/odbc.ini/"+ds_name,&
"pWD", regstring!, "sql")
answer7 = RegistrySet("HKEY_current_user/software/odbc/odbc.ini/"+ds_name,&
"UID", regstring!, "dba")
If answer1 = -1 Or answer2 = -1 Or answer3 = -1 Or &
answer4 = -1 Or answer5 = -1 Or answer6 = -1 Or answer7 = -1 Then
MessageBox("错误!","应用程序无法设置ODBC.INI细节,"+&
  "系统将终止运行!",information!)
Return
End If
odbcstr = 'dsn=' + ds_name +';databasename=' + db_name + ';databasefile=' + db_path
sqlca.DBMS = "ODBC"
sqlca.Database = db_name
sqlca.DBParm = "c"
CONNECT Using sqlca;
If sqlca.SQLCode = -1 Then
MessageBox("数据库连接失败", "不能连接到数据库上,请检查。"+&
  "~r~n出错的详细原因为:"+sqlca.SQLErrText)
Halt
End If

 
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

orcd

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值