シームレスに動作するMS Access DB(旧XPバージョン)を作成しました。MS Access DAOレコードセットの更新が動作しない
テーブルから別のデータを「移動」するルーチンを追加して、これを行う関数を作成しなければなりませんでした。 私が常に使用するメソッドは、ダイナミックレコードセット(またはダイナセット)を使用することでしたが、今回は動作しません。 フローはダイナセットを正しく開き、あるレコードセットのデータを検索して別のレコードセットにコピーしますが、更新が完了すると元のテーブルに何も表示されません。
私は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アクション文を使用する可能性があります。 – June7
アプローチ(recordset vs sql)とは別に、構文に何か間違いがありますか?ところで、私はあなたに同意し、私は他の環境(PHP <-> MySQL)でSQLを使用するのに使用されていますが、レコードセット方法を使用してアクセスすると、特にデバッグ状況で何が起こっていたかを詳細に制御できます... – Versatile
Is 1つのレコードにフィルタリングするクエリを文書化しますか?インカサトは宣言されていますが、設定されていません。レコードセットの操作に間違ったことはありません。 – June7