我的PB程序出现问题~~帮忙~~~~

我的PB程序出现问题~~帮忙~~~~,第1张

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环境下分布式应用程序的开发(二)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存