Функция VBA Возвращает значение SQL Ожидаемая функция - PullRequest
0 голосов
/ 11 июля 2019

У меня есть база данных MS Access (у меня нет причин не использовать Access).

Я пытаюсь запустить подпрограмму VBA для циклического перебора некоторых запросов на основе параметра, который является запросом.результат.

Есть запрос, который суммирует значение в таблице для столбца.Мне нужно вернуть это с помощью функции в VBA, использующей оператор IF ELSE для продолжения.

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 или нет.

Это мой первый пост, поэтому извините за неправильное форматирование или явно пропущенную информацию.Любая помощь с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 11 июля 2019

Есть несколько проблем с вашим кодом.

Во-первых, похоже, что у вас есть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...