连接参数
修改 PB 程序的 SQLCA 的连接参数,实现通过 VDN 驱动连接网络数据库
更多参数说明请见 参数详解
要点
重要
使用 OLE DB 连接,发布时需要 pbole*.dll 和 pbodb*.ini 例如:pbole90.dll、pbodb90.ini
192.168.111.130 修改为你的服务器的 IP 地址或域名。
不需要设置数据库用户名和密码
DesKey 为和服务器里的设置想对应起来
根据 GetApplication()可以判断出是否为 PB 开发环境
if handle(GetApplication())=0 then
Debug=1
else
Debug=0
end if- 由于长度限制,当 SqlErrtext 获取的错误信息不完整,可以调用
uo_vdncore.GetSqlError()来获取完整的错误信息
uo_vdncore.GetSqlError()PROVIDERSTRING 包括多个子属性,注意前后单引号闭合
如果端口设置为 80,则 DataSource 不需要带端口号
SQLSERVER 连接参数
SQLCA.DBMS = "OLE DB"
SQLCA.AutoCommit = False //根据以往程序里的设置值设定
SQLCA.Lock = "RC" //或者 RU 注意 ORACLE 不要加
SQLCA.DBParm = "PROVIDER='VesnDB.Net',"
SQLCA.DBParm+="PROVIDERSTRING='database=帐套;deskey=Topany;AppName=VDN;Host=PC;"
SQLCA.DBParm+="DoubleQuote=1;IgnorePBTable=1;"//{可选} 使用双引号;忽略系统表
SQLCA.DBParm+="ProvType=NCLI;" //{可选}使用 SQLNCLI 驱动
SQLCA.DBParm+="ConcatNull=1;" //{可选}默认就为 1 可以不写
SQLCA.DBParm+="ConvertWChar=1;" //针对 PB9
SQLCA.DBParm+="SN=序列号;"
If Handle(GetApplication()) = 0 Then
SQLCA.DBParm+="Debug=1;'," //设计状态
Else
SQLCA.DBParm+="Debug=0;'," //运行状态
End If
SQLCA.DBParm+="DATASOURCE='http://192.168.111.130:8088/',"
SQLCA.DBParm+="PBTrimCharColumns='Yes',"
SQLCA.DBParm+="RecheckRows=1"
Connect;提示
使用自增序列(Identity Column)发布时需要带上 pbodb*.ini 文件,位于 C:\Program Files (x86)\Sybase\Shared\PowerBuilder 目录下
AutoCommit 参数根据以往程序里的设置值进行设置,否则容易造成死锁。 AutoCommit=True 时,批量数据更新速度会明显减慢
ORACLE 连接参数
重要
推荐服务端使用 ODAC11 32 位版本 ORACLE 客户端,兼容之前的 ORACLE
ORACLE 的存储过程调用语法同专用接口直连略有不同,详见Oracle 存储过程
SQLCA.DBMS = "OLE DB"
SQLCA.AutoCommit = False //根据以往程序里的设置值设定
SQLCA.DBParm = "PROVIDER='VesnDB.Net',"
SQLCA.DBParm+="PROVIDERSTRING='database=帐套;deskey=Topany;PLSQLRSet=1;IgnorePBTable=1;"
SQLCA.DBParm+="ConvertWChar=1;" //针对 PB9
SQLCA.DBParm+="SN=序列号;"
If Handle(GetApplication()) = 0 Then
SQLCA.DBParm+="Debug=1;'," //设计状态
Else
SQLCA.DBParm+="Debug=0;'," //运行状态
End If
SQLCA.DBParm+="DATASOURCE='http://192.168.111.130:8088/',"
SQLCA.DBParm+="RecheckRows=1"
Connect;提示
因为 PB 驱动的原因,ORACLE 数字类型(Number)参数对应的 PB 变量:
PB9\PB10 声明为 Decimal
PB11 及以上根据返回值是否包含小数来定义为: LONG 或 DECIMAL
默认日期格式修改
连接之后修改一下 nls_date_format,一般直连都是这个格式,即时:to_date(date),默认不带时分秒
EXECUTE IMMEDIATE "ALTER SESSION set nls_date_format= 'DD-MON-RR'";