VBA调用存储过程忽略IF语句

时间:2011-11-04 18:29:06

标签: sql vba

我们正在尝试在Access ADP中调整一些VBA代码,从存储过程中提取数据。存储过程很长,但最后,使用一些if语句来确定要返回的信息。很基本的。我们用两种方式尝试了这些陈述:

IF (@InadDrugId = 7)
BEGIN
    IF (@Table = 1)
    BEGIN
        ... some code section 1
    END
    IF (@Table = 2)
    BEGIN
        ... some code section 2
    END
END

还有:

IF (@InadDrugId = 7 AND @Table = 1)
    BEGIN
        ... some code section 1
    END
IF (@InadDrugId = 7 AND @Table = 2)
    BEGIN
        ... some code section 2
    END

即使我们有@Table = 2,“......某些代码部分1”部分也会触发。有什么想法?

我可以在SSMS中执行此操作:

EXEC dbo.procPathINADforAnnualFDAreportTdrNdr '1/1/2011','12/31/2011',2011,2,1
EXEC dbo.procPathINADforAnnualFDAreportTdrNdr '1/1/2011','12/31/2011',2011,7,2
EXEC dbo.procPathINADforAnnualFDAreportTdrNdr '1/1/2011','12/31/2011',2011,26,1

得到3个不同的结果,但是,当VBA这样做时,它总是给出相同的结果,并且我知道它传递了正确的参数。

2 个答案:

答案 0 :(得分:0)

你只是错过了那个吗?

IF-THEN-ELSE语句的语法是:

If condition_1 Then
   result_1
ElseIf condition_2 Then
  result_2
...
ElseIf condition_n Then
   result_n
Else
  result_else
End If

答案 1 :(得分:0)

由于您的问题并不是非常具体的说明在ADP中使用SP的确切程度,这将是一个疯狂的猜测......请看一下这个Q& A:

SQL Server 2005: “Protecting” stored procedures from FMTONLY mode used by MS Access

当Access在FMTONLY模式下呼叫您的SP时,您是否有可能出现这种情况?因为这恰恰是所有IF“神奇地”停止工作的时候,除非你明确规避FMTONLY。