没有道理的问题:PB中的DataWindow调用存储过程在不同版本下的问题?

evergreen 2002-09-29 12:59:51
使用带参数的存储过程作为DataWindow的数据源,在MS SQL Server 2000下没有问题,单身在MS SQL Server 7.0下却出现错误,说什么“select ,”之类的错误,faint!
开发环境:Windows 2000 + PB8.02 + MS SQL Server 2000/7.0
有没有其他人也碰到过这个问题,我找不到问题的根源,晕了!!!
...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sbks 2002-10-10
  • 打赏
  • 举报
回复
gz
evergreen 2002-10-10
  • 打赏
  • 举报
回复
谢谢大家的讨论,我的存储过程很大,问题奇怪的地方就在于存储过程在在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错误)
我的存储过程如下:

/*************************
* 雨量日报表
* 输出:结果集
* 所有站当天24小时雨量数据,不足补齐
*/
CREATE PROCEDURE up_reportDayRain
(@dtRetrieve char(10)='2002-09-12')
AS

declare @HourDiv int
declare @dtToday datetime--当天时间(需要检索数据的时间)

declare @iStcd int
declare @strStnm sysname
declare @iCount int
declare @dtStart datetime--该报表数据的起始时间
declare @dtCurr datetime--当前时间段的起始时间
declare @dtEnd datetime--当前时间段的结束时间
declare @fDtRn numeric(5)

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)

/*建立临时表,保证至少12列*/
create table #tempdb1(bgtm datetime not null, endtm datetime not null,
s1 numeric(5) null, s2 numeric(5) null, s3 numeric(5) null, s4 numeric(5) null,
s5 numeric(5) null, s6 numeric(5) null, s7 numeric(5) null, s8 numeric(5) null,
s9 numeric(5) null, s10 numeric(5) null, s11 numeric(5) null, s12 numeric(5) null)

/*获取起始日期*/
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
xiaobzg 2002-09-29
  • 打赏
  • 举报
回复
先把存储过程在sql中调试没有问题
把语法贴出来看一看
奇遇 2002-09-29
  • 打赏
  • 举报
回复
贴出来看看
evergreen 2002-09-29
  • 打赏
  • 举报
回复
upup!!
大家帮忙想想办法也行呀,出了力就有分的!!
zqllyh 2002-09-29
  • 打赏
  • 举报
回复
可能是数据转换的错误吧?
把数值类型的全换成FLOAT看看。
ghost_old 2002-09-29
  • 打赏
  • 举报
回复
请把 pb8 /server 下的PBSYC.SQL and PBSYC2.SQL 在MS SQL Server 7.0执行一遍.问题得到圆满解决.
源码链接: https://pan.quark.cn/s/a4b39357ea24 ### Ubuntu 用户磁盘空间分配与 Linux 硬盘分区方案深入剖析 #### 标题与描述的核心知识要点说明 本文件将系统性地阐释在 Ubuntu 操作系统如何为用户科学地分配磁盘空间,并深入分析适用于 Linux 的硬盘分区策略。文件不仅会介绍基础的目录结构及其功能,还会提供具体的分区指导以及在实际操作过程需要留意的事项。 #### 目录结构及其功能说明 - **/bin**:系统常用基础命令的存储位置。 - **/boot**:包含启动时所需文件,例如内核镜像和初始化脚本等。 - **/dev**:存放设备文件。 - **/etc**:存储系统配置信息。 - **/home**:用户个人目录,每个用户拥有独立的子目录。 - **/lib**:存放运行二进制文件所需的共享库。 - **/mnt**:用于临时挂载其他文件系统的目录,可用于挂载软盘或 CD-ROM 设备。 - **/proc**:虚拟文件系统目录,存储当前运行内核的相关信息。 - **/root**:超级用户(root)的主目录。 - **/sbin**:系统管理程序的存放位置。 - **/tmp**:临时文件存储的目录。 - **/usr**:存放只读数据,包括应用程序的可执行文件和文档等。 - **/var**:存储可变数据文件,例如日志文件和邮件队列等。 - **/X11R6**:X Window 系统的安装路径。 #### 硬盘分区策略分析 文件强调,在 Linux 环境下进行硬盘分区时需要综合考量多个因素,以确保系统的稳定运行和性能表现。以下是一些关键的分区建议: 1. **/boot ...
代码转载自:https://pan.quark.cn/s/4f1937b2c732 Quartus Prime是由Altera公司(现已被Intel公司所收购)研发的一款集成化电子设计自动化软件,其主要应用领域在于Field-Programmable Gate Array(现场可编程门阵列)以及Complex Programmable Logic Device(复杂可编程逻辑器件)的设计、仿真、综合、布局布线以及编程等任务。在本案例,所提及的为Quartus Prime 17.1版本的安装程序,该程序内含器件库文件及其他相关组件,适用于Windows 10 64位操作系统环境,并且已有相关测试验证其可用性。 **1. Quartus Prime概述** Quartus Prime是Altera/Intel公司FPGA设计流程的核心工具,它提供了一个集成化的开发平台,支持从设计概念到硬件实现的完整过程。该软件不仅涵盖了逻辑综合、时序分析、仿真、物理设计等基础功能,还包含了高速接口IP核、嵌入式处理器系统、内存资源管理等多种高级特性。 **2. Quartus Prime 17.1版本的新增功能** - QSYS系统构建工具的优化:17.1版本可能对QSYS系统进行了升级,使得系统集成更为便捷,支持更多的外部设备和处理器模型。 - 性能提升:可能增强了综合和布局布线的效率,降低了设计的功耗和面积。 - 新器件支持:可能会增加对最新发布的Altera FPGA和CPLD产品的支持,如Arria 10、Cyclone 10等系列产品。 - 调试功能的改进:可能强化了硬件调试工具,如JTAG调试和软件调试器的性能。 **3. 器件库文件** 器件库文件是Quartu...

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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