Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从行、表、mdb文件或excel/vba中读取值?_Excel_Vba_Ms Access_Ado - Fatal编程技术网

从行、表、mdb文件或excel/vba中读取值?

从行、表、mdb文件或excel/vba中读取值?,excel,vba,ms-access,ado,Excel,Vba,Ms Access,Ado,我想做一个简单的函数,可以打开并读取数据库(和mdb文件)。尽可能简单和干净。最好只使用ADODB 目前,我需要从excel/vba中获取这些信息,稍后我将迁移到vb.net 首先是我的数据库结构 一个mdb文件(实际上,accdb,我希望这无关紧要) 它有一个名为“myParts”的表 此表有3列:id、零件号、零件说明 下面是我想要实现的函数 函数GetPartDescription(PartNumber作为字符串)作为字符串 零件号在整个表中只能存在一次 因此,此函数应该打开数据库,找到具

我想做一个简单的函数,可以打开并读取数据库(和mdb文件)。尽可能简单和干净。最好只使用ADODB

目前,我需要从excel/vba中获取这些信息,稍后我将迁移到vb.net

首先是我的数据库结构

一个mdb文件(实际上,accdb,我希望这无关紧要)

它有一个名为“myParts”的表

此表有3列:id、零件号、零件说明

下面是我想要实现的函数

函数GetPartDescription(PartNumber作为字符串)作为字符串

零件号在整个表中只能存在一次

因此,此函数应该打开数据库,找到具有精确匹配零件号的行,然后返回该行“零件说明”列中的内容


我该怎么做?我试着从选择哪个api开始,我迷路了!DAO,ADO,ACEDAO,ADODB,ADO.NET,OLEDB???真是一场噩梦

我认为这个问题应该收尾,因为它太宽泛了,但让我们试一试 以下函数将通过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
这可能会给你想要的。您需要一张代码名为
的工作表,以使其正常工作

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
选项显式
子ReadFromDB()
'获取数据库名称
Dim dbName作为字符串
数据库名=
'连接到数据库
Dim conn作为ADODB连接
Set conn=ConnectToDB(dbName)
“读取数据
将rs设置为新ADODB.Recordset
将查询设置为字符串
'第一个使用SQL语句的示例
query=“从myParts中选择*,其中PartNumber='123'”
'使用数据库本身中定义的查询名称的第二个示例
'query=“qryCustomer”
康涅狄格州开放查询
'ShrepollRecords是
'数据被写入
'写入头
我想我会坚持多久
对于i=0到rs.Fields.Count-1
'单元格(1,i+1).Value=rs.Fields(i).Name
范围(“A1”).偏移量(0,i)=rs.字段(i).名称
接下来我
"写数据",
ShrepollRecords.Range(“A2”).CopyFromRecordset rs
史莱克,激活
“清理
关闭连接
端接头

您需要调整代码以获得所需的数据,但我将此留给您。

谢谢,不过我想从记录集中提取数据,并将其作为函数的输出。如何访问“rs”对象中的数据?另外,如果mdb文件当前正被另一个进程访问,会发生什么情况?谢谢,对了,正如我在帖子中所写的,现在你需要自己做些事情了。我向您展示了如何访问字段名。访问字段的值非常相似。在谷歌的帮助下,你可以找到这个或这个。如果你陷入困境,那么打开另一个问题,输入一些你尝试过的代码,并解释你的问题是什么。也读一读。啊,好吧,我明白你说的问题太宽泛是什么意思了,我应该把它分成几个小问题。我想我问题的最后一行,是一个大问题,只是它本身,我真的找不到一个好的答案。你也应该自己尝试一些东西。尝试一些代码,您将获得更好的洞察力。