我有字段,其中有作为交货日期的名称,您可以在这里看到: 我有大约75列这样。当我想计算P1值时,我有一个错误,因为它找不到该字段。顺便说一下,我的系数T1,T2(它们是日期),因此A和B的数值非常奇怪。还有就是代码:日期作为无法识别的字段的名称访问
Sub vcm_fc()
Dim db As Database, T As Date, longest As Integer, nearest_date As Date, rsb As DAO.Recordset, strsqlb As String
Dim strsqla As String, rsa As Recordset, maturity As Date, T1 As Date, T2 As Date, P1 As Double, P2 As Double
Dim a As Integer, B As Integer, j As Integer, rsc As DAO.Recordset, strqlc As String, settlementbis As String
Dim settlement As String, maturitybis As Date, ym As Integer, ymbis As Integer
Set db = CurrentDb()
T = DateSerial(2020, 8, 15)
nearest_date = DFirst("PricingDate", "fc_historical")
longest = DateDiff("m", nearest_date, T)
db.Execute "CREATE TABLE time_series " _
& "(PricingDate CHAR);"
db.Execute " INSERT INTO time_series " _
& "SELECT PricingDate " _
& "FROM fc_historical " _
& "ORDER BY PricingDate;"
For i = 1 To longest
db.Execute " ALTER TABLE time_series " _
& "ADD COLUMN F_" & i & " Number;"
strsqla = "SELECT PricingDate, F_" & i & " FROM time_series ORDER BY PricingDate"
Set rsa = db.OpenRecordset(strsqla, dbOpenDynaset)
rsa.MoveFirst
rsa.Delete 'delete the first row which is blank when the time series table is created'
rsa.MoveFirst
While (Not rsa.EOF())
rsa.Edit
maturity = DateAdd("m", i, rsa.Fields("PricingDate").Value)
ym = Year(maturity) - 2000
settlement = "1/" & Month(maturity) & "/" & ym
strsqlb = "SELECT Pricingdate, " & settlement & " FROM fc_historical ORDER BY PricingDate;"
Set rsb = db.OpenRecordset(strsqlb, dbOpenDynaset)
rsb.MoveLast
T1 = rsb.Fields("PricingDate").Value
maturitybis = DateAdd("m", i, maturity)
ymbis = Year(maturitybis) - 2000
settlementbis = "1/" & Month(maturitybis) & "/" & ymbis
strsqlc = "SELECT Pricingdate, " & settlementbis & " FROM fc_historical ORDER BY PricingDate;"
Set rsc = db.OpenRecordset(strsqlc, dbOpenDynaset)
rsc.MoveLast
T2 = rsc.Fields("PricingDate").Value
a = DateDiff("d", T1, rsa.Fields("PricingDate").Value)
B = DateDiff("d", rsa.Fields("PricingDate").Value, T2)
P1 = rsb.Fields(settlement).Value
P2 = rsc.Fields(settlementbis).Value
rsa.Fields("F_" & i) = (P1 * B + P2 * a)/(a + B)
rsa.Update
rsa.MoveNext
Wend
Next i
End Sub
我不会那样设计表格 - 看起来完全反对关系数据库理论和规范化。取而代之的是3列 - PricingDate,OldFieldHeadingDate,Value。然后,您的表可以从表中SELECT Value FROM WHERE PricingDate =#somedate#AND OldFieldHeadingDate =#somedate#。您将在PricingDate中出现多个相同日期 - 也许可以使用PricingDate和OldFieldHeadingDate作为主键。数据库规则1 - 它不是电子表格。 :) –
领域是两周前(周围)的结算日期和交易止损。然后这个想法是在交易停止之前(月份)为所有不同时期获得一个新的时间表。对于每个日期,新价格是在最近的交易日期+交易止损前的期间(我们保持固定)的加权平均价格。此外,我不只有3列,而是75列。然而,如果我明白了你的想法,我可以为结算日期创建一个索引,然后我可以计算新的价格,不是吗? –
是的,索引将是第一个和第二个字段的组合 - 不需要75个字段,只需要三个字段。如果计算价格,您可以轻松编写查询以处理同一个表中较早的PricingDate/SettlementDate(?)记录。 –