+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Workspaces and transaction

  1. #1
    bertelli.davide non  in linea Scolaretto
    Scopo:
    All'apertura di una form tramite il metodo new form_Nome del form, avrei bisogno di creare un workspace per l'utilizzo dei metodi BeginTrans, CommitTrans e Rollback.
    Tutto funziona fino a che utilizzo Set wks = DBEngine.Workspaces(0).
    Quando utilizzo Set wks = DBEngine.Workspaces(frmWksName), le wks.BeginTrans, wks.CommitTrans e wks.Rollback vengono ignorate.
    Qualcuno ha avuto mai lo stesso problema?
    Come posso risolverlo?

    Grazie
    D.

    Private frmWks As DAO.Workspace
    Private frmWksName As String
    Private wks As DAO.Workspace
    Private dbs As DAO.Database
    Private rst As DAO.Recordset

    Private Sub Form_Open(Cancel As Integer)

    On Error GoTo ErrHandler

    If Not SetSource Then
    Cancel = True
    Exit Sub
    End If

    Me.BtnEsci.Enabled = True
    Me.BtnModifica.Enabled = True
    Me.BtnAnnulla.Enabled = False
    Me.BtnSalva.Enabled = False

    Me.AllowAdditions = False
    Me.DataEntry = False
    Me.AllowDeletions = False
    Me.AllowEdits = False
    Me.AllowFilters = True

    ErrHandler_Exit:

    Exit Sub

    ErrHandler:

    MsgBox Error$
    Resume ErrHandler_Exit

    End Sub

    Private Function SetSource() As Boolean

    On Error GoTo ErrHandler

    CreateFormWorkspace

    Set wks = DBEngine.Workspaces(frmWksName)
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(rstSource, dbOpenDynaset)

    Set Me.Recordset = rst

    SetSource = True

    ErrHandler_Exit:

    Exit Function

    ErrHandler:

    SetSource = False

    MsgBox Error$
    Resume ErrHandler_Exit

    End Function

    Private Sub CreateFormWorkspace()

    On Error GoTo ErrHandler

    frmWksName = "#Workspace " & Trim(Str(Me.Hwnd)) & "#"

    Set frmWks = CreateWorkspace(frmWksName, "admin", "", dbUseJet)
    DBEngine(0).Workspaces.Append frmWks
    DBEngine(0).Workspaces.Refresh

    ErrHandler_Exit:

    Exit Sub

    ErrHandler:

    MsgBox Error$
    Resume ErrHandler_Exit

    End Sub

  2. #2
    Usa i tag code per il codice. Vedi regolamento
    ℹ️ Leggi di pi su AntonioG ...

  3. #3
    Quote Originariamente inviato da bertelli.davide Visualizza il messaggio
    ...
    Tutto funziona fino a che utilizzo Set wks = DBEngine.Workspaces(0).
    Quando utilizzo Set wks = DBEngine.Workspaces(frmWksName), le wks.BeginTrans, wks.CommitTrans e wks.Rollback vengono ignorate.
    ...
    Private Function SetSource() As Boolean
    ..
        Set wks = DBEngine.Workspaces(frmWksName)
        Set dbs = CurrentDb
        Set rst = dbs.OpenRecordset(rstSource, dbOpenDynaset)
    ...
    
    L'errore sta nell'uso di CurrentDb, funzione che punta a DbEngine(0)(0), cio al Database con indice 0 nella collection Databases che appartiene al Workspace con indice 0 nella collection Workspaces di DbEngine.
    Nel momento in cui hai creato un nuovo Workspace e su questo vuoi aprire la Transaction, operazione che nel codice non si vede, su quello che devi cercare il database (presumibilmente con indice 0 ma non lo sappiamo) e i recordset su quest'ultimo, non al Workspace 0.
    Detto in un altro modo: con l'uso di CurrentDb per riferirti ad un oggetto Database sul quale aprire i recordset ti sei spostato in un Workspace sul quale non c' alcuna transazione aperta.

  4. #4
    bertelli.davide non  in linea Scolaretto
    Non capisco......
    Il db uno solo (Currentdb) con una workspace diversa.(DbEngine(0)(0,1,2,3..)
    Dovrei aprire una connessione allo stesso db?
    Grazie

  5. #5
    Quote Originariamente inviato da bertelli.davide Visualizza il messaggio
    Non capisco......
    La Transaction funziona a livello di Workspace. Sei tu che hai voluto aprire un workspace ad hoc. Serve davvero? Se s, ok. Se no... non lo so.
    Per in presenza di due workspace non puoi usare CurrentDb per riferirti ad un database diverso da DbEngine(0)(0).

  6. #6
    bertelli.davide non  in linea Scolaretto
    Cmq ho provato il tuo suggerimento....Funziona!

    Grazie

  7. #7
    bertelli.davide non  in linea Scolaretto
    Cerco di spiegare....
    Un progetto che implica l'apertura dello stesso form in pi istanze.
    Voglio sfruttare le begintrans,rollback e committrans per la modifica o l'inserimento dei record.
    Ora ipotizza che sul primo form sono aperto in modifica sul record 7. Apro una seconda istanza e vado in modifica del record 3 e lo salvo (committrans).
    Chiudo il secondo form e torno al primo. Finisco la modifica e salvo(Committrans).
    ora la workspace la stessa. Che succede alle mie transazioni?
    Per cui ho optato (Forse erratamente) per l'utilizzo di transazioni diverse per ogni istanza del form che apro.
    Alla chiusura viene distrutta.

    Grazie

  8. #8
    Quote Originariamente inviato da bertelli.davide Visualizza il messaggio
    ...Ora ipotizza che sul primo form sono aperto in modifica sul record 7. Apro una seconda istanza e vado in modifica del record 3 e lo salvo (committrans).
    Il tutto in monoutenza, solo tu? E' una situazione che non conosco, non so aiutarti. Dovrei fare qualche esperimento concreto per imparare una cosa nuova, cosa che mi stuzzica ma che in questo momento impraticabile.

  9. #9
    bertelli.davide non  in linea Scolaretto
    Si. Non tanto strano....
    Mentre inserisci o modifichi un record, potrei/potrebbero avere l'esigenza di consultare un altro record e apportare modifiche allo stesso, per poi proseguire con la modifica o il caricamento del primo.
    Una multiutenza in monoutenza!

  10. #10
    Davide.. hai completamente ignorato la mia raccomandazione ad usare i tag code per il codice nel fuo primo post. Sarebbe bene farlo...
    ℹ️ Leggi di pi su AntonioG ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Transaction esatta
    Da sanfra nel forum PHP
    Risposte: 0
    Ultimo Post: 14-08-2007, 08:23