VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 779|回复: 4

VB调用存储过程

[复制链接]

4

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-6 20:50:01 | 显示全部楼层 |阅读模式
CREATE PROCEDURE  sp_compare  AS
IF  (select name from sysobjects where name='TAB_RESULT_FINACE')<>''
      DROP TABLE TAB_RESULT_FINACE

      SELECT 出庫類別, 出庫單號碼, [SO No#], 客戶編碼, 客戶名稱, 客户PO号, 擔當者,
          [Invoice Date], 幣別, 金额, 狀態 INTO #TAB_ACCOUNT
      FROM TAB_ACCOUNT WHERE (狀態 = N'未開票') OR (狀態 = N'開票中')

     SELECT TAB_INVOICE.[客户编  号], TAB_INVOICE.[客户名    称],
      TAB_INVOICE.[(期末余额)本币] AS 预收余额, sum(case when 金额 is null then 0 else 金额 end)
      AS 开票金额, (sum([(期末余额)本币])+sum(case when 金额 is null then 0 else 金额 end)) as 预付款余额
      INTO TAB_RESULT_FINACE
      FROM TAB_INVOICE LEFT OUTER JOIN #TAB_ACCOUNT ON
      TAB_INVOICE.[客户编  号] = #TAB_ACCOUNT.客戶編碼
      GROUP BY TAB_INVOICE.[客户编  号], TAB_INVOICE.[客户名    称],TAB_INVOICE.[(期末余额)本币]

      SELECT TAB_RESULT_FINACE.[客户编  号], TAB_RESULT_FINACE.[客户名    称],
      TAB_RESULT_FINACE.预付款余额 AS 'U8 预付款余额', SUM(TAB_RESULT.预付款余额) AS 'CS预付款余额',
      (CASE WHEN TAB_RESULT_FINACE.预付款余额=SUM(TAB_RESULT.预付款余额)  THEN 'TRUE' ELSE 'FALSE' END)  AS  '比较值'
      FROM TAB_RESULT_FINACE LEFT OUTER JOIN
      TAB_RESULT ON TAB_RESULT_FINACE.[客户编  号] = TAB_RESULT.[客户编  号]
      GROUP BY TAB_RESULT_FINACE.[客户编  号], TAB_RESULT_FINACE.[客户名    称],TAB_RESULT_FINACE.预付款余额
GO

我的存储过程是这样的,我现在发现是在VB中执行存储过程有问题,存储过程本身没问题,我在查询分析器中都调用过,可是在VB中调用就是不行,请帮我看一下是什么问题!

Set oRst = New ADODB.Recordset
cn1.CursorLocation = adUseClient
Set oRst = cn1.Execute("exec sp_compare")
    spdDetail.MaxRows = 0
    Do While Not oRst.EOF
        spdDetail.MaxRows = spdDetail.MaxRows + 1
        spdDetail.Row = spdDetail.MaxRows
        spdDetail.SetText 1, spdDetail.Row, oRst.Fields(0)
        spdDetail.SetText 2, spdDetail.Row, oRst.Fields(1)
        spdDetail.SetText 3, spdDetail.Row, oRst.Fields(2)
        spdDetail.SetText 4, spdDetail.Row, oRst.Fields(3)
        spdDetail.SetText 5, spdDetail.Row, oRst.Fields(4)
        oRst.MoveNext
    Loop

我已经调用了存储过程,我要把执行存储过程SELECT的数据读入表格控件,可是老是说数据集对象ORST没有打开?
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-10 15:54:01 | 显示全部楼层
UP
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-17 20:36:01 | 显示全部楼层
orst  要定義吧...來個 dim oRst as ADODB.Recordset
回复

使用道具 举报

0

主题

21

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-1-21 12:45:01 | 显示全部楼层
在存储过程上加上下面两句试试,
SET NOCOUNT ON
SET ANSI_WARNINGS OFF

还有这个存储过程太复杂了,最好只是一个简单返回数据集的。


回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-24 06:09:01 | 显示全部楼层
程序与SQL服务器之间有个响应时间的问题
可以将调用存储过程的语句这样来写

    Dim adocomm As New ADODB.Command
    Set adocomm.ActiveConnection = ConnSrv
    adocomm.CommandText = "sp_compare"
    adocomm.CommandType = adCmdStoredProc
    adocomm.Execute
    ReturnValue = adocomm.Parameters(0)
    If ReturnValue = 0 Then
      '执行
    Else
      '退出
    End If
    Set adocomm = Nothing

回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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