【发布时间】:2016-12-18 12:23:48
【问题描述】:
MS Access 2013
我的目标是建立一个人行横道表,但我无法加入备忘录/长文本字段并且使用带有 where 语句而不是加入的更新查询效率低下并且挂起,所以我决定构建一个字典来填充它,并通过查找 ID 填充下一列,问题是我遇到了“溢出”问题 - 我的假设是 RAM 限制。我的工作是尽可能多地填充字典,从该子集中填充我能填充的内容,清除字典并用下一批再次填充 - 冲洗重复。但是,在第一批运行并从字典中清除后,我在尝试放入“空”字典的下一个键/值对上出现溢出错误——我不知道为什么。
理想的 JOIN SQL 语句(带有长文本/备注问题):
UPDATE [ID Crosswalk] INNER JOIN [1 Clean Reasons] ON [ID Crosswalk].Reason = [1 Clean Reasons].Reason SET [ID Crosswalk].CR_ID = [1 Clean Reasons].[Reason];
WHERE SQL 语句(不起作用/挂起):
UPDATE [ID Crosswalk], [1 Clean Reasons] SET [ID Crosswalk].CR_ID = [1 Clean Reasons].[Reason]
WHERE ((([ID Crosswalk].Reason)=[1 Clean Reasons].[Reason]));
VBA字典解决(溢出错误):
Dim CRtbl as DAO.Recordset
Dim CRDictNT as Dictionary
Set CRDictNT = New Dictionary
'Fill CR Dict
CRtbl.MoveFirst
On Error GoTo PrintCR
Do Until CRtbl.EOF
Do Until CRtbl.EOF
CRDictNT.Add CStr(CRtbl("Reason")), CInt(CRtbl("CR_ID")) 'CR_ID by Reason
CRtbl.MoveNext
Loop
PrintCR:
CWIDtbl.MoveFirst
Do Until CWIDtbl.EOF
If Not IsEmpty(CRDictNT(CWIDtbl("Reason"))) Then
CWIDtbl("CR_ID") = CRDictNT(CWIDtbl("Reason"))
End If
CWIDtbl.MoveNext
Loop
CRDictNT.RemoveAll 'these three lines are
Set CRDictNT = Nothing 'my attempts at clearing
Set CRDictNT = New Dictionary 'the item from RAM.
Loop
CRtbl.Close
【问题讨论】:
-
为什么首先需要备忘录/长文本字段?
标签: sql vba ms-access overflow ms-access-2013