【发布时间】:2013-07-26 12:49:43
【问题描述】:
我运行了一些代码来对列中的旧记录进行编号,以便在数据表子表单中对项目进行排序,但是在打开依赖它的主表单时更新了库存交易表中的列之后。它运行一个查询来确定到期的客户余额,并且该查询需要永远运行 2-3 分钟或更长时间,但是恢复到它运行良好的数据的旧副本,我所做的只是重新编号一列中的记录最其中有 1 是重新编号记录的代码:
Dim rst As DAO.Recordset
Dim i As Long
Dim OID As Long
Dim stringSQL as String
i = 1
stringSQL = "SELECT * FROM [Inventory Transactions] " _
& "WHERE [OrderID] > 0 Order By [OrderID],[TransactionID]"
Set rst = CurrentDb.OpenRecordset(stringSQL, dbOpenDynaset)
With rst
OID = rst!OrderID
Do Until .EOF
If OID = rst!OrderID Then
.Edit
!OrderLineNumber = i
.Update
.MoveNext
i = i + 1
Else
OID = rst!OrderID
i = 1
End If
Loop
.Close
End With
Set rst = Nothing
编辑 1:
我今天继续玩这个,打破第二级子查询的查询实际上引用了我更改的库存交易表,但运行良好,但上升到子查询 1 的级别,它引用子查询 2 和支付总和查询,它窒息但是付款总和仅参考付款表。
编辑 2:
我今天做了更多的测试 Subquery2 和支付总和查询的运行速度都比我用秒表计时的速度要快,但是当它们组合起来大约需要 1:45 时,subquery1 中只有 5 列,其中 4 列来自 subquery2,1 列来自总和前 4 个付款中的 3 个是总和,最后一个是分组依据,然后付款总和中的一个是分组依据
子查询 2:
SELECT
CLng((nz([UnitsSold])*nz([UnitPrice]))*(1-nz([Discount]))*100)/100 AS [Line Total],
CLng([Line Total]*(1+nz([SalesTaxRate]))*100)/100 AS [Line Total With Tax],
[Line Total With Tax]-[Line Total] AS [Line Tax],
[Inventory Transactions].*
FROM [Inventory Transactions]
WHERE ((([Inventory Transactions].OrderID) Is Not Null));
支付总额查询:
SELECT DISTINCTROW Payments.OrderID,
Sum(Payments.PaymentAmount) AS [Total Payments]
FROM Payments
GROUP BY Payments.OrderID;
子查询 1:
SELECT
[Balance Due By Customers Subquery2].OrderID,
Sum([Balance Due By Customers Subquery2].[Line Total]) AS [SumOfLine Total],
Sum([Balance Due By Customers Subquery2].[Line Tax]) AS [SumOfLine Tax],
Sum([Balance Due By Customers Subquery2].[Line Total With Tax]) AS [SumOfLine Total With Tax],
[Sum Of Payments Query].[Total Payments]
FROM [Balance Due By Customers Subquery2]
LEFT JOIN [Sum Of Payments Query]
ON [Balance Due By Customers Subquery2].OrderID = [Sum Of Payments Query].OrderID
GROUP BY [Balance Due By Customers Subquery2].OrderID,
[Sum Of Payments Query].[Total Payments];
【问题讨论】:
-
您的查询在哪里需要永远运行?
-
它是一个非常复杂的生成表查询,有 4 个子查询,其中只有一个引用了库存交易表,我删除了库存交易。* 并添加了除那个之外的所有其他列
-
Orderlinenumber 上有索引吗?
-
不应该有一个吗?
-
ok 测试了没有快乐可能会快一点,但不多
标签: sql ms-access vba ms-access-2007