Чтение значения из строки, в таблице, в файле MDB, из Excel/ VBA?

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

На данный момент мне нужно это из excel/vba, и я позже перенесу на vb.net

Сначала структура моей базы данных

Один файл MDB (на самом деле, accdb, это не имеет значения, я надеюсь)

Он имеет одну таблицу под названием "myParts"

Эта таблица имеет 3 столбца: идентификатор, номер детали, описание детали

Вот как функцию я хочу сделать

функция GetPartDescription (PartNumber как строка) как строка

Номер детали должен существовать только один раз во всей таблице.

Таким образом, эта функция должна открыть базу данных, найти строку с точно совпадающим номером детали и затем вернуть все, что находится в столбце "описание детали" для этой строки

Как мне это сделать? Я пытался начать, просто выбрав API, я заблудился! DAO, ADO, ACEDAO, ADODB, ADO.NET, OLEDB??? Какой кошмар!

1 ответ

IMO, этот вопрос должен быть закрыт как слишком широкий, но давайте попробуем. Следующая функция подключится к базе данных Access через ADODbD

Function ConnectToDB(ByVal fileName As String)

Dim conn As New ADODB.Connection

    If Dir(fileName) = "" Then
        MsgBox "Could not find file " & fileName
        Exit Function
    End If

    Dim connectionString As String

    ' https://www.connectionstrings.com/access/
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" _
                       & fileName & ";Persist Security Info=False;"

    conn.Open connectionString

    Set ConnectToDB = conn

End Function

И это может дать вам то, что вы хотите. Вам нужен лист с кодовым именем shRepAllRecords чтобы это работало.

Option Explicit

Sub ReadFromDB()

    ' Get datbase name
    Dim dbName As String
    dbName = <fule filename of the database>

    ' Connect to the databse
    Dim conn As ADODB.Connection
    Set conn = ConnectToDB(dbName)

    ' read the data
    Dim rs As New ADODB.Recordset
    Dim query As String

    ' First example to use an SQL statement
   query = "SELECT * From myParts WHERE PartNumber = '123'"

    ' Second example to use a query name defined in the database itself
    ' query = "qryCustomer"

    rs.Open query, conn

    ' shRepAllRecords is the codename of the sheet where the 
    ' data is written to

    ' Write header
    Dim i As Long
    For i = 0 To rs.Fields.Count - 1
        'shRepAllRecords.Cells(1, i + 1).Value = rs.Fields(i).Name
        shRepAllRecords.Range("A1").Offset(0, i) = rs.Fields(i).Name
    Next i

    ' Write Data
    shRepAllRecords.Range("A2").CopyFromRecordset rs
    shRepAllRecords.Activate


    ' clean up
    conn.Close

End Sub

Вам нужно изменить код, чтобы получить то, что вам нужно, но я оставляю это вам.

Другие вопросы по тегам