所以我对使用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中!
提前致谢!
答案 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