2016-01-04 83 views
0

我在訪問VBA下面的代碼:STRSQL在Access VBA不會Executre

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/31/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 

本來,我只有一個WHERE在STRSQL聲明條款。由於添加第二個條件(MaxOfMarkAsofDate =#7/31/2015#),代碼不再執行。據我可以告訴它應該工作。我究竟做錯了什麼?

+1

您可以嘗試建立與字符串部分字符串。更改爲'Dim MaxOfMarkAsofDate As String:MaxOfMarkAsofDate =「#7/31/2015#」>' – Jeeped

回答

1

試試這個:

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

(因此與前#和日期之後)

+0

謝謝,修正了它。我看到錯誤來自調試打印,我需要一個完全匹配的日期。 – beeba

+1

此外,我不認爲你需要在日期訂購,因爲你只有1 –

+0

這隻會在美國環境中修復它。其他任何地方,都要特別格式化日期表達式,例如:'.. MaxOfMarkAsofDate =#「&Format(MaxOfMarkAsofDate,」yyyy \/mm \/dd「)&」#..' – Gustav