【问题标题】:Looping Through Dates in strSQL in Access VBA在 Access VBA 中的 strSQL 中循环访问日期
【发布时间】:2016-01-04 15:49:04
【问题描述】:

我在 Access 中有这段代码:

Sub SampleReadCurve()

Dim rs As Recordset
Dim iRow As Long, iField As Long
Dim strSQL As String
Dim CurveID As Long
Dim MarkRunID As Long
Dim MaxOfMarkAsofDate As Date



CurveID = 15

MaxOfMarkAsofDate = #7/22/2015#


strSQL = "SELECT * FROM VolatilityOutput WHERE CurveID=" & CurveID & " AND MaxOfMarkAsofDate=#" & MaxOfMarkAsofDate & "# ORDER BY MaxOfMarkasOfDate, MaturityDate"


Debug.Print strSQL

Set rs = CurrentDb.OpenRecordset(strSQL, Type:=dbOpenDynaset, Options:=dbSeeChanges)

If rs.RecordCount <> 0 Then
    rs.MoveFirst
    Debug.Print vbCrLf
    Debug.Print "First", rs.Fields("ZeroCurveID"), rs.Fields("MaturityDate"), rs.Fields("ZeroRate"), rs.Fields("DiscountFactor")
    rs.MoveLast
    Debug.Print "Last", rs.Fields("ZeroCurveID"), rs.Fields("MaturityDate"), rs.Fields("ZeroRate"), rs.Fields("DiscountFactor")
    Debug.Print "There are " & rs.RecordCount & " records and " & rs.Fields.Count & " fields."

    Dim BucketTermAmt As Long
    Dim BucketTermUnit As String
    Dim BucketDate As Date
    Dim MarkAsOfDate As Date
    Dim InterpRate As Double
    Dim I As Integer

    BucketTermAmt = 3
    BucketTermUnit = "m"
    BucketDate = DateAdd(BucketTermUnit, BucketTermAmt, MaxOfMarkAsofDate)
    InterpRate = CurveInterpolateRecordset(rs, BucketDate)
    Debug.Print BucketDate, InterpRate




End If
End Sub

表 VolatilityOutput 有一个带有关联值的日期列表。此代码使用表中找到的最接近的值对给定的 MaxofMarkAsofDate 插入一个值。

现在,我已从表中选择 MaxofMarkAsofDate 作为 strSQL 语句的一部分。代码返回 #7/22/2015# 的正确值。

但是,我需要获取 #7/22/2015# 之前 76 个日期的值。我可以通过为每个日期手动输入 #7/21/2015#、#7/20/2015# 等来完成此操作。如果可能的话,我想以更快的方式做到这一点。我想使用循环,但是我不知道如何在 Access 中将循环与 strSQL 语句结合起来。

【问题讨论】:

  • 为什么不能使用 AND MaxOfMarkAsofDate=
  • 我不确定 - 我尝试用它替换我的代码,但它给了我一个语法错误。这是什么意思?
  • 不是只取它等于的值,而是取所有等于或小于它的值。不确定这是否能让你到达你需要的地方。

标签: mysql sql excel vba ms-access


【解决方案1】:
CurveID = 15

Dim i As Integer    
For i = 0 to 76
    MaxOfMarkAsofDate = #7/22/2015# - i

    'Your inner code here '
Next i

End Sub

【讨论】:

  • 我在这里得到一个 Next without For 错误。我可以从日期中减去一个整数吗?
  • 是的,VBA 执行隐式转换。我将添加现有代码的前后行作为上下文。
  • 啊,我明白了,谢谢。效果很好。
  • 如果您不介意,我可以问您一个后续问题吗?通过运行这个子程序,我得到了一系列数字作为输出,即 76 InterpRates。之后如何将此输出存储为数组?我打算编写一个以 76 InterpRates 作为输入的函数。
  • @varunchandra:最好将其作为一个单独的问题提出。随意链接到来自这些 cmets 的新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 2011-12-24
  • 2020-08-03
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
相关资源
最近更新 更多