三实例
先看如下两个图图二表示DTS端图三表示Client端其中DTS已经建立了与数据库服务器的连接数据窗口中显示的是所有的数据Client并没有数据库接口而是通过DTS间接的访问数据在数据窗口中显示的是所有男性职工
图(二)
图(三)
该程序的大部分源代码如下
DTS端
首先定义一个全局变量Transport mytrans;
在开始监听按钮中输入如下代码
long ll
mytrans=create transport
mytransdriver=winsock
mytransapplication= //端口号
mytranslocation= //本地服务器
ll=mytranslisten() //开始监听
if ll<> then
messagebox(string(mytranserrcode)mytranserrtext)
return
end if
serversettranspool() //设置连接缓沖注意server为应用的名称
thistext=正在监听中
thisenabled=false
在结束监听按钮中输入如下代码
mytransstoplistening() //结束监听
destroy mytrans
cb_text=开始监听
cb_enabled=true
建立一个NVO
利用PB的User Objects画板建立一个classàcustom的用户对象建立用户对象函数nvoretrieve(ref blob bufferstring filter) returns long函数体如下
long ll
SQLCADBMS = ODBC
SQLCAAutoCommit = False
SQLCADBParm = Connectstring=DSN=person
connect; //建立与数据库的连接
datastore datastore_buffer
datastore_buffer=create datastore
datastore_bufferdataobject=dw_person //dw_person是一个数据窗口
datastore_buffersettransobject(sqlca)
datastore_bufferretrieve()
datastore_buffersetfilter(filter)
datastore_bufferfilter()
ll=datastore_buffergetfullstate(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
myconndriver=winsock
myconnapplication= //必须和DTS端的端口号一致
myconnlocation= //DTS的IP地址
ll=myconnconnecttoserver() //建立连接
if ll<> then
messagebox(string(myconnerrcode)myconnerrtext)
return
end if
thistext=正在连接中
thisenabled=false
cb_enabled=true
cb_enabled=true
在断开按钮中输入如下代码
myconndisconnectserver() //断开连接
destroy myconn
cb_enabled=true
cb_text=连接
cb_enabled=false
thisenabled=false
在查询按钮中输入如下代码
long result
blob buffer
myconncreateinstance(proxy_dw) //建立代理对象
result=proxy_dwnvoretrieve(buffersex=男) //检索所有男性职工
result=dw_setfullstate(buffer) //dw_是一个数据窗口控件
四小结及注意事项
以上程序在WINDOWSPB环境中调试通过在客户数量很多数据量很大的情况下查询的速度会快很多
编程时注意如果NVO的函数体发生变化则无须重新生成代理如果NVO的函数接口发生变化则必须重新生成它的代理并将它输入到客户端中
NVO对象是一个不可视对象只能通过函数调用的方法使用它不可将它作为一个控件放在窗口上