我有一个事务更改父表中的某些记录,然后调用函数来更新子表:更改外键并将主键和旧外键保存在Audit表中。
当有8个子表时,代码运行良好没有问题,但后来我添加了另一个要更新的子表,并且在代码运行一段时间后,我在尝试插入审计时遇到以下错误:
超出系统资源
如果我单击调试并等待几秒钟,然后进入代码,它似乎继续,我尝试插入时没有出错,但它实际上并没有插入正确的记录。
Set myWorkSpace = DBEngine.Workspaces(0)
myWorkSpace.BeginTrans
'do some update queries'
Call UpdateChildTables("MasterTable", 1080651)
myWorkSpace.CommitTrans
Public Sub UpdateChildTables(ByVal tableName As String, ByVal masterId As String)
Set rsChildTables = CurrentDb.OpenRecordset("childTables")
ReDim Preserve arrChildTables(4, 1)
rsChildTables .MoveFirst
i = 0
Do While Not rsChildTables .EOF
arrChildTables(0, i) = rsChildTables .Fields(0)'the id in childTables tbl'
arrChildTables(1, i) = rsChildTables .Fields(1)'name of the child tbl'
arrChildTables(2, i) = rsChildTables .Fields(2)'name of PK field in child tbl'
arrChildTables(3, i) = rsChildTables .Fields(3)'name of FK field in child tbl'
ReDim Preserve arrChildTables(4, UBound(arrChildTables, 2) + 1)
i = i + 1
rsChildTables .MoveNext
Loop
rsChildTables .Close
Set rsChildTables = Nothing
j = i
DoCmd.SetWarnings False
For i = 0 To j - 1
'insert into the audit tbl the id in childTables tbl, the primary key, and the foreign key'
'before the foreign key gets updated'
strSql = "INSERT INTO audit ( ChildTablesId, primaryKey, ForeignKey) SELECT " & arrChildTables(0, i) & ", " & arrChildTables(1, i) & "." & arrChildTables(2, i) & ", " & arrChildTables(1, i) & "." & arrChildTables(3, i) & " FROM " & arrChildTables(1, i) & " INNER JOIN track on " & arrPending(1, i) & "." & arrChildTables(3, i) & " = track.sub WHERE track.super = " & masterId
DoCmd.RunSQL strSql
strSql = "UPDATE " & arrChildTables(1, i) & " INNER JOIN Track ON " & arrChildTables(1, i) & "." & arrChildTables(3, i) & " = Track.sub Set " & arrChildTables(1, i) & "." & arrChildTables(3, i) & " = Track.super WHERE track" & tableName & ".master =" & masterId
DoCmd.RunSQL strSql
Next i
DoCmd.SetWarnings True
End Sub
基本上,我的代码识别主表(公司)中的子公司,并将子表(员工)中的外键更新为超级公司的ID。
表跟踪标识超级和子级。我更新主表中超级公司的一些字段,然后更新 childTables 表中列出的所有子表。
我在审核表格中为子表格中的每条记录备份了上一个外键。
插入只选择一条记录。我尝试在线搜索,但所有答案都是针对OleDb或不清楚的。