
expression is not valid 这句话一般是你在setfilter()时,参数的表达式不正确引起的,你可以插入断点调试一下,查看jstj变量的表达式,或者用messagebox("",jstj)来查看变量的值
经常出现的问题,是列名不正确,列类型不正确
还有不知道你用的是什么数据库,如果是sybase的话,不支持pos,你要用LOCATE
呵呵,你一定没有调试过jstj的值
不然你会发现,在你的and前面少了一个空格,最后就变成pos(xm,'ss')and pos()了,你可以再试一下
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
解析:
我是这么做的,在DataWindow中Header区域添加一Text,然后将Text改为"行号",在Detail区域对应Text的下面添加一个Compute,Compute Expression为"getrow()"
三 实例
先看如下两个图 图二表示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
是美国Sybase公司推出的数据库开发工具,历经多年的发展,它由1991年的10版发展到了目前的110版。PowerBuilder采用面向对象技术、图形化的开发环境和第四代(4GL)编程语言,可以使应用程序的开发效率更高,成本更低,质量更好,功能更强,因此它一经推出,就受到了广大开发人员的欢迎。PowerBuilder开发语言简称(pb语言)受到众多程序员喜爱。
PB的应用程序显示数据那都是用数据窗口做的,你可以找到那个数据窗口,然后在summary那一栏加一个compute进去,里面写sum( for all),这里的号表示你要合计的那一列的名称
%是用来做字符串匹配的,比如在数据窗口的find函数中使用:
//查找dw_emp中emp_name字段值含有ls_name字符的数据
string ls_name
long ll_nbr, ll_foundrow
ll_nbr = dw_empRowCount()
ls_name = Trim(sle_NameText)
ll_foundrow = dw_empFind( "emp_name like '%" + ls_name + "%'", 1, ll_nbr)
%代表任意字符(可以是一个或多个),可以写在要查找字符的前后都可以,比如
ll_foundrow = dw_empFind( "emp_name like '张%' ", 1, ll_nbr)表示查找姓张的人
ll_foundrow = dw_empFind( "emp_name like '%磊' ", 1, ll_nbr)表示查找名字最后一个字是磊的人
ll_foundrow = dw_empFind( "emp_name like '%磊%' ", 1, ll_nbr)表示查找名字中含磊字的人
以上就是关于我的PB程序出现问题~~帮忙~~~~全部的内容,包括:我的PB程序出现问题~~帮忙~~~~、pb 中如何在数据窗口中增加一列(行号)、PB环境下分布式应用程序的开发(二)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)