仅从表的主键获取Access数据

时间:2014-05-23 18:39:40

标签: sql vba ms-access

所以我对使用VBA和SQL的Access中的数据引用有疑问。我的数据集中有一个包含50列的表格,我需要进行一个用户可以运行的查询,该查询将使用不那么简单的算法操作这些列中的30个数据。因此查询将提示用户输入主键,然后运行vba函数以获取用户想要的值,我只是想知道它是否可能像这样完成

SELECT Hardware_Type,
       Func32(Hardware_Type)
FROM Table1
WHERE (([Hardware_Type]) = [Hardware_Type]);

其中Hardware_type是主键,Func32是Visual Basic函数。

所以现在Func32仅将Hardware_type作为输入,但需要使用特定Hardware_Type行中的30个数据。我只需要知道有没有办法做到这一点,如果有,我会请求提示,因为我真的不想在查询和函数中输入30个不同的字段。哦,所有这些都在Microsoft Access中!

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以避免将一大堆参数传递给您的VBA函数,但每次调用该函数时都会花费一次数据库命中(即,在调用该函数的查询中每行一次)。您的功能可以执行以下操作:

Option Compare Database
Option Explicit

Public Function Func32(HardwareType As String) As Variant
    Dim cdb As DAO.Database, qdf As DAO.QueryDef, rst As DAO.Recordset
    Dim sql As String

    Set cdb = CurrentDb
    sql = ""
    sql = sql & "PARAMETERS prmHardwareType TEXT(255);"
    sql = sql & "SELECT * FROM Table1 WHERE Hardware_Type=[prmHardwareType]"
    Set qdf = cdb.CreateQueryDef("", sql)

    ' assign the PK argument as the query parameter and open it as a Recordset
    qdf!prmHardwareType = HardwareType
    Set rst = qdf.OpenRecordset(dbOpenSnapshot)

    ' do your calculations and assign the return value to the function name
    Func32 = rst!Field1 + rst!Field2 + rst!Field3

    rst.Close
    Set rst = Nothing
    Set qdf = Nothing
    Set cdb = Nothing
End Function