簡體   English   中英

VBA 函數返回 SQL 值預期函數

[英]VBA Function Return SQL Value Expected Function

我有一個 MS Access 數據庫(我不是出於不使用 Access 的原因)。

我正在嘗試運行 VBA 子程序以根據參數(這是查詢結果)循環執行一些查詢。

有一個查詢對表中的列值求和。 我需要使用 IF ELSE 語句在 VBA 中使用函數返回它以繼續。

Public dbs As DAO.Database

Sub Main()

Dim SumCheck As Double
Set dbs = CurrentDb

GoTo LoopCheck

LoopCheck:
    SumCheck = SOSum(dbs)
    If SumCheck = 0 Then
        GoTo EndPart
    Else
        GoTo STPTGet
    End If

代碼不會從這里過去,而是當我進入代碼時,它會在此函數處停止並給出錯誤“預期函數或值”

Public Function SOSum(db As DAO.Database) As Double
    Dim sumg As Double
    Set db = dbs
    Set sumg = db.Execute("LoopCheck")
    Set db = Nothing
    Set SOSum = sum

End Function

循環檢查查詢很簡單

SELECT SUM(Qty)
FROM SO;

查詢在 Access 中工作,它應該只檢查它是否為 0。

這是我的第一篇文章,所以請原諒任何不正確的格式或明顯丟失的信息。 任何幫助是極大的贊賞。

謝謝

您的代碼存在一些問題。

首先,看起來您將dbs作為公共數據庫對象。 因此,您無需將其傳遞給您的函數。 設置好后就可以使用了。

接下來, db.execute方法將只運行操作查詢(如 INSERT、UPDATE、DELETE...)並且它不返回任何內容。 您需要使用記錄集來獲取查詢結果。

最后,您的函數返回一個Double ,因此您不應使用Set關鍵字返回該值。

放在一起,我們有這個:

一個數據庫對象全局聲明:

Public dbs as DAO.Database

A MAIN Sub(問題中僅給出了部分內容):

Sub Main()

Dim SumCheck As Double
Set dbs = CurrentDb

'...

SumCheck = SOSum

'...

還有你的 SOSum 函數:

Public Function SOSum() As Double
    Dim sum As Double
    Dim rs As DAO.Recordset

    Set rs= dbs.OpenRecordset("LoopCheck")
    sum = rs(0).Value
    Set rs = nothing

    SOSum = sum

End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM