Чтение значения из строки, в таблице, в файле MDB, из Excel / VBA? - PullRequest
0 голосов
/ 29 августа 2018

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

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

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

Один файл mdb (на самом деле, accdb, это не важно, я надеюсь)

В нем есть одна таблица с именем "myParts"

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

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

функция GetPartDescription (PartNumber в виде строки) в виде строки

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

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

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

1 Ответ

0 голосов
/ 29 августа 2018

ИМО этот вопрос должен быть закрыт как слишком широкий, но давайте попробуем Следующая функция будет подключаться к базе данных 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

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

...