Чтение значения из строки, в таблице, в файле 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
Вам нужно изменить код, чтобы получить то, что вам нужно, но я оставляю это вам.