Power Builder同时连接多个数据库
赵韶平
只 需 设 置 两 个 TRANSACTION对 象 即 可 。
以 下 为 同 时 连 接 SQL SERVER和 DBF数 据 库 的 示 例 :
连 接 SQL SERVER:
SetPointer(HourGlass!)
//窗 口 居 中
f_center(this)
//根 据 sgselect 连 接 不 同 的 套
string sSelect
string temp
sSelect="d_gdzc"+sgselect
SQLCA.DbParm = ProfileString(gzINIFile,"Database","DbParm","")
SQLCA.DBMS = ProfileString(gzINIFile,"Database","DBMS","")
SQLCA.Database = sSelect
SQLCA.ServerName = ProfileString(gzINIFile,"Database","ServerName","")
SQLCA.LogId = "sa"
RegistryGet("HKEY_CURRENT_USER\software\microsoft\windows\currentversion\explorer\g", "a", RegString!,temp )
f_anencrypt (temp,SQLCA.LogPass)
SQLCA.AutoCommit = false
SQLCA.Lock = ProfileString(gzINIFile,"Database","Lock","")
connect using sqlca;
IF SQLCA.SQLCode <> 0 THEN
MessageBox("联 接 失 败 ", &
"不 能 联 接 数 据 库 !(错 误 信 息 :" + SQLCA.SQLErrText+")")
setpointer(Arrow!)
RETURN
halt close
END IF
定 义 函 数 :
fuction f_connectdbf(string sdbparm) return any
string nul //用 于 生 成 null值
transaction trans_name
trans_name=create transaction
trans_name.DBMS = "ODBC"
//trans_name.Database = "ZWDBF"
//trans_name.LogId =
//trans_name.LogPass =
trans_name.AutoCommit = False
trans_name.DBParm = sDBParm
//trans_name.Lock =ProfileString(gzINIFile,"Database","Lock","")
//trans_name.DbParm =ProfileString(gzINIFile,"Database","DbParm","")
CONNECT USING trans_name;
IF trans_name.SQLCode <> 0 THEN
MessageBox("联 接 失 败 ", &
"不 能 联 接 财 务 数 据 库 ! 请 检 查 财 务 路 径 是 否 正 确 。 (错 误 信 息 :" + SQLCA.SQLErrText+")")
rollback;
return setnull(nul)
else
return trans_name
END IF
连 接 FOXPRO数 据 库 ( 同 时 连 接 第 二 个 数 据 库 , 还 可 以 连 接 第 三 、 第 四 个 ) :
openwithparm(w_disp,"正 在 联 接 DBF卡 片 数 据 库 ...",parent)
transaction sqldbf
//用 SQLDBF连 接 财 务 ( 固 资 ) 数 据 库
sqldbf=f_connectdbf("Connectstring='DSN=gzdbf'")
//判 断 是 否 联 接 成 功
if isnull(sqldbf) then
Messagebox("出 错 ","联 接 DBF固 定 资 产 数 据 库 出 错 ! ")
end if