1

这个让我很难过,但很好。在 MS Access 中使用 VBA,有时在对同一张表运行相同的代码时会得到不同的结果。我可以运行代码 2、5、6、10 次并获得相同的结果,然后再次运行它并获得不同的结果。我可以运行代码两次并获得相同的结果,然后我可以运行两次代码并获得不同的结果——所有代码都针对同一张表使用相同的代码。

该代码用于分组旅行,以便正确计费。为此,我获取原始 SQL 数据并将其放入 Access 表中,然后通过几种排序和一些交叉检查,在表的最后一个字段中用 GR 或 ML 标记访问表中的每个行程。结果集是指定时间范围内的所有行程,现在标记为:ML(多负载)、GR(分组)或空白(需求)。

我什至尝试放入 MoveLast/MoveFirst 以确保每次都完全加载表格(根据其他人的建议)。

以下是在相同数据上运行 2 次相同代码后的代码和数据链接: 代码和

数据 出于隐私考虑,我删除了行程 ID 和客户 ID 数据。旅行 ID 是唯一的,但客户 ID 将根据客户在该时间段内的旅行次数而被多次使用。非常感谢

您可以提供的任何和所有帮助以使此代码在每次运行时产生相同的结果。我不想回去手动做这个报告标签。这是每月必须完成两次的 4 个中最小的一个。谢谢!大卫·R·莫尔................................... ...行结束............................................ ......................



4

2 回答 2

2

When opening t_BillableTrips, I do not think it is safe to assume that the data will be sorted the way you want. That could potentially change from run to run. I would suggest to use a query with an explicit sort order instead of opening the table directly. My second suggestion is to use the Recordset Clone method to get Intable2 and Intable3. The recordsets will be sharing the same underlying in memory data but will be able to be positioned at different records.

于 2013-09-26T07:37:27.820 回答
0

首先,感谢所有给出答案的人。您的提示引导我找到解决方案。

第一个问题是我直接编辑 TABLE,而我的印象是我的 MAKE TABLE ORDER BY 命令实际上是按照我指定的顺序创建一个表 - 它只在大部分时间工作,我们不能这样做。

因此,在深入挖掘之后,我发现越来越多的证据表明尝试对实际表进行排序 - 特别是使用 MAKE TABLE 命令不是好的做法,并且会产生不可预测的结果并产生更多开销。我现在将我的定位和更新基于表的查询而不是实际表。IE 改变了这个:

Set InTable = dbsBilling.OpenRecordset("t_BillableTrips", dbOpenTable)
Set InTable2 = dbsBilling.OpenRecordset("t_BillableTrips", dbOpenTable)
Set InTable3 = dbsBilling.OpenRecordset("t_BillableTrips", dbOpenTable)
Set InTable4 = dbsBilling.OpenRecordset("t_BillableTrips", dbOpenTable)

对此:

Set InTable = dbsBilling.OpenRecordset("q_BillableTripsSort1B", dbOpenDynaset)
Set InTable2 = dbsBilling.OpenRecordset("q_BillableTripsSort1B", dbOpenDynaset)
Set InTable3 = dbsBilling.OpenRecordset("q_BillableTripsSort1B", dbOpenDynaset)
Set InTable4 = dbsBilling.OpenRecordset("q_BillableTripsSort1B", dbOpenDynaset)

到目前为止,这似乎已经解决了这个问题,当然,proc 运行得更快,因为它不必为两种不同的类型创建两次表来运行/更新。

于 2013-12-06T21:13:15.687 回答