Ошибка доступа 3043 (доступ к сети прерван) при использовании кода модуля для импорта - PullRequest
0 голосов
/ 10 января 2019

Я новичок в Access, а также в VB, поэтому, пожалуйста, потерпите меня.

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

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

Кто-нибудь знает, почему я получаю эту ошибку только при использовании кода (выполняется через макрос), и как я могу диагностировать проблему для себя в будущем?

Или, возможно, лучший способ автоматизировать импорт данных? Это был первый метод, который появился у меня в голове после небольшого копания, поэтому, если есть лучший способ приблизиться к этому, я все для изучения.

Фрагмент кода для справки (если я использую плохие методы или делаю что-то не так, укажите это):

Public Function ImportAllTbls(sExtDbPath As String, sExtDbName As String, sExtDbPass As String)
    On Error GoTo Error_Handler

    Dim tdf As DAO.TableDef
    Dim acc As Access.Application
    Dim db As DAO.Database
    Dim fullDbPath As String

    fullDbPath = sExtDbPath & "\" & sExtDbName

    Set acc = New Access.Application
    acc.Visible = True
    acc.OpenCurrentDatabase fullDbPath, False, sExtDbPass
    Set db = acc.CurrentDb()

    For Each tdf In db.TableDefs 'Loop through all the table in the external database
        If Left(tdf.Name, 4) <> "MSys" Then 'Exclude System Tables
            On Error GoTo Error_Handler
            acc.DoCmd.TransferDatabase acImport, "Microsoft Access", fullDbPath + ";pwd=" + sExtDbPass, acTable, tdf.Name, tdf.Name, False, False
        End If
    Next tdf
    db.Close
    Set db = Nothing

Exit Function

Error_Handler:
    MsgBox "MS Access has generated the following error" & vbCrLf & vbCrLf & "Error Number: " & _
    Err.Number & vbCrLf & "Error Source: ImportAllTbls" & vbCrLf & "Error Description: " & _
    Err.Description, vbCritical, "An Error has Occured!"
    Exit Function
End Function

1 Ответ

0 голосов
/ 11 января 2019

не уверен, что акк нужен, вы можете попробовать просто:

DoCmd.TransferDatabase acImport, "Microsoft Access", fullDbPath + "; pwd =" + sExtDbPass, acTable, tdf.Name, tdf.Name, False, False Конец, если

Этот синтаксис очень подозрительный: + "; pwd =" + sExtDbPass

Я бы предложил вам вручную ввести путь и пароль; вместо того, чтобы называть это - просто проверкой работоспособности, чтобы заставить его работать хотя бы ..... а затем провести дополнительные исследования правильного синтаксиса вашего утверждения Where относительно PW.

...