Что ж, поскольку sql отправляется в Oracle «необработанным», то, конечно, серверная база данных не знает, что делать с функцией VBA.
Итак, одним из возможных решений было бы воссоздать функцию VBA как функцию оракула масштабирования.
Однако, поскольку данная функция не имеет параметров, мы можем предположить, что функция возвращает заданное значение - чертовски близко к статическому, или значение, которое вы хотите / хотите передать в oracle.
Таким образом, этот подход означает, что мы должны разрешить функцию на стороне клиента ДО того, как мы попытаемся использовать или выполнить этот запрос PT.
Итак, я рекомендую вам взять приведенный выше запрос PT и скопировать его. (сторона доступа). Теперь у вас есть два запроса PT.
Теперь в коде мы берем sql, модифицируем его, вставляем во второй запрос, и теперь вы можете запустить + использовать этот сквозной запрос (для отчета, наборов записей, форм или чего-то еще)
Итак, ваш код будет выглядеть так:
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()
Выше я вижу случайное ")" - вы хотите это исправить.
person
Albert D. Kallal
schedule
10.05.2019