Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
访问VBA未在循环中正确追加日期_Vba_Ms Access - Fatal编程技术网

访问VBA未在循环中正确追加日期

访问VBA未在循环中正确追加日期,vba,ms-access,Vba,Ms Access,我试图做一个循环,其中包括插入一个日期,然后在每行中,向该日期添加一个月。它没有正确地附加第一个日期。日期是查询中日期字段的DLookup,因此我认为它应该作为日期使用。我看不出我的SQL语句有任何错误。但当运行此命令时,表中显示的日期为1899年12月30日,如果单击该日期,它将更改为上午12:03:34。应该是5/1/15。我试着让它工作,但没有给我任何其他的结果 这是我的代码,请注意:我肯定我的总体代码可能有一些其他错误,但我现在将重点放在这个日期问题上。不过,你可以随意指出你发现的任何东

我试图做一个循环,其中包括插入一个日期,然后在每行中,向该日期添加一个月。它没有正确地附加第一个日期。日期是查询中日期字段的DLookup,因此我认为它应该作为日期使用。我看不出我的SQL语句有任何错误。但当运行此命令时,表中显示的日期为1899年12月30日,如果单击该日期,它将更改为上午12:03:34。应该是5/1/15。我试着让它工作,但没有给我任何其他的结果

这是我的代码,请注意:我肯定我的总体代码可能有一些其他错误,但我现在将重点放在这个日期问题上。不过,你可以随意指出你发现的任何东西

Private Sub AmortButton_Click()

DoCmd.SetWarnings False

Dim Account As Long: Account = DLookup("[L#]", "qry_info4amort") 'working
Dim StartDate As Date: StartDate = CDate(DLookup("PaidToDate", "qry_info4amort")) 'NOT WORKING
Dim InterestRate As Double: InterestRate = DLookup("IntCur", "qry_info4amort") 'working
Dim piConstant As Integer: piConstant = DLookup("[P&IConstant]", "qry_info4amort")
Dim UPB             As Currency: UPB = DLookup("UPB", "qry_info4amort")                 'working
Dim tempUPB         As Currency: tempUPB = UPB                                          'working (just to establish variable)
Dim AmortInterest   As Currency: AmortInterest = 0                                      'working (just to establish variable)
Dim AmortPrincipal  As Currency: AmortPrincipal = 0                                     'working (just to establish variable)
Dim Ranking         As Integer: Ranking = 1                                             'working (just to establish variable)
Dim PaymentLoop     As Integer: PaymentLoop = 1                                         'working (just to establish variable)
Dim PaymentNumber   As Integer: PaymentNumber = DLookup("NumPmts", "qry_info4amort")    'working
Dim tempInterest    As Integer: tempInterest = 0                                        'working (just to establish variable)

Do While PaymentLoop <= PaymentNumber                                                   'working

tempInterest = Round(tempUPB * (InterestRate / 12), 2)
tempUPB = Round(tempUPB - (piConstant - tempInterest), 2)
AmortPrincipal = AmortPrincipal + (piConstant - tempInterest)
AmortPrincipal = (piConstant - tempInterest)
AmortInterest = AmortInterest + tempInterest

DoCmd.RunSQL "INSERT INTO tbl_AmortizationTest ([L#],[Payment#],[PaymentDate],[UPB],[Interest],[Principal],[TotalPayment],[InterestRate],[TempUPB],[Ranking]) " & _
             "VALUES (" & Account & "," & PaymentLoop & "," & StartDate & "," & UPB & "," & tempInterest & "," & AmortPrincipal & "," & (tempInterest + AmortPrincipal) & "," & InterestRate & "," & tempUPB & "," & Ranking & ")"

UPB = tempUPB
StartDate = DateAdd("m", 1, StartDate)      'NOT WORKING
PaymentLoop = PaymentLoop + 1               'working
Ranking = Ranking + 1                       'working

Loop

MsgBox "Done!"

DoCmd.SetWarnings True

End Sub
Private子按钮点击()
DoCmd.SetWarnings错误
Dim Account的长度为:Account=DLookup(“[L#]”,“[qry#u info4amort”)”正在工作
Dim StartDate As Date:StartDate=CDate(DLookup(“PaidToDate”、“qry_info4amort”)“不工作
Dim InterestRate为双精度:InterestRate=DLookup(“IntCur”,“qry_info4amort”)“工作
将微微恒量设置为整数:微微恒量=DLookup(“[P&IConstant]”,即“qry_info4amort”)
作为货币的Dim UPB:UPB=DLookup(“UPB”,“qry_info4amort”)“正在工作
作为货币的Dim TEMPUBB:TEMPUBB=UPB'工作(仅用于建立变量)
作为货币的Dim AmortInterest:AmortInterest=0'正在工作(仅用于建立变量)
作为货币的Dim AmortPrincipal:AmortPrincipal=0'正在工作(仅用于建立变量)
作为整数的Dim排名:排名=1'工作(仅用于建立变量)
Dim PaymentLoop作为整数:PaymentLoop=1'正在工作(仅用于建立变量)
Dim PaymentNumber为整数:PaymentNumber=DLookup(“NumPmts”,“qry_info4amort”)“正在工作
将tempInterest设置为整数:tempInterest=0'正在工作(仅用于建立变量)

在您的
DLookup(“PaidToDate”、“qry_info4; amort”)
周围使用While PaymentLoop而不是
CDate()

StartDate = DateSerial(<year>, <month>, <day>)

如果
DLookup(“PaidToDate”、“qry_info4amort”)
返回一个包含
/
的值,则必须使用一些
Instr()
函数

首先,如果
PaidToDate
的数据类型为Date,请按原样检索日期:

StartDate = DLookup("PaidToDate", "qry_info4amort")
如果是字符串,则CDate或DateValue将执行以下操作:

StartDate = DateValue(DLookup("PaidToDate", "qry_info4amort"))
其次,在将日期连接到SQL中时,为日期设置适当的字符串表达式格式:

... PaymentLoop & ",#" & Format(StartDate, "yyyy\/mm\/dd") & "#," & UPB ...

DateSerial将返回一个字符串,我将这些值插入到日期字段中。这是个问题吗?DLookup确实返回/(5/1/15),但我想我可以使用date part来分割它,也许?@msim
DateSerial
返回一个
date
。嗯,我得到了一个类型不匹配的错误,所以我认为这是发布的mann,让DateSerial工作,因为MsgBox StartDate给了我正确的东西(5/1/2015),但它仍然将1899年12月30日插入到桌面宾果中!FWIW我不需要在SQL字符串中使用Format,我想这是因为它在整个过程中都是一种日期数据类型。只是错过了那些标志。谢谢!
... PaymentLoop & ",#" & Format(StartDate, "yyyy\/mm\/dd") & "#," & UPB ...