咖啡快好了,可是还有难题:

qahwa 2002-04-06 06:56:46
快完成了,大概还有四五个问题,看样子提不够100个问题了,分还不少,故百分相赠!
呵呵,这个问题对我来说真的很难呀,一下午了。。。

为什么我点“显示”按钮只能执行弹出message("系统提示","输入编号错误,请重新输入."),当编辑框中无数据或前者数据大于后者数据时均无反映?(应该在窗口中显示出两者之间的数据呀。请看详情:

在窗口w_1上有dw_manreport,还有两个掩码框,我想点击“显示”按钮,在d_1的dw中显示出两个掩码框之间数据包括的记录,比如掩码框分别输入100,200,则窗口显示100到200之间的记录:
记录字段”编号“设置为: 字段属性:num类型: char长度: 6
bh1,bh2为全局变量。

窗口代码为open事件:
bh1 = "0"
bh2 = "999999"
dw_manreport.settransobject(sqlca)
dw_manreport.retrieve(bh1,bh2)

“显示”按钮clicked事件:
bh1=em_1.text
bh2=em_2.text
//结束编号应大于起始编号
if bh1 > bh2 then
messagebox("系统提示","输入编号错误,请重新输入.")
else
dw_manreport.settransobject(sqlca)
dw_manreport.retrieve(bh1,bh2)
end if

我想是不是该在什么地方加sql语句,提取参数,再用retrieve提取数据?但百试不得解,请教!

...全文
74 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongp 2002-04-07
  • 打赏
  • 举报
回复
你的bh1,bh2类型是STRING吧!串直接进行'<','>'比较不安全,你最好换成数值型比较!
TianChong 2002-04-07
  • 打赏
  • 举报
回复
又是老毛病,请用"="替换所有"OD",再用""(空白)替换"OA",还有你那段密码修改的代码,我帮你改好了,你去看看吧.

另外上面有一句:dw_manreport.retrieve(double(ls_start),double(ls_end)),我是假设你的检索参数的类型为:number,如果是string则请用:dw_manreport.retrieve(ls_start,ls_end),最后,请尽量少用全局变量,这样只会浪费系统资源并且会降低程序的运行性能.
仗剑天涯,孤影觅芳菲.
TianChong 2002-04-07
  • 打赏
  • 举报
回复


//将下面这一段修改////////////////////////////
bh1=em_1.text0D bh2=em_2.text
0A //结束编号应大于起始编号0D if bh1 > bh2 then
0A messagebox("系统提示","输入编号错误,请重新输入.")
0Aelse
0A dw_manreport.settransobject(sqlca)
0A dw_manreport.retrieve(bh1,bh2)
end if
0D //修改以下:
//首先修改em_1、em_2的maskdatatype(在它们各自的属性页里)设为:"numericmask!",再在mask框里自己手工输入:"######"(最大数字是多少位请输多少位,现在是6位。)这样修改之后,就能限制它只能输入数字,
//现在是程序段了
0A string ls_start3D"",ls_end="" //不必使用全局变量.
ls_start3Dem_1.text
ls_end3Dem_2.text
//判断em_1 em_2是否为空.
0A if ls_start="" then0D Messagebox("提示","条件不能为空,请检查! ")
0A em_1.setfocus()
0A return
0A elseif ls_end3D"" then
0A Messagebox("提示","条件不能为空,请检查! ")
0A em_2.setfocus()
0A return
0A end if

0A //结束编号应大于起始编号0D if double(ls_start) > double(ls_end) then
0A messagebox("提示","开始数字不能大于结束数字,请重新输入.")
0A em_1.setfocus()
0A return
else
0A dw_manreport.settransobject(sqlca)
0A dw_manreport.retrieve(double(ls_start),double(ls_end))
end if

0
qahwa 2002-04-06
  • 打赏
  • 举报
回复
我明白了,不是我不清楚,而是我根本就不知道。这几天真是长了好多知识,如果这次可以侥幸过关的话,我会静下心来,好好看看书的,不管还用不用pb。谢谢大家了。

jiazhij(雨中漫步)问:我用sql建立了一个q_ ,在程序中该怎么用呢?
qahwa 2002-04-06
  • 打赏
  • 举报
回复
sorrow_arrow(想你一分,就恨你一分) :编号是库表的字段,后边则是定义的数据类型,长度。
banalman 2002-04-06
  • 打赏
  • 举报
回复
全局变量使用欠妥,当检索时,如果字符为空,则不能执行这种字符串的比较运算
因此不会检索出相应的记录。
jiazhij 2002-04-06
  • 打赏
  • 举报
回复
bh1,bh2全局变量没有意义

写成retrieve(100,200) 也行.
jiazhij 2002-04-06
  • 打赏
  • 举报
回复
你没给数据窗口定义变量并且写条件吧.
打开数据窗口,点选数据源(sql)
在菜单上选择语法显示.
然后在那的后面加上你的条件
前提是你必须先建立 bh1,bh2这两个变量(也在他的菜单里)
现在在网吧,没有pb 所以菜单上的英文不记得啦
sorrow_arrow 2002-04-06
  • 打赏
  • 举报
回复
记录字段”编号“设置为: 字段属性:num类型: char长度: 6
这句话没有看懂
qahwa 2002-04-06
  • 打赏
  • 举报
回复
jiazhij(雨中漫步):就是电子工业胡存生的那本书中的一个例子,那过来用,可是不成。
jiazhij 2002-04-06
  • 打赏
  • 举报
回复
不太明白你的意思,如果想实现数据窗口加条件显示.
我知道有两个办法
1)打开数据窗口,点选数据源(sql)
在菜单上选择语法显示.
然后在那的后面加上你的条件select ..from .. where bh>:bh1 and bh<"bh2
前提是你必须先建立 bh1,bh2这两个变量(也在他的菜单里)
2)在程序中读取他的数据窗口的sql语句,(因为现在是在网吧,不在公司,手边没有资料,所以可能有些函数拼写的不正确)str_sql=dw_manreport.sqlselect().

修改str_sql.(调试程序,看看str_sql的值然后改吧) .最后用setsqlselect()
再retrieve()

(上面的函数不保证真确,大致差不多,翻翻资料看看就行)

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧