起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: cdz0451

【搞定】存储过程错误

[复制链接]
发表于 2007-9-18 14:10:17 | 显示全部楼层
上面的代码我在SQLServer下测试通过
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-18 14:10:35 | 显示全部楼层
新建了个窗体
将上面的代码拷贝过去,现在调试通过了!可是又有个问题
就是如何获得返回的 SELECT  结果集
将该结果集和DATAGRID 绑定,显示出来? 急急急急急急急急急急
回复 支持 反对

使用道具 举报

发表于 2007-9-18 14:13:05 | 显示全部楼层
procedure TMainForm.Button12Click(Sender: TObject);
var
   vProc:TStoredProcDataSet;
   vUserId:string;
   vDepId:string;
   lDataParam1, lDataParam2: TDataParam;
begin
     vUserId := 'TEST';
     vDepId := 'KJJYC';
     vProc := TStoredProcDataSet.Create(self);
     try
        vProc.ConnectionString := 'DATABASEURL=Biz:\SYSTEM\SYSTEM.DATABASE';
        vProc.StoredProcName := 'proc_TotalExport';
        //vProc.Params.Clear();

        {lDataParam1 := vProc.Params.CreateParam(TFieldType.ftString, '@DepId', TParamType.ptInput);
        lDataParam1.AsString :=vDepId;

        lDataParam2 := vProc.Params.CreateParam(TFieldType.ftString, '@UserId', TParamType.ptInput);
        lDataParam2.AsString :=vUserId;}
        vProc.Params.ParamByName('@DepId').AsString := vDepId;
        vProc.Params.ParamByName('@UserId').AsString := vUserId;

        vProc.Active := True;
        business.Forms.Dialogs.showmessage('OK');
        [B]DataSource1.DataSet := vProc;[/B]
        [B]DataGrid1.DataSource := DataSource1;[/B]
     finally
        lDataParam1.Free();
        lDataParam2.Free();
     end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-18 14:17:51 | 显示全部楼层
没有反应!是不是还需要设置啥?
回复 支持 反对

使用道具 举报

发表于 2007-9-18 14:18:32 | 显示全部楼层
不会啊,我测试通过了阿
你界面上放那两个控件没有?
DataSource1  DataGrid1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-18 14:20:16 | 显示全部楼层
DataGrid 和 DataSource
放了
回复 支持 反对

使用道具 举报

发表于 2007-9-18 14:22:40 | 显示全部楼层
我这儿怎么一点问题没有呢?
是否你的存储过程报错了阿??
执行之前:

Snap1.png

2.79 KB, 下载次数: 144

回复 支持 反对

使用道具 举报

发表于 2007-9-18 14:23:02 | 显示全部楼层
执行之后

Snap2.png

7.49 KB, 下载次数: 144

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-18 14:33:29 | 显示全部楼层
成功了!可是又有新问题了:
修改存储过程如下:
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'proc_TotalExport' AND type = 'P')
   DROP PROCEDURE proc_TotalExport
GO
Create Proc proc_TotalExport
(
@DepId VARCHAR(32),
@UserId VARCHAR(32)
)
AS
BEGIN
        CREATE TABLE #tblTemp
        (
                YPBH                 VARCHAR(32) NULL,
                BGYPLB        VARCHAR(32) NULL,
                SL                   INT                                         NULL,
                GG      VARCHAR(32) NULL,
                YPSX    VARCHAR(32) NULL
        )       
        DECLARE @ExportNum INT
        DECLARE @InportNum INT
        DECLARE @Id                 VARCHAR(32)
        DECLARE @BGYPLB VARCHAR(32)
        DECLARE @GG     VARCHAR(32)
        DECLARE @YPSX   VARCHAR(32)
       
        DECLARE Cur_Find CURSOR FOR
                SELECT YPBH FROM ZMLS
                        WHERE CZZBM=@DepId AND CZZ=@UserId
                                AND CZLX='2007016001' AND SHJG='2007001001'
                        GROUP BY YPBH
                       
OPEN Cur_Find
FETCH NEXT FROM Cur_Find INTO @Id

WHILE @@FETCH_STATUS = 0
BEGIN
         
         SELECT @YPSX=YPSX,@GG=GG,@BGYPLB=BGYPLB FROM KCB
                         WHERE JLBH=@Id
       
         SELECT @ExportNum=SUM(SL) FROM ZMLS
                         WHERE CZZBM=@DepId AND CZZ=@UserId
                                 AND CZLX='2007016001' AND SHJG='2007001001'
                           AND YPBH=@Id
                           
         SELECT @InportNum=SUM(SL) FROM ZMLS
                         WHERE CZZBM=@DepId AND CZZ=@UserId
                                 AND CZLX='2007016002' AND SHJG='2007001001'
                                 AND YPBH=@Id
                                
         IF @ExportNum > @InportNum
         BEGIN
                         INSERT INTO #tblTemp(YPBH,BGYPLB,SL,GG,YPSX)
                                         VALUES(@Id,@BGYPLB,@ExportNum-@InportNum,@GG,@YPSX)
         END               
         ELSE IF @InportNum is NULL
         BEGIN
                         INSERT INTO #tblTemp(YPBH,BGYPLB,SL,GG,YPSX)
                                         VALUES(@Id,@BGYPLB,@ExportNum,@GG,@YPSX)                 
         END
         FETCH NEXT FROM Cur_Find INTO @Id
END
CLOSE Cur_Find
DEALLOCATE  Cur_Find

return SELECT * FROM #tblTemp
  
END
GO

调用后,出现错误如下:
error occur during invoke getRecords method,The executeQuery method must return a result set.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-18 14:39:29 | 显示全部楼层
是不是无法 在存储过程中 对临时表 进行提取呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 20:56 , Processed in 0.050548 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表