PB环境下分布式应用程序的开发(二)

PB环境下分布式应用程序的开发(二),第1张

三 实例

先看如下两个图 图二表示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内容的替换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10128398.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存