【发布时间】:2021-07-15 14:56:34
【问题描述】:
我是一个老 Foxpro 程序员,我习惯使用数组来发布变量字段。
我想做的是在我设计的新表中有 15 个日期字段。
在我的查询中,我有一个活动日期的个人记录。
我想将每个 Client_id 的 15 个不同日期编译为一个包含 15 个日期的记录,但我似乎无法将表数据作为数组引用。
我尝试了几种不同的方法来定义数组,但似乎没有任何效果。
这是我的代码。在我的表中,我有 15 个日期字段,分别命名为 Mail_date1、Mail_date2、Mail_date3 等。
我首先尝试将它定义为一个数组,但不喜欢它;当我尝试引用结果表 rs2!mdate2 = memdate(intcounter) 中的日期字段时,我的代码总是失败
如何将我的结果表输出字段作为数组引用?
我是否必须放置一大堆 if 语句才能加载我的结果?
好像很浪费......应该可以将它们作为数组加载。
我是一名新的 Access 2007 VBA 程序员。
Dim db As DAO.Database
Set db = CurrentDb
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim FinTotal, intcounter As Integer
Dim FinMPU, FinVersion As String
Dim mail_date(1 To 15) As Date
Dim memdate(1 To 15) As Date
Dim mdate2 As String
Set rs1 = db.OpenRecordset( _
"SELECT NewFile.MPU_ID, " & _
" NewFile.MAIL_DATE," & _
" NewFile.TOTAL, " & _
" Freight.Version " &_
"FROM Freight " & _
" LEFT JOIN NewFile ON Freight.[MPU ID] = NewFile.MPU_ID " & _
"ORDER BY NewFile.MPU_ID, NewFile.MAIL_DATE")
Set rs2 = db.OpenRecordset("Final")
DoCmd.RunSQL "DELETE Final.* FROM Final;"
intcounter = 1
memdate(intcounter) = rs1!mail_date
FinMPU = rs1!mpu_ID
FinTotal = rs1!total
FinVersion = rs1!Version
rs1.MoveNext
On Error GoTo Error_MayCauseAnError
Do While Not rs1.EOF
Do While Not rs1.EOF _
And memdate(intcounter) <> rs1!mail_date _
And FinMPU = rs1!mpu_ID
intcounter = intcounter + 1
memdate(intcounter) = rs1!mail_date
FinTotal = FinTotal + rs1!total
FinVersion = rs1!Version
FinMPU = rs1!mpu_ID
rs1.MoveNext
Loop
If FinMPU <> rs1!mpu_ID Then
rs2.AddNew
mdate2 = "mail_date" & CStr(intcounter)
rs2!mdate2 = memdate(intcounter)
rs2!total = FinTotal
rs2!mpu_ID = FinMPU
rs2!Version = FinVersion
rs2.Update
FinTotal = rs1!total
FinVersion = rs1!Version
FinMPU = rs1!mpu_ID
intcounter = 1
memdate(intcounter) = rs1!mail_date
End If
rs1.MoveNext
Loop
【问题讨论】:
-
DAO 是一条死胡同。不要再将它用于新代码。
-
@Tomalak 嗯,不。对于使用 ACE 数据库引擎的本机 Access 应用程序,“Microsoft Office ... Access 数据库引擎对象库”(在 VBA 中映射到
DAO)仍然是默认和首选的访问方法。 -
@Gord IIRC 他们已切换到 ADO 作为 Access 2007 (?) 的默认库。
-
@Tomalak
DAO仍然是在 Access 2007/2010/2013 中处理数据的默认和本地方式,因为它已更新以支持新数据库格式的增强。当然,您对我们完全免费ADO;有些事情你可以在其中做而不能在另一个做,反之亦然。另见stackoverflow.com/questions/1039224/… -
@RenaudBompuis 好的,感谢您提供的信息。