这个问题谁能解决?急死人了。

时间:2021-02-28 08:18:11

declare @sigdays decimal(18, 4)
declare @rate decimal(18, 4)
declare @qty decimal(18, 4)
declare @goods int
declare @days int

select @goods=isnull('110100113',0)
select @days=isnull('',0)

select @sigdays=isnull(days,0) from sig where englishflag='-'
select @sigdays=isnull(@sigdays,0)

select @rate=isnull(rate,1) from goods where goodsid=@goods
select @rate=isnull(@rate,1)

select @qty=1.0000 * @days * @sigdays
select @qty=ceiling(@qty/@rate)
--select @qty
select @qty=1
select @qty

用动态游标或者动态生成数据窗口都失效。类似的问题哪位大侠遇到过?
动态游标 后 再次访问 非法操作。数据窗口 则无法取值

12 个解决方案

#1


晕,这样的需要用到动态游标么?很简单的一个select 语句就搞定了啊!

#2


我也觉得直接用SQL语句即可.

#3


SQL语句可以搞定。

#4


declare @sigdays decimal(18, 4)
declare @rate decimal(18, 4)
declare @qty decimal(18, 4)
declare @goods int
declare @days int

select @goods=isnull('110100113',0)
select @days=isnull('',0)

select @sigdays=isnull(days,0) from sig where englishflag='-'
select @sigdays=isnull(@sigdays,0)

select @rate=isnull(rate,1) from goods where goodsid=@goods
select @rate=isnull(@rate,1)

select @qty=1.0000 * @days * @sigdays
select @qty=ceiling(@qty/@rate)
--select @qty
select @qty=1
select @qty


这个代码乱的,不需要返回到客户端的,请换select为set,或者前面加set nocount on 

#5


看不懂,帮顶

#6


我看懂你的意思是要通过多步骤计算到@qty的值并返回显示。

你这个写成一个procedure即可。代码应该没错。如果你这些语句在查询分析器内调试能得到@qty的结果值,那只需要写成procedure即可。dw可以返回存储器的结果。


4#的说法不对吧??
select @var = 1+2
或者
select @var = col_name from table_xx

set @var = 1+2
等都可以为@var赋值。并不存在你说的问题。lz的写法无错误。

#7


补充:
写成存储器,并new一个dw并使用该存储器做数据源即可返回结果。

类似:求连续6个月消费增幅超过30%的客户列表  等复杂点的问题,并不是一句select即可搞定。它需要一些列的过程后才能得到结果。





---------------------------------------------------
PB混淆器(5-12) http://chengg0769.download.csdn.net/

#8


回楼上,使用procedure是没有问题的。不过,PB连这个比较简单的sql作为数据源都搞不定。(最要命的是有时候是可以的,有时候又是不可以的,十分不稳定。)而动态游标的话则更是非法操作。

#9


补充一下,我用的是pb9.03 7610的版本。但是pb.exe文件的信息仍然显示的是5507.不知为何。

#10


PB是支持Proc SQL作为数据库源的,不是PB搞不定,是需要你变通一下,
"有时候是可以的,有时候又是不可以的,十分不稳定",只是你自己的原因,
SELECT 返回需要有明确的列名,变通下就行.

#11


如8#的回复,我倒是没在pb直接用过(你这是内嵌sql做游标吗?)

10#的意思我理解,可能会存在这个问题!!因为sql内嵌好像要具体的表和栏位名称才可以。

从层的分离看。写在procedure中有助于你的程序分层。这样后台对前台是一个相对固定的接口。修改前台不影响后台,修改存储器不影响前台程序。。。我是如此理解的。也是在几年的项目中奉行的办法。

#12


关于9#的版本问题。补丁它不一定是补在pb。exe上的。一般都是在menu-help-about powerbuilder中查看的。

#1


晕,这样的需要用到动态游标么?很简单的一个select 语句就搞定了啊!

#2


我也觉得直接用SQL语句即可.

#3


SQL语句可以搞定。

#4


declare @sigdays decimal(18, 4)
declare @rate decimal(18, 4)
declare @qty decimal(18, 4)
declare @goods int
declare @days int

select @goods=isnull('110100113',0)
select @days=isnull('',0)

select @sigdays=isnull(days,0) from sig where englishflag='-'
select @sigdays=isnull(@sigdays,0)

select @rate=isnull(rate,1) from goods where goodsid=@goods
select @rate=isnull(@rate,1)

select @qty=1.0000 * @days * @sigdays
select @qty=ceiling(@qty/@rate)
--select @qty
select @qty=1
select @qty


这个代码乱的,不需要返回到客户端的,请换select为set,或者前面加set nocount on 

#5


看不懂,帮顶

#6


我看懂你的意思是要通过多步骤计算到@qty的值并返回显示。

你这个写成一个procedure即可。代码应该没错。如果你这些语句在查询分析器内调试能得到@qty的结果值,那只需要写成procedure即可。dw可以返回存储器的结果。


4#的说法不对吧??
select @var = 1+2
或者
select @var = col_name from table_xx

set @var = 1+2
等都可以为@var赋值。并不存在你说的问题。lz的写法无错误。

#7


补充:
写成存储器,并new一个dw并使用该存储器做数据源即可返回结果。

类似:求连续6个月消费增幅超过30%的客户列表  等复杂点的问题,并不是一句select即可搞定。它需要一些列的过程后才能得到结果。





---------------------------------------------------
PB混淆器(5-12) http://chengg0769.download.csdn.net/

#8


回楼上,使用procedure是没有问题的。不过,PB连这个比较简单的sql作为数据源都搞不定。(最要命的是有时候是可以的,有时候又是不可以的,十分不稳定。)而动态游标的话则更是非法操作。

#9


补充一下,我用的是pb9.03 7610的版本。但是pb.exe文件的信息仍然显示的是5507.不知为何。

#10


PB是支持Proc SQL作为数据库源的,不是PB搞不定,是需要你变通一下,
"有时候是可以的,有时候又是不可以的,十分不稳定",只是你自己的原因,
SELECT 返回需要有明确的列名,变通下就行.

#11


如8#的回复,我倒是没在pb直接用过(你这是内嵌sql做游标吗?)

10#的意思我理解,可能会存在这个问题!!因为sql内嵌好像要具体的表和栏位名称才可以。

从层的分离看。写在procedure中有助于你的程序分层。这样后台对前台是一个相对固定的接口。修改前台不影响后台,修改存储器不影响前台程序。。。我是如此理解的。也是在几年的项目中奉行的办法。

#12


关于9#的版本问题。补丁它不一定是补在pb。exe上的。一般都是在menu-help-about powerbuilder中查看的。