Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 提取特定查询记录并在VBA中分配给变量_Sql_Vba_Ms Access - Fatal编程技术网

Sql 提取特定查询记录并在VBA中分配给变量

Sql 提取特定查询记录并在VBA中分配给变量,sql,vba,ms-access,Sql,Vba,Ms Access,我在VBA sub中有一个查询,它使用一些以前定义的日期变量生成一个记录集,其中包含5行数据,这些数据遵循以下结构: ID |货币|日期|汇率 1欧元| 2018年5月24日| 1.24 2 |欧元| 2018年5月23日| 1.23 3 |欧元| 22/05/2018 | 1.22 4 |欧元| 21/05/2018 | 1.21 5欧元2018年5月20日1.20欧元 Query = "SELECT Hist.ID, Hist.Currency, Hist.DateR, Hist.Rate

我在VBA sub中有一个查询,它使用一些以前定义的日期变量生成一个记录集,其中包含5行数据,这些数据遵循以下结构:

ID |货币|日期|汇率

1欧元| 2018年5月24日| 1.24

2 |欧元| 2018年5月23日| 1.23

3 |欧元| 22/05/2018 | 1.22

4 |欧元| 21/05/2018 | 1.21

5欧元2018年5月20日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个变量,每个变量包含特定日期的利率


感谢您的帮助或指导,提前感谢您

我决定用一种稍微不同的方法来解决这个问题,这是我的解决方案:

在子程序中,我将每个变量分配给一个函数,该函数接受两个参数:Currency和Date,并返回该日期和货币的汇率

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访问特定记录,我真的很想知道,或者是否有一种更有效的方法来执行此操作