
三 实例
先看如下两个图 图二表示DTS端 图三表示Client端 其中DTS已经建立了与数据库服务器的连接 数据窗口中显示的是所有的数据 Client并没有数据库接口 而是通过DTS间接的访问数据 在数据窗口中显示的是所有男性职工
图(二)
图(三)
该程序的大部分源代码如下
DTS端
首先定义一个全局变量 Transport mytrans;
在 开始监听 按钮中输入如下代码
long ll
mytrans=create transport
mytrans driver= winsock
mytrans application= //端口号
mytrans location= //本地服务器
ll=mytrans listen() //开始监听
if ll<> then
messagebox(string(mytrans errcode) mytrans errtext)
return
end if
server settranspool( ) //设置连接缓冲 注意 server 为应用的名称
this text= 正在监听中
this enabled=false
在 结束监听 按钮中输入如下代码
mytrans stoplistening() //结束监听
destroy mytrans
cb_ text= 开始监听
cb_ enabled=true
建立一个NVO
利用PB的User Objects画板建立一个classàcustom的用户对象 建立用户对象函数nvoretrieve(ref blob buffer string filter) returns long 函数体如下
long ll
SQLCA DBMS = ODBC
SQLCA AutoCommit = False
SQLCA DBParm = Connectstring= DSN=person
connect; //建立与数据库的连接
datastore datastore_buffer
datastore_buffer=create datastore
datastore_buffer dataobject= dw_person //dw_person是一个数据窗口
datastore_buffer settransobject(sqlca)
datastore_buffer retrieve()
datastore_buffer setfilter(filter)
datastore_buffer filter()
ll=datastore_buffer getfullstate(buffer) //函数getfullstate()和setfullstate()常用于分布式应用程序
disconnect;
return ll
建立NVO的代理对象
在用户对象上点鼠标右健 选择 Set Proxy Name 输入 NVO_dw 保存用户对象
打开Library画板 将 NVO_dw 输出为文件 以便在客户端导入该代理
Client端
打开Library画板 将刚才输出的文件导入
定义两个全局变量
connection myconn
nvo_dw proxy_dw
在 连接 按钮中输入如下代码
long ll
myconn=create connection
myconn driver= winsock
myconn application= //必须和DTS端的端口号一致
myconn location= //DTS的IP地址
ll=myconn connecttoserver() //建立连接
if ll<> then
messagebox(string(myconn errcode) myconn errtext)
return
end if
this text= 正在连接中
this enabled=false
cb_ enabled=true
cb_ enabled=true
在 断开 按钮中输入如下代码
myconn disconnectserver() //断开连接
destroy myconn
cb_ enabled=true
cb_ text= 连接
cb_ enabled=false
this enabled=false
在 查询 按钮中输入如下代码
long result
blob buffer
myconn createinstance(proxy_dw) //建立代理对象
result=proxy_dw nvoretrieve(buffer sex= 男 ) //检索所有男性职工
result=dw_ setfullstate(buffer) //dw_ 是一个数据窗口控件
四 小结及注意事项
以上程序在WINDOWS PB 环境中调试通过 在客户数量很多 数据量很大的情况下 查询的速度会快很多
编程时注意 如果NVO的函数体发生变化 则无须重新生成代理 如果NVO的函数接口发生变化 则必须重新生成它的代理并将它输入到客户端中
lishixinzhi/Article/program/SQL/201311/16219
当然可以,假设你要从app1中启动app2, 不仅可以启动,还可以调用参数。
在app2的AndroidManifestxml 中,
<intent-filter>
<category android:name="androidintentcategoryDEFAULT"></category>
<action android:name="androidintentactionVIEW"></action>
<data android:scheme="app2"></data>
</intent-filter>
在app1的代码中,你想启动app2的时机调用
startActivity(new Intent(IntentACTION_VIEW, Uriparse("app2://path")));
path就是可以传过来的参数了。
本文介绍一种在Power Builder(以下简称为PB)中利用OLE把数据库中的数据传送到Word文档的方法 通过这种方法 用户可以根据需求而改变内容 以Word方式打印结果文档 例如 在处理学生成绩时 如果要将每个学生的成绩报告生成Word文档 不同的学生只改变姓名 学号和年度等数据 其他的格式不改变 只要从学生成绩数据库中调出特定数据 插入或替换到已经制作好的Word模版中 即可解决问题
一 创建Word模版文档
Word模板文档的创建根据用户的要求进行 在固定的内容输入完成后 将需要变换内容(例如姓名 年度 系别和证书编号等)的位置输入 student_name student_year department 以及 student_id 等编码 注意: 尽量使用英文来表示这些变量 目的是避免某些汉字相同而造成的误替换
在需要动态改变内容的位置 不需要输入文字 可以通过插入书签的方法实现 具体 *** 作如下 首先 选择在Word中 选择 插入 书签 d出 书签 对话框(如图 所示) 在 书签名 文本框中输入书签名称后 点击 添加 按钮 即在当前光标位置上增加了一个书签 假设我们增加了 个书签 分别是 name year department以及id 分别代表姓名 年度 系别以及证书编号
二 PB实现方法
在窗体中新建一OLE控件 在d出的 insert object 属性窗口的 create new tab 选项卡中选择 Microsoft Word 文档 选项 点击 OK 按钮后将该控件放在窗体中适当位置 PB系统会自动出现Microsoft Word应用程序 将控件命名为 OLE_Word 并创建 打开文件 替换数据 和 存盘 按钮 编写如下代码
.打开文件 string docname named integer value value = getfileopenname( Select File docname named DOC Doc Files ( DOC) DOC ) if value = THEN // 将模版文件另存为实际 *** 作文件(程序略) if ole_Word open(docname)= then ole_Word activate(inplace!) end if end if
这里使用 GetFileOpenName 函数让用户自行选择文件 实际应用时可以进行条件的限定 注意: 需要将模版文件另存为实际 *** 作文件后再打开 不能直接 *** 作模版文件 打开文件参数有 种 其中 inplace 表示在PB程序内部窗口调用Word 部分提供Word的功能菜单; 另一种参数是 offsite 表示PB程序外启动Word应用程序 提供Word的所有功能菜单 简单的演示文档如图 所示
.插入或替换 *** 作
( )替换数据法
string ls_find_string ls_replace_string //取数据库中数据赋值变量ls_replace_string(程序略) ls_find_string = student_name ls_replace_string = 张某 ole_Word object application Selection find Execute(ls_find_string false true false false false true true ls_replace_string ) //替换student_year department student_id的程序与替换student_name相同 略 其运行结果如图 所示
( )插入数据法
除了使用查找替换方式 您还可以使用书签方式来实现上述 *** 作 string ls_name ls_year department ls_id//取数据库中数据赋值变量ls_name ls_year department ls_id(程序略) IF ole_Word object application ActiveDocument Bookmarks Exists( name ) THEN ole_Word object application activedocument bookmarks item( name ) select//定位书签name ole_Word object application selection typetext(ls_name)//插入值 for i = to //消除非法字符 ole_Word object application Selection TypeBackspace() next ELSE//错误提示 END IF //定位书签year department id一样 略 注意事项 :
.一定要判断书签是否存在 如果书签不存在 进行以上 *** 作将导致系统错误 .因为汉字双字节问题 PB 中每插入一个汉字后会在后面产生一非法字符 需要判断汉字个数来决定调用 TypeBackspace() 的次数 上面涉及的 次循环次数是举例说明 实际编程要使用变量替代 上面的 种方法各有利弊 插入数据方式设计思想简单 *** 作容易 控制也比较方便 但不适合多处插入同一内容 并且需要删除产生的非法字符; 而替换方式只调用一个函数 可以搜索整个文档替换同一内容 并不产生非法字符 但有可能替换掉不该替换的内容 但是涉及的参数太多 不易记住
.存盘
ole_Word save() ole_Word clear()
lishixinzhi/Article/program/SQL/201311/16393
string auto_id;
long ll_no,ll_skip,i
auto_id = " ";
ll_no = auto_no(ll_type,auto_id,0,id_inp,dw); //给auto_id赋值
if ll_no=-1
{
return auto_id;
}
ll_skip = 2;
for (i=1;i<=ll_skip;i++)
{
ll_skip = skip_no(auto_id,ll_type,id_inp,dw)
if (ll_skip=-1)
{
return auto_id;
}
if (ll_skip<>1)
i = 1
else
i=3
return auto_id //返回auto_id
以上就是关于PB环境下分布式应用程序的开发(二)全部的内容,包括:PB环境下分布式应用程序的开发(二)、PB 怎么把一个模块集成到另一个应用程序中、在PB中实现Word内容的替换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)