我编写了一个在Access Query中使用的函数。该函数只工作一次,但现在它恢复到例程的开始时,设置rs = db.OpenRecordset等。"被击中了。
Public Function RaceOutlook()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Fav1 As Integer
Dim Fav2 As Integer
Dim Outlook As Integer
Dim Pace As Integer
Dim nFav1 As Field
Dim nFav2 As Field
Dim nOutlook As Field
Dim nPace As Field
Set db = CurrentDb 'tells program to use the current db
Set rs = db.OpenRecordset("Race Card Contenders", dbOpenDynaset)
Fav1 = rs("nFav1")
Fav2 = rs("nFav2")
Outlook = rs("nOutlook")
Pace = rs("nPace")
Select Case True
Case (Fav1 = 1 And Fav2 = 3 And Outlook = 1 And Pace = 5)
RaceOutlook = 1
Case Else
RaceOutlook = 0
End Select
rs.Close
End Function
答案 0 :(得分:1)
在MS Access UI(.exe只有ODBC / OLEDB)中,您可以直接从SQL查询调用用户定义的内联函数,甚至可以传递参数而无需打开相同的记录集:
VBA 功能(将被放置在模块中)
Public Function RaceOutlook(Fav1 As Integer, Fav2 As Integer, _
Outlook As Integer, Pace As Integer)
Select Case True
Case (Fav1 = 1 And Fav2 = 3 And Outlook = 1 And Pace = 5)
RaceOutlook = 1
Case Else
RaceOutlook = 0
End Select
End Function
SQL 查询
SELECT r.*,
RaceOutlook(r.fav1, r.fav2, r.Outlook, r.Pace) As RaceOutlook
FROM [Race Card Contenders] r
但是,如评论所述,VBA功能不提供Access的IIF()
表达式。另外,如果通过ODBC / OLEDB从外部连接到数据库,则下面的替代查询将起作用:
SELECT r.*,
IIF(r.fav1=1 AND r.fav2=3 AND r.Outlook=1 AND r.Pace=5, 1, 0) As RaceOutlook
FROM [Race Card Contenders] r