Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 3 su 3

Transazione che non funziona ?..

  1. #1
    makikaz non è in linea Novello
    Ciao ho il seguente problema.
    Ho un database dati che risiede su server, quindi ho i vari client con il relativo software e qualche tabella locale.

    Ora devo effettuare una transazione che mi aggiorna una serie di tabelle sul server...la sequenza logica dei miei comandi è la seguente :

    'Attivo la transazione
    Set wrkDefault = DBEngine.Workspaces(0)
    wrkDefault.BeginTrans

    inserisco riga su tabella server
    prelevo l'ultimo id generato dall'inserimento
    aggiorno la mia tabella locale con l'id prelevato
    Inserisco altre righe su altre tabelle su server.

    chiudo la transazione con
    wrkDefault.CommitTrans
    wrkDefault.Close

    Ora mi succede che l'aggiornamento sulla tabella locale non ha effetto, nel senso che non ho errori di runtime ma il dato non viene aggiornato...e questo poi mi da altri errori nel prosieguo dell'elaborazione.

    Chiaramente se elimino le transazioni va tutto bene....
    Cosa c'è di sbagliato ?

    Ciao.

  2. #2
    L'avatar di yronium
    yronium non è in linea Scribacchino
    Quote Originariamente inviato da makikaz Visualizza il messaggio
    Cosa c'è di sbagliato ?
    Un sacco di cose.

    Anzitutto avresti dovuto dare una letta al nostro Regolamento, che fa sempre bene quando si è nuovi. Avresti così intuito che non ci garbano molto i toni sopra le righe, e magari avresti anche scelto un nick un poco più a modo. Vabbé, poco male: puoi leggerlo adesso.

    Inoltre, dato che la sfera di Mago Merlino è andata perduta, sarebbe bene che tu postassi il codice. Per noi è estremamente difficile immaginare cosa può succedere nel codice che tu non hai postato, figurati cosa va storto.

    Tienilo a mente le prossime volte che posterai. Buona permanenza.
    ℹ️ Leggi di più su yronium ...

  3. #3
    makikaz non è in linea Novello
    Chiedo scusa per il Nick...non volevo offendere nessuno....

    Di seguito il codice :

    Main


     Set wrkDefault = DBEngine.Workspaces(0)
            wrkDefault.BeginTrans
            
            InserisciFattura
            nrFattura = PrelevaidFattura()
            InserisciScadenziario nrFattura, "I"
            InserisciCantieri nrFattura, "I"
            If RitenutaAcconto <> 0 Then
               InserisciFatturaRa nrFattura, "I"
            End If
        
            MsgBox "Fattura Inserita", vbInformation
            
            wrkDefault.CommitTrans
            wrkDefault.Close
            
            CurrentDb.Execute "Delete From L_Fornitori_Fatture"
            CurrentDb.Execute "Delete From L_Scadenziario"
            CurrentDb.Execute "Delete From L_Fatture_Cantieri"
    

    Funzioni

     
    Private Sub InserisciFattura()
        
      DoCmd.OpenQuery "Q_Insert_Fornitori_Fatture"
      
    End Sub
    
    Private Function PrelevaidFattura()
    Dim nidFattura As Long
    Dim cSql As String
    Dim ors As DAO.Recordset
    cSql = "Select max(idFattura) From T_Fornitori_Fatture Where codSocieta = " & GetSocieta() & _
           " And codFornitore = " & codFornitore & " And numFattura = '" & NumFattura & "' And " & _
           " CLng(Format([DataEmis], ""yyyymmdd"")) = " & CLng(Format([DataEmis], "yyyymmdd")) & _
           " And ImportoFattura = " & Replace(ImportoFattura, ",", ".")
           
    Set ors = CurrentDb.OpenRecordset(cSql)
    nidFattura = ors.Fields(0)
    PrelevaidFattura = nidFattura
           
    End Function
    
     
     
    Private Function InserisciScadenziario(codFattura As Long, tipo As String)
     Dim cSql As String
     
     cSql = "Update L_Scadenziario set codFattura = " & codFattura
     CurrentDb.Execute cSql
     
     If tipo = "R" Then
        cSql = "Delete From T_Scadenziario Where codFattura = " & codFattura & _
               " And codSocieta = " & GetSocieta() & " And tiposcad='F' And SaldoRata <> 0"
        CurrentDb.Execute cSql
     End If
     
     DoCmd.OpenQuery "Q_Insert_Scadenziario"
     
    End Function
    
    La funzione che contiene il codice
    DoCmd.OpenQuery "Q_Insert_Fornitori_Fatture"
    
    inserisce sul DB sul server il record presente nella tabella (uguale come struttura) locale.

    La funzione PrelevaIdFattura restituisce l'ultimo numero 'staccato'.

    A questo punto sembra che l'aggiornamento dell'ultimo numero sulla tabella L_Scadenziario nella funzione InserisciScadenziario non funziona, perchè mi ritrovo un numero di fattura 'locale' e quando viene fatto l'inserimento sullo scadenziario server si va in errore per chiave doppia.

    Se tolgo le transazioni funziona tutto....


    Ciao e ancora grazie...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Verifica completamento campi maschera prima di transazione
    Da RaoulDuke nel forum Microsoft Access
    Risposte: 4
    Ultimo Post: 28-12-2020, 13:46
  2. Errore transazione 3034
    Da RaoulDuke nel forum Microsoft Access
    Risposte: 11
    Ultimo Post: 26-12-2020, 17:23
  3. Errore transazione 3034
    Da RaoulDuke nel forum Microsoft Word
    Risposte: 0
    Ultimo Post: 25-12-2020, 10:34
  4. Access SQL Server Transazione con blocco tabella
    Da ByD nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 11-07-2013, 14:56
  5. Problema su transazione VB.
    Da maximum nel forum Visual Basic 6
    Risposte: 12
    Ultimo Post: 20-05-2009, 11:34