Напишите код VB. Net для циклического просмотра всех форм Microsoft Access и т. Д. c. экспортировать их как текст - PullRequest
0 голосов
/ 26 мая 2020

Я хочу создать приложение Windows Forms, которое позволяет выводить все формы, отчеты и т. Д. c. в базе данных Microsoft Access 2019 в виде текстовых файлов. Я нашел код VBA (см. Ниже), который может сделать это из базы данных доступа (через форму), но вместо этого я хочу сделать это через интерфейс Windows Forms.

--- КОД VBA НАЧИНАЕТСЯ ---

    On Error GoTo Err_DocDatabase
    Dim dbs As Database
    Dim cnt As Container
    Dim doc As Document
    Dim i As Integer
    Dim iTemp As Integer

    Set dbs = CurrentDb() ' use CurrentDb() to refresh Collections

    Set cnt = dbs.Containers("Forms")
    For Each doc In cnt.Documents
      Application.SaveAsText acForm, doc.Name, "C:\Users\ron\Desktop\" & RemoveSpecialCharsFromString(doc.Name) & ".txt"
    Next doc

    Set cnt = dbs.Containers("Reports")
    For Each doc In cnt.Documents
      Application.SaveAsText acReport, doc.Name, "C:\Users\ron\Desktop\" & RemoveSpecialCharsFromString(doc.Name) & ".txt"
    Next doc

    Set cnt = dbs.Containers("Scripts")
    For Each doc In cnt.Documents
      Application.SaveAsText acMacro, doc.Name, "C:\Users\ron\Desktop\" & doc.Name & ".txt"
    Next doc

    Set cnt = dbs.Containers("Modules")
    For Each doc In cnt.Documents
      Application.SaveAsText acModule, doc.Name, "C:\Users\ron\Desktop\" & doc.Name & ".txt"
    Next doc

    For i = 0 To dbs.QueryDefs.Count - 1
      Application.SaveAsText acQuery, dbs.QueryDefs(i).Name, "C:\Users\ron\Desktop\" & dbs.QueryDefs(i).Name & ".txt"
    Next i

    Set doc = Nothing
    Set cnt = Nothing
    Set dbs = Nothing

  Exit_DocDatabase:
    Exit Sub

  Err_DocDatabase:
    MsgBox Err.Description
    Resume Exit_DocDatabase

--- КОД VBA ЗАКАНЧИВАЕТСЯ ---

Код, который я пробовал изначально, был следующим:

--- VB. NET НАЧАЛО КОДА ---

    Dim oAccess As Access.Application
    Dim sbModuleList As New StringBuilder

    oAccess = New Access.ApplicationClass()
    oAccess.OpenDatabase("C:\Users\ron\Desktop\" + sDBName)

    For Each oReport As AccessObject In oAccess.CurrentProject.AllReports
      sbModuleList.AppendLine(oReport.Name + " - " +oReport.DateCreated)
    Next

--- VB. NET КОНЕЦ КОДА ---

Приложение Access. Объект .CurrentProject имеет свойства, после которых я хочу go (например, AllTables, AllForms, AllReports и т. Д. c.). Однако, хотя Access.Application.CurrentProject IsNot Nothing, я получаю сообщение об ошибке при попытке доступа к свойству AllTables. Мне нужно будет найти фактическое сообщение об ошибке, так как я сейчас не на том же компьютере, но я думаю, что это было что-то вроде «System.Runtime.InteropServices.COMException: 'Вы сделали недопустимый вызов функции.'».

При этом я просто попробовал тот же код на другом компьютере, и он отлично работает! Итак, я думаю, теперь возникает вопрос, почему код работает на одном компьютере, а на другом - нет?

...