>Appunto... come si fa ad agire sul recordset della sottomaschera
>con ADO?
>Eccoti il file Access completo. Vedi la maschera "RiepilogoFatture"
>e il suo pulsante Comando38 (con etichetta "Aggiorna"). Grazie
>mille
Ho notato in effetti un comportamento strano quando ho provato a debuggare la proprietà Absoluteposition.. Quando sono in debug ottengo -1 al primo ciclo mentre al di fuori del debug ho 0.. Probabilmente è questione di tempi..
Comunque sia l'unico workaround che ho trovato è il seguente:
Dim rs As DAO.Recordset
Set rs = ctl1.Form.RecordsetClone
rs.MoveFirst
While Not rs.EOF
rs.Edit
rs("Pagato") = rs("Pagato") + 5
rs.Update
rs.MoveNext
Wend
Il file VBA completo è questo:
Option Compare Database
Private Sub Comando24_Click()
On Error GoTo Err_Comando24_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "Clienti_dett"
stLinkCriteria = "[Codice]=" & Me![Codice]
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Comando24_Click:
Exit Sub
Err_Comando24_Click:
MsgBox Err.Description
Resume Exit_Comando24_Click
End Sub
Private Sub Comando27_Click()
On Error GoTo Err_Comando27_Click
'DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
Me.Requery
Exit_Comando27_Click:
Exit Sub
Err_Comando27_Click:
MsgBox Err.Description
Resume Exit_Comando27_Click
End Sub
Private Sub Comando38_Click()
Dim frm As Form
Dim ctl1 As Control
Dim ctl3 As Control
Dim int1 As Integer
Dim int2 As Integer
'Dim rst As Integer
' Riga per individuazione errori ed invio a routine di gestione
On Error GoTo Err_Comando38_Click
Me.Refresh
Set frm = Forms("RiepilogoFatture")
Set ctl1 = frm.SubFatture
ctl1.Form.SubdatasheetExpanded = False
ctl1.Form.Recordset.MoveFirst
'While Not (ctl1.Form.Recordset.EOF)
'MsgBox (ctl1.Form.Recordset.AbsolutePosition)
'If ctl1.Form.Recordset.AbsolutePosition > -1 Then
' ctl1!Pagato = ctl1!Pagato + 5
' End If
' ctl1.Form.Recordset.MoveNext
'Wend
Dim rs As DAO.Recordset
Set rs = ctl1.Form.RecordsetClone
rs.MoveFirst
While Not rs.EOF
rs.Edit
rs("Pagato") = rs("Pagato") + 5
rs.Update
rs.MoveNext
Wend
Me.Requery
' Chiusure
'rst.Close
'Set rst = Nothing
'DoCmd.Close acForm, "RiepilogoFatture"
'Clean up objects
Set ctl1 = Nothing
Set frm = Nothing
Set rs = Nothing
Exit_Comando38_Click:
Exit Sub
Err_Comando38_Click:
MsgBox Err.Description
Resume Exit_Comando38_Click
End Sub
Private Sub ReportFatt_Click()
On Error GoTo Err_ReportFatt_Click
Dim stDocName As String
stDocName = "RiepilogoFatture"
DoCmd.OpenReport stDocName, acPreview
Exit_ReportFatt_Click:
Exit Sub
Err_ReportFatt_Click:
MsgBox Err.Description
Resume Exit_ReportFatt_Click
End Sub
Come vedi cambiano solo la copia del recordset e il ciclo..
Semplicemente clono il DAO Recordset e uso i metodi Edit e Update per aggiornare..
Solo distaccandolo dalla form ho potuto evitare la "duplicazione" del primo record modificato.
Inoltre, se cerchi di partire da un record che non è il primo, ripete anche quello.. molto strano davvero..
Fammi sapere se alla fine ci sei riuscito..
Spero possa esserti di aiuto definitivamente..
ciao!
ps: questa cosa ci ha fatto dannare eh?
Alx81 =)
http://blogs.dotnethell.it/suxstellino