我在VBA子中有一个查询,它使用一些先前定义的日期变量,生成一个记录集,其中包含5行数据,遵循以下结构:
ID |货币|日期|率
1 |欧元| 24/05/2018 | 1.24
2 |欧元| 23/05/2018 | 1.23
3 |欧元| 22/05/2018 | 1.22
4 |欧元| 21/05/2018 | 1.21
5 |欧元| 20/05/2018 | 1.20
Query = "SELECT Hist.ID, Hist.Currency, Hist.DateR, Hist.Rate FROM Hist WHERE Hist.Currency= " & CCY & " AND Hist.DateR= #" & TD & "#" OR " Hist.Currency= " & CCY & " AND Hist.DateRef= #" & Date_1 & "#" OR " Hist.Currency= " & CCY & " AND Hist.DateR= #" & Date_2 & "#" OR " Hist.Currency= " & CCY & " AND Hist.DateR= #" & Date_3 & "#" OR " Hist.Currency= " & CCY & " AND Hist.DateR= #" & Date_4 & "#"
我需要将每个日期的费率分配给一个单独的变量; XRate,Date1Rate,Date2Rate,Date3Rate,Date4Rate。以前要为查询中的记录分配变量,我完成了以下操作:
Set rs = CurrentDb.OpenRecordset(Query)
XRate = rs("Rate")
但是,只有将查询拆分为5个单独的查询,每个日期对应一个查询并按上述方式分配,这才有效。我想知道是否有更聪明的方法来做到这一点,结果是5个变量,每个变量包含特定日期的费率。
感谢任何帮助或指导,谢谢你提前。
答案 0 :(得分:1)
我决定采用一种稍微不同的方式,效果非常好,这是我的解决方案:
在子例程中,我将每个变量赋值给一个带有两个参数的函数,货币和日期,并返回该日期和货币的汇率。
XRate = GetRate(CCY, TD)
Date1Rate= GetRate(CCY, Date_1)
Date2Rate = GetRate(CCY, Date_2)
Date3Rate= GetRate(CCY, Date_3)
Date4Rate= GetRate(CCY, Date_4)
上述功能存储在一个单独的模块中,如下所示:
Function GetRate(CCY As Variant, RateD As Variant) As Variant
Dim Query, rs, Rate
Query = "SELECT Hist.ID, Hist.Currency, Hist.DateR, Hist.Rate FROM Hist WHERE Hist.Currency= " & CCY & " AND Hist.DateR= #" & RateD & "#"
Set rs = CurrentDb.OpenRecordset(Query)
Rate = rs("Rate")
GetRate = Rate
rs.Close
Set rs = Nothing
End Function
希望能帮助某人,但是如果有办法根据特定ID访问特定记录,我真的很想知道或者是否有更有效的方法来执行此操作。