我想做一个简单的函数,它将打开并从数据库(和mdb文件)读取。尽可能简单和干净。最好只使用ADODB。
现在我需要excel / vba的支持,以后我将迁移到vb.net
首先是我的数据库结构
单个mdb文件(实际上是accdb,我希望这没关系)
它有一个名为“ myParts”的表
此表有3列:id,零件号,零件描述
这是我要制作的功能
函数GetPartDescription(PartNumber作为字符串)作为字符串
零件号在整个表格中只能存在一次。
因此,此函数应打开数据库,找到具有完全匹配的部件号的行,然后返回该行的“部件描述”列中的所有内容
我应该怎么做?我试图通过选择哪种api来上手,我迷路了! DAO,ADO,ACEDOO,ADODB,ADO.NET,OLEDB ???真是一场噩梦!
答案 0 :(得分:1)
IMO这个问题应该解决得太广泛,但让我们尝试一下 以下功能将通过ADODbD连接到Access数据库
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
您需要调整代码以完全获得所需的内容,但我将其留给您。