如何用VBA查询MS-Access数据库

如何用VBA查询MS-Access数据库,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,所以我有一个MS Access数据库,我需要编写一个VBA代码来查找并显示某个值 这是我到目前为止得到的,但它没有任何作用 Public Function findInDb() Dim mySQL As String Dim custID As Integer custID = "13" mySQL = "SELECT Orders.CustomerID FROM Orders " & _ "WHERE [CustomerID] = orderDate" DoCmd

所以我有一个MS Access数据库,我需要编写一个VBA代码来查找并显示某个值

这是我到目前为止得到的,但它没有任何作用

Public Function findInDb()
Dim mySQL As String
Dim custID As Integer

custID = "13"

mySQL = "SELECT Orders.CustomerID FROM Orders  " & _
       "WHERE [CustomerID] = orderDate"

DoCmd.RunSQL mySQL


End Function

知道我做错了什么吗?

你可以用
DlookUp
来代替

Public Function findInDb()

    Dim intCustID As Integer, custID As Integer
    custID = 13

    intCustID = DLookup("[CustomerID]", "Orders", "[CustomerID]=" & custID)

End Function


Docmd.RunSQL
仅适用于操作查询(追加、更新、删除)。它不适用于Select语句

DoCmd.RunSQL不返回任何结果。因此,它运行查询,但结果CustomerID值无法返回给您

Santosh建议使用DLookup,但从性能角度来看,这是非常糟糕的。我建议使用ado;为此,您需要添加对ms access副本中“引用”列表中显示的“Microsoft ActiveX数据对象”的最新(编号最高)库的引用。定义此参考后,请使用此代码:

dim intCustID as long
dim rst as object
set rst = createObject("ADODB.Recordset")
rst.open "SELECT CustomerID FROM Orders WHERE CustomerID = " & CustID _
    , currentproject.connection, adOpenStatic, adLockReadOnly
intCustID = rst.fields(0)  'or if you prefer rst!CustomerID
set rst = nothing

内置函数优于外部库

另一种方式

Sub test()

    Dim rsCust As DAO.Recordset
    Dim db As Database
    Set db = CurrentDb

    Dim custID As Integer, resultCust As Integer
    custID = 2

    Dim mySQL As String
    mySQL = "SELECT CustomerID FROM [Orders] WHERE CustomerID =" & custID

    Set rsCust = db.OpenRecordset(mySQL)
    resultCust = IIf(rsCust.EOF And rsCust.BOF, -1, rsCust(0))

End Sub

这可能会有帮助:你是如何尝试运行它的?为什么不把它放在SQL查询中呢?如果你要把它放在VBA中,你对运行SQL的结果做什么?好的,那么在ms access中我想写一段VBA代码,查找并显示所需的vakue。当你在ms access中运行SQL时,你也可以得到结果。您为什么需要VBA?@user2880722如果此答案或任何其他答案适用于您,请单击旁边的复选标记接受此答案。