存储过程的问题,请大虾帮忙,在线等待中!

海洋‘s 2002-08-23 11:09:31
存储过程的问题,请大虾帮忙,在线等待中!
我想根据我输入的数据值,从另一个表中取得该表的CW的值,具体如下:

jh ypbh yplx djsd1 djsd2 cw
大北1 556106 岩心 5561.06
大北1 557218 岩心 5572.18
大北1 557246 岩心 5572.46
大北1 557256 岩心 5572.56
大北1 557260 岩心 5572.6
大北1 557271 岩心 5572.71
在上边的数据中,Cw的值是通过用户输入djsd1,djsd2的值后,当鼠标移动到CW上时,CW的值自动添加,即从另一个表AZ17中取得,数据如下:

jh djsd2 cw jcgxmc hd djsd2
大北1 200 Q 190.86 200
大北1 3687 N2k 3487 3687
大北1 4342 N1-2k 655 4342
大北1 5283.05 N 5083.05 5283.05
大北1 5283.5 N1j 941.5 5283.5
大北1 5451 E2-3 167.5 5451
大北1 5451 E2-3s 167.5 5451
大北1 5570 XS 5570 5570

当用户输入DJSD1的值为200的时候,CW的值从AZ17中取得Q,那么Q就是该DJSD1和DJSD2所对应的层位。当然,有时候可能是用户只输入一个DJSD1,而DJSD2没有数据,这样也可以
从AZ17中取得CW的值;有时候可能是用户只输入一个DJSD2,而DJSD1没有数据同样CW的值也从Az17中取得。

为此,我写了一个函数,保存在服务器端,如下:
CREATE OR REPLACE FUNCTION get_cw(
v_jhid VARCHAR2, n_djsd number)
RETURN VARCHAR2 IS
v_cw VARCHAR2(20);
sql_stmt VARCHAR2(1000);
BEGIN
sql_stmt:='SELECT cw FROM az17 '||
'WHERE djsd2=(SELECT MIN(djsd2) FROM az17 WHERE djsd2>=:1 AND jh=:2) and rownum=1';
EXECUTE IMMEDIATE sql_stmt INTO v_cw using n_djsd,v_jhid;
RETURN v_cw;
END;
我想在客户端调用这个函数,用来实现上边的功能,代码写在窗口中的DW_1的temChanged事件中呢,还是写在其他什么事件中呢,具体怎么写呢?谢谢
...全文
54 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
smilelhh 2002-09-17
  • 打赏
  • 举报
回复
要写在itemchanged事件中。

string ls_cw,ls_obj
double ld_d

ls_obj = dwo.name
if ls_obj ='cw' then
ld_d = this.getitemnumber(row,'djsd2')
select cw into:ls_cw from table2 where djsd2 =: ld_d;
this.object.cw[row] = ls_cw
end if

试试!!
海洋‘s 2002-08-27
  • 打赏
  • 举报
回复
谁能说说除了使用存储过程外,还有没有其他比较好的方法呢
海洋‘s 2002-08-27
  • 打赏
  • 举报
回复
谁有好的方法和意见啊,写出来,大家共同探讨吗!先谢谢各位了!
ice2water 2002-08-27
  • 打赏
  • 举报
回复
第一,可以不用存储过程,直接在itemchanged事件中写
第二,在存储过程中最好用条件语句进行判断:
if djsd2>0
SELECT cw FROM az17 ...
else
...
bad_good 2002-08-26
  • 打赏
  • 举报
回复
写一个触发器
fakeer 2002-08-25
  • 打赏
  • 举报
回复
劝你不要用存储过程过程作,既麻烦又给服务器增加负担,对多用户并行操作不利,其实用pb里的DataStore(数据存储)做方便得多!现在有的地方根本就不用存储过程写程序!
GUOXY_CN 2002-08-24
  • 打赏
  • 举报
回复
用存贮过程来写吧,基本同意lgh21cn的意见
zuhuisu 2002-08-24
  • 打赏
  • 举报
回复
"是必须有值的,当Djsd1,djsd2都为空的时候,就没有值了"
这种情况和你界面一点关系都没有,不用考虑用什么事件,
在对应表中加一个TRIGGER是最合理的
sfb 2002-08-24
  • 打赏
  • 举报
回复
建议你再增加一个keydown事件
如果djsd2为当前焦点并且按下回车键出发该事件
判断Djsd1,djsd2是否为空,如果不空,造出cw值贴上去,换行
这样输入很方便
lgh21cn 2002-08-24
  • 打赏
  • 举报
回复
最好写成存储过程,PB好像不能调用服务器的函数吧。要写在itemchanged事件中。应该如下所示:
if dwo.name='djsd1' or dwo.name='djsd2' then
声明存储过程
执行存储过程
读查询到的数据
将结果设置到cw列
关闭存储过程
end if
海洋‘s 2002-08-24
  • 打赏
  • 举报
回复
是必须有值的,当Djsd1,djsd2都为空的时候,就没有值了
zuhuisu 2002-08-24
  • 打赏
  • 举报
回复
上面的说法有一问:
当djsd1/2有值是时,CW这个字须是必须有值,还是这个字段的值可以让用户决定有没有?

如果是必须有,在BEFORE insert TRIGGER中设置这个值是比较合理的,
WorldMobile 2002-08-23
  • 打赏
  • 举报
回复
我的QQ

32276311

进来聊

你的问题有些不太清楚
WorldMobile 2002-08-23
  • 打赏
  • 举报
回复
如果数据量不是太大的话,你可以把AZ17做成一个数据窗口,根据用户输入的值把

cw的值取出即可
海洋‘s 2002-08-23
  • 打赏
  • 举报
回复
你好lzp_lrp(lzp),能说说具体代码怎么写吗?谢谢
WorldMobile 2002-08-23
  • 打赏
  • 举报
回复
写在itemfocuschanged中吧,你不是想当焦点移到cw上时才显示cw的值
海洋‘s 2002-08-23
  • 打赏
  • 举报
回复
希望大家提出一些较好的解决方法,谢谢!

1,079

社区成员

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

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