
Originariamente inviato da
Max.Riservo
Comunque : "Dice il saggio : tutto è bene quel che finisce bene" ... "Ebbene sì maledetto Access ! Hai vinto anche stavolta !"
Aggiunge il Phil: perché quello che NON funzionava domenica adesso funziona?
Siccome tirava aria di sfida, ho provato a tornare indietro. E non ci riesco, non riesco ad andare "in errore".
On Error Resume Next
If IsNull(Me.cmbTabelle.Value) Then Exit Sub
Dim strTabella As String
strTabella = Me.cmbTabelle.Value
Dim strSQL As String
strSQL = "SELECT * FROM [" & strTabella & "]" 'perché fa comodo con altre prove, senza riscrivere tutto
Dim wrkAcc As DAO.Workspace
Dim dbs As DAO.Database
' Create a new Microsoft Access workspace.
Set wrkAcc = DBEngine.CreateWorkspace("ANCF_Wrk", "admin", "", dbUseJet)
Set dbs = wrkAcc.OpenDatabase(DBEngine.Workspaces(0).Databases(0).Name)
dbs.QueryDefs.Delete ("DummyExportQuery")
Application.RefreshDatabaseWindow
On Error GoTo 0
dbs.QueryDefs.Refresh
dbs.CreateQueryDef "DummyExportQuery", strSQL
Me.SM_Continuous.SourceObject = "Query.DummyExportQuery"
Set dbs = Nothing
Set wrkAcc = Nothing
Ad eccezione dell'uso di una variabile per la SQL (solo perché facendo le varie prove è molto più semplice avere quella stringa in una variabile facile da digitare) è esattamente il codice che aveva già pubblicato (e prima provato) Max.Riservo. Adesso funziona. Domenica no.
L'unica cosa che potrei pensare di questa "assenza di problemi" (notare che sto scrivendo perché non riesco ad avere problemi!) è che se in una fase di prova va in errore e non si chiude Access anche dal task manager (perché anche se sembra chiudersi in realtà rimane là sotto a lavorare, a volte) anche le successive prove, apparentemente fatte in una situazione nuova e pulita sono influenzate da quell'istanza di MsAccess che gira sotto. Ed ovviamente adesso non riesco ad avere questa situazione, perché anche se con qualche errore più o meno intenzionale Access si chiude a dovere.
Aggiungo, per la cronaca:
If IsNull(Me.cmbTabelle.Value) Then Exit Sub
Dim strTabella As String
strTabella = Me.cmbTabelle.Value
Dim strSQL As String
strSQL = "SELECT * FROM [" & strTabella & "]"
CurrentProject.Connection.Execute "DROP Table DummyExportQuery"
CurrentProject.Connection.Execute "CREATE View DummyExportQuery AS " & strSQL
senza bisogno di aprire un workspace ad hoc diverso da quello sul quale c'è la transazione aperta.
Ok, non è certo il modo migliore di agire su un file accdb, però funzia.