Как мне обработать "Неопределенная функция 'InStrRev' в выражении."при подключении к базе данных MSAccess и выполнении SQL в VBA? - PullRequest
0 голосов
/ 26 ноября 2018

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

Sub ReassignPostScript()
' Variable Declaration Start
    Dim MyConn, objRecordSet
    Dim sSql
    Dim myfd 'folder path for files (use network paths when available!)
    myfd = "Path\To\Database"
    Dim mydb 'For referencing a database
    mydb = "DatabaseName.accdb"
' Variable Declaration End

' Setting Environment and database connection start
    Set MyConn = CreateObject("ADODB.Connection")
    MyConn.Provider = "Microsoft.ACE.OLEDB.12.0;"
    MyConn.Open myfd & "\" & mydb

' Setting SQL statment to null
    sSql = ""
' Query to update tblName eCRM Activity String
    sSql = "UPDATE tblName SET tblName.InnoLog = Trim(Mid([InnoLog],InStr([InnoLog],' ')+1,(InStrRev([InnoLog],' ')+1)-(InStr([InnoLog],' ')+1))) " & _
    "WHERE (((tblName.InnoStatus) Like '%S:CRM_USERFACE:006%') and ((tblName.InnoLog) Like 'Transaction%') );"
    MyConn.Execute (sSql)

End Sub

Часть, которую я пытаюсь выполнить, является средней частью этой строки,между двумя пробелами midstring

Любая помощь / совет, который вы все могли бы предоставить, будет принята с благодарностью.

Спасибо!

1 Ответ

0 голосов
/ 26 ноября 2018

Спасибо Тиму / Матье за ​​помощь.

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

    Sub eCRMReassignPostScript()
'Option Explicit

' Variable Declaration Start
    Dim conn
    Dim MyConn, objRecordSet
    Dim sSql
    Dim myArray, strPoNumber, strSoldto, txtNote, str, myPath
    Dim myfd 'folder path for files (use network paths when available!)
    myfd = "\\knx-fs1.na.ad.whirlpool.com\Team\TELESERV\Continuous Improvement Db Files\Returns"
    Dim mydb 'For referencing a database
    mydb = "ReturnsToLoad.accdb"
    myPath = myfd & "\" & mydb
' Variable Declaration End

    ' Have to open database to execute macro, since it can't be called from the connection
    Dim strDatabasePath As String
    Dim appAccess As Access.Application
    strDatabasePath = myPath
    Set appAccess = New Access.Application
    With appAccess
        Application.DisplayAlerts = False
        .OpenCurrentDatabase strDatabasePath
        .DoCmd.OpenQuery "qryeCRMActivityStringUpdate"
        .Quit
    End With
    Set appAccess = Nothing

    ' Setting Environment and database connection start
    Set MyConn = CreateObject("ADODB.Connection")
    MyConn.Provider = "Microsoft.ACE.OLEDB.12.0;"
    MyConn.Open myfd & "\" & mydb

    ' Setting SQL statment to null
    sSql = ""
    ' Query to update tblName eCRM Activity String
    sSql = "UPDATE tblName INNER JOIN dbo_tblInnoweraReturns ON (tblName.ORDERACT = dbo_tblInnoweraReturns.ORDERACT) AND (tblName.Status = dbo_tblInnoweraReturns.Status) SET dbo_tblInnoweraReturns.Status = 'eCRM Reassigned - ' & [dbo_tblInnoweraReturns].[Channel], dbo_tblInnoweraReturns.CompletedOn = Now(), dbo_tblInnoweraReturns.CompletedBy = 'INNOWERA - REASSIGNED', dbo_tblInnoweraReturns.CompletedByTeam = 'INNOWERA - REASSIGNED', dbo_tblInnoweraReturns.CompletedByChannel = 'INNOWERA - REASSIGNED';"
    MyConn.Execute (sSql)

    ' Setting SQL statment to null
    sSql = ""
    ' Query to delete from local table where Activities are made
    sSql = "DELETE tblName.*, tblName.InnoStatus " & _
    "FROM tblName " & _
    "WHERE (((tblName.InnoStatus)='S:CRM_USERFACE:006'));"
    MyConn.Execute (sSql)

DoCmd.SetWarnings False

Set MyConn = Nothing
Set mydb = Nothing

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...