使用带参数的存储过程作为DataWindow的数据源,在MS SQL Server 2000下没有问题,单身在MS SQL Server 7.0下却出现错误,说什么“select ,”之类的错误,faint!
开发环境:Windows 2000 + PB8.02 + MS SQL Server 2000/7.0
有没有其他人也碰到过这个问题,我找不到问题的根源,晕了!!!
...全文
637打赏收藏
没有道理的问题:PB中的DataWindow调用存储过程在不同版本下的问题?
使用带参数的存储过程作为DataWindow的数据源,在MS SQL Server 2000下没有问题,单身在MS SQL Server 7.0下却出现错误,说什么“select ,”之类的错误,faint! 开发环境:Windows 2000 + PB8.02 + MS SQL Server 2000/7.0 有没有其他人也碰到过这个问题,我找不到问题的根源,晕了!!!
谢谢大家的讨论,我的存储过程很大,问题奇怪的地方就在于存储过程在在MS SQL Server 7.0中的查询分析器中执行没有问题(带参数),结果完全正确!没有错误!!但就是在使用MS SQL Server 7.0的同时在PB中用DataWindow绑定调用就出问题。调用的代码很简单:就是在DataWindos的Retrieve()方法中带一个参数,从理论上说应该没有问题,因为在MS SQL Server 2000下可以正常执行。
所以我估计问题的出现未必在于MS SQL Server 7.0的Server上,不知大家还有什么高见?
这个问题弄得我很烦恼,难度非要用MS SQL Server 2000????
不过ghost_old(PB初级程序员)说的方法也许可以一试
--------------
(调用的错误信息大概意思是select错误)
我的存储过程如下:
declare @iStNum int --当前数据库中站的数目
declare @i int
declare @strDataSql varchar(2000) --雨量数据sql语句
set nocount on
set @HourDiv = 1 -- 时间间隔
/*检索的时间*/
if @dtRetrieve = ''
begin
set @dtToday = getdate()
end else
begin
set @dtToday = cast(@dtRetrieve + ' 08:00:00' as datetime)
end
/*获取站的数目*/
set @iStNum = (select count(*) from V_STATION_rain)
/*获取起始日期*/
if datepart(hour,getdate()) < 8
begin
set @dtStart = convert(char(10),dateadd(day,-1,@dtToday),120) + ' 08:00:00'
end else
begin
set @dtStart = convert(char(10),@dtToday,120) + ' 08:00:00'
end
set @iCount = 0
set @dtCurr = @dtStart
WHILE @iCount < 24 BEGIN
/*计算当前时间段的结束时间*/
set @dtEnd = dateadd(hour,@HourDiv,@dtCurr)
set @i = @iStNum --重置站数循环变量
/*重置数据sql语句*/
set @strDataSql = "insert into #tempdb1 values('"
set @strDataSql = @strDataSql + convert(char(23),@dtCurr,121) + "','" + convert(char(23),@dtEnd,121) + "'"
--print 'ada' + @strDataSql
/*----------------------- 获取所有雨量站 ---------------------------- */
DECLARE CUR_station CURSOR FOR --建立游标
SELECT stcd,stnm FROM V_STATION_rain
order by stcd
OPEN CUR_station --打开游标
WHILE 1=1 begin --按记录读出[雨量测站]表的所有站
FETCH NEXT FROM CUR_station INTO @iStcd,@strStnm
IF @@FETCH_STATUS <> 0
BREAK
--print 'aaa' + @strStnm
/*获取每个站当前时间段的数据*/
set @fDtRn = (select sum(DTRN) from RAINHOUR where ENDTM >= @dtCurr and ENDTM < @dtEnd and stcd=@iStcd)
if @fDtRn = null
begin
set @strDataSql = @strDataSql + ",NULL"
end else
begin
if @fDtRn = 0
begin --数值为0时空处理
set @strDataSql = @strDataSql + ",NULL"
end else
begin
set @strDataSql = @strDataSql + "," + cast(@fDtRn as varchar(10))
end
end
END
/*判断站的完整性*/
while @i < 12
begin
set @strDataSql = @strDataSql + ",NULL"
set @i = @i + 1
end
set @strDataSql = @strDataSql + ")"
exec(@strDataSql)
set @dtCurr = @dtEnd
set @iCount = @iCount + 1 --记录时间段的数目
CLOSE CUR_station
DEALLOCATE CUR_station
END
set nocount off
select
TM = convert(char(5),bgtm,108) + '-' + convert(char(5),endtm,108),
s1,
s2,
s3,
s4,
s5,
s6,
s7,
s8,
s9,
s10,
s11,
s12
from #tempdb1
GO