在事务

时间:2016-02-14 10:42:16

标签: sql vba ms-access dao

我有一个事务更改父表中的某些记录,然后调用函数来更新子表:更改外键并将主键和旧外键保存在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

enter image description here

基本上,我的代码识别主表(公司)中的子公司,并将子表(员工)中的外键更新为超级公司的ID。

跟踪标识超级和子级。我更新主表中超级公司的一些字段,然后更新 childTables 表中列出的所有子表。

我在审核表格中为子表格中的每条记录备份了上一个外键。

插入只选择一条记录。我尝试在线搜索,但所有答案都是针对OleDb或不清楚的。

enter image description here

0 个答案:

没有答案