【发布时间】:2017-03-16 06:55:02
【问题描述】:
我制作了一个 MS Access DB(旧 XP 版本),它曾经可以无缝运行。
我必须添加一个例程来将一些数据从一个表“移动”到另一个,并编写了一个函数来执行此操作。 我一直使用的方法是使用动态记录集(或动态集),但这次它不起作用。 流程正确打开动态集,从一个记录集中查找数据并将其复制到另一个记录集中,但是当 .update 完成后,原始表中不会出现任何内容。
我使用 DAO 3.60。
这是(汇总的)代码:
On Error Resume Next
Dim rstDoc As Recordset
Dim rstAdd As Recordset
Dim rstDocEmessi As Recordset
Dim rstAddDocEmessi As Recordset
Dim Incassato As Integer
Set rstDoc = CurrentDb.OpenRecordset("Documenti", dbOpenSnapshot)
Set rstDocEmessi = CurrentDb.OpenRecordset("TS_DocumentiEmessi", dbOpenDynaset)
Set rstAdd = CurrentDb.OpenRecordset("Addebiti", dbOpenDynaset)
Set rstAddDocEmessi = CurrentDb.OpenRecordset("TS_Addebiti_DocumentiEmessi", dbOpenDynaset)
numDoc = Forms!TS_SceltaStampa!IdDocumento
With rstDocEmessi
rstDocEmessi.AddNew
rstDocEmessi!IdDocOriginale = rstDoc!IdDocumento
rstDocEmessi!Data = rstDoc!Data
rstDocEmessi![#Fattura] = rstDoc![#Fattura]
...
rstDocEmessi!TS_Opposizione = rstDoc!TS_Opposizione
rstDocEmessi!TS_DataPagamento = rstDoc!TS_DataPagamento
rstDocEmessi!IsIncassato = (IIf(Incassato = vbYes, True, False))
rstDocEmessi!IsImportatoInSospesi = False
rstDocEmessi.Update
rstDocEmessi.Close
' Copia Addebiti
If Not (rstAdd.EOF And rstAdd.BOF) Then
rstAdd.MoveFirst
Do Until rstAdd.EOF = True
If rstAdd!Documento = numDoc Then
rstAddDocEmessi.AddNew
rstAddDocEmessi!IdAddebito = rstAdd!IdAddebito
rstAddDocEmessi!Documento = rstAdd!Documento
...
rstAdd!TS_TipoSpesa
rstAddDocEmessi!Calcola = rstAdd!Calcola
rstAddDocEmessi!Totale = rstAdd!Totale
rstAddDocEmessi.Update
End If
rstAdd.MoveNext
Loop
End If
rstAddDocEmessi.Close
rstAdd.Close
TS_Registra = True`
【问题讨论】:
-
为什么要移动记录?可能会使用 INSERT SELECT sql 操作语句而不是操作记录集。
-
除了方法(记录集与 sql)之外,您是否发现我的语法有问题?顺便说一句,我同意你的观点,我习惯于在其他环境(PHP MySQL)中使用 SQL,但在 Access 中使用记录集方式通常可以让我更好地控制正在发生的事情,尤其是在调试情况下......
-
Documenti 是过滤到单个记录的查询吗? Incassato 已声明但未设置。记录集操作没有任何问题。
-
@Versatile:您是否在其他地方解决了您的问题?