Что ж, поскольку sql отправляется в Oracle «сырым» способом, то, конечно, база данных на стороне сервера не знает, что делать с функцией VBA.
Итак, одним из возможных решений было бы воссоздание функции VBA как функции оракула масштабирования.
Однако, поскольку данная функция не имеет параметров, мы можем предположить, что функция возвращает заданное значение - чертовски близко к статическому или значение, которое вы хотите / хотите передать оракулу.
Подход означает, что мы должны разрешить функцию на стороне клиента ДО того, как мы попытаемся использовать или выполнить этот запрос PT.
Итак, я рекомендую вам взять вышеупомянутый запрос PT и скопировать его. (сторона доступа). Теперь у вас есть два запроса PT.
Теперь в коде мы берем sql, модифицируем его, помещаем его во 2-й запрос, и теперь вы можете запускать и использовать этот проходной запрос (для отчета, наборов записей, форм или чего-либо еще)
Итак, ваш код будет выглядеть так:
Sub MyOraclePT()
Dim strSQL As String
strSQL = CurrentDb.QueryDefs("PT1").SQL ' <-- this change
strSQL = Replace(strSQL, "GET_QAQC_JOB()", GET_QAQC_JOB())
CurrentDb.QueryDefs("PT2").SQL = strSQL
' now you can open or use this query.
'
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("PT2")
' or open a report/form based on that PT2 query
' such as
DoCmd.OpenReport "MyReport", acViewPreview
End Sub
Итак, мы использовали два запроса PT, потому что первый - это sql, который у вас есть, как указано выше. Затем мы модифицируем второй запрос PT, чтобы заменить значение функции фактическим значением функции.
Выше предполагается, что функция является числом (а не строкой). Если столбец CC_QAQC_SPEC_MASTER.JOBNUMBER был строкой, то вы могли бы / могли бы заключить одинарные кавычки вокруг имени функции в первом запросе PT.
Я также отмечаю ошибку / синтаксическую ошибку, как у вас есть:
WHERE
CC_QAQC_SPEC_MASTER.JOBNUMBER)=GET_QAQC_JOB()
Вверху я вижу беспризорное ")" сверху - вы хотите это исправить.