Certo!
Nella maschera M ho inserito:
Private Sub BtnContab_Click()
' sgancia il RecordSource, chiude Form e Tabella e lancia laa
Me.RecordSource = ""
DoCmd.Close acForm, "M"
DoCmd.DeleteObject acTable, "T"
Call Copia_Rinomina 'funziona anche senza "Call"
End Sub
Questo codice però ha un problema: mi avevi suggerito (sul mio precedente help) di utilizzare su Form_Current
If Not Me.NewRecord Then
Controllo.Value = True
altriControlli.locked= True
ma il la procedura si blocca prima della chiamata alla sub Copia_Rinomina e avvia la sub Form_Current, segnalando errore proprio su Controllo.Value=True. Naturalmente M non è più collegata a T tramite RecordSource e appare l'errore di runtime 2448
Se tolgo o commento la riga me.RecordSource = "" la procedura prosegue, chiude M e T, avvia Copia_Rinomina dal modulo che ha il seguente codice
Public Sub Copia_Rinomina()
Dim tblNewName As String
'Forms![Movimenti].RecordSource = "" *commentato perché la maschera è chiusa e restituiva errore
DoCmd.Close acForm, "M" 'è inutile ma non da errori perciò lo lascio
DoCmd.Close acTable, "T" 'è inutile ma non da errori perciò lo lascio
tblNewName = "T" & InputBox("Inserire l'anno di chiusura", "Chiusura contabile")
DoCmd.CopyObject , tblNewName, acTable, "T" 'crea una copia di T col nome T + anno precedente
DoCmd.RunSQL "Delete * FROM [T]" 'cancella tutti i record dalla tabella
DoCmd.RunSQL "ALTER TABLE [T] ALTER COLUMN [Id_Movim] COUNTER(1,1)" 'azzera il contatore della tabella
DoCmd.OpenForm "M" 'riapre la maschera M
End Sub
ma si blocca su
DoCmd.RunSQL "ALTER TABLE [T] ALTER COLUMN [Id_Movim] COUNTER(1,1)"
con errore di runtime 3211 - Il motore del database non può bloccare la tabella "T" perché in uso da una ltro utente o processo.
ma la form è stata chiusa (anche se il recordsource era rimasto agganciato) ed anche la tabella, entrambe addirittura 2 volte (?) in due sub diverse.
Ah, ho creato anche una query contenente lo stesso SQL. Se commento la riga incriminata e lancio manualmente la query l'azzeramento avviene senza problemi ma se inserisco la query prima dell'OpenForm
...
' DoCmd.RunSQL "ALTER TABLE [T] ALTER COLUMN [Id_Movim] COUNTER(1,1)" 'azzera il contatore della tabella *commentata
docmd.OpenQuery("QryCopia_Rinomina")
DoCmd.OpenForm "M" 'riapre la maschera M
End Sub
riappare l'errore 3211.
Scusa per la quantità di testo ma spero in tal modo di essere stato sufficientemente esplicito.