Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    BeginTrans,Commit e Rollback

    Salve,

    utilizzo connessioni OLEDB su DB Access 2000

    Da molto tempo cerco di capire come mai utilizzando i comandi

    BeginTrans,CommitTrans e RollbackTrans nelle procedure di inserimento e modifica su DB...non noto alcuna differenza

    Forse non è possibile sfruttarli su Access?

    Mi sapete dare delucidazioni?

    Grazie
    visitate www.pcprimipassi.it, il portale italiano per i neofiti del computer

    "Tanto prima o poi ti buco...." disse il baco alla noce!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    che test hai fatto x dire che non noti differenze.
    Ans.

  3. #3
    ma...che ci siano o non ci siano quelle righe, se c'è un errore passa alla gestione dell'errore e non ad esempio da ROLLBACKTRANS...

    Non so...mi sembra che non vengano eseguite...dici che è normale che non si noti nulla di particolare?
    visitate www.pcprimipassi.it, il portale italiano per i neofiti del computer

    "Tanto prima o poi ti buco...." disse il baco alla noce!

  4. #4
    per fare una prova è semplice

    codice:
    cn.begintrans
       cn.execute "update tabella set nomecamponumerico = 0"
    cn.committrans
    
    cn.begintrans
       cn.execute "update tabella set nomecamponumerico = 1"
    cn.rollbacktrans
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  5. #5

    .....

    Ciao,
    le transazioni sono molto utilizzate perchè permettono un corretto funzionamento del database. Mi spiego meglio. Es: se stai utilizzando il database con varie (ma anche 1) tabelle aperte e improvvisamente salta la luce o il tuocomputer ha un problema.....con le transazioni i dati temporaneamente peresenti nella ram non creeranno casino nel database. Cioè quando tu apri una transazione (begin) e cominci a scrivere dei dati .... e poi esegui un committrans i dati sono sicuramente salvati in maniera corretta. Se continui ad inserire dati (es: 2 record) e salta la luce....il database non avrà problemi di dati cambiati ed errori incredibili. tu perderai solamente quesi due record che stavi inserendo prima del salto della luce e gli altri record saranno tutti sistemati correttamente, cioè non ci saranno dati del record 1 che andranno nel record2, ecc.

    PEr quello che posso aver capito io....del tuo problema....se nella gestione degli errori vuoi fare in modo che ci sia rollback non devi fare altro che scrivere De.c.rollbacktrans (De.c = connessione).

    Per testare l'efficacia delle transazioni...inserisci dei dati in un database di access, apri (sempre in access) una tabella e dal prog vb inseriscici dei dati facendo committrans al termine e noterai che non vedi i dati nella tabella access finchè non la chiudi e la riapri.

    scusa per l'italiano e la scrittura, ho poco tempo ....se hai bisogno di altri chiarimenti o semplicemente di una spiegazione meno frettolosa sono qua.CIAO

  6. #6
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    allora, facciamo un pò d'ordine:

    Le transazioni servono per controllare le operazioni da effettuare su un db per evitare incongruenze nei dati presenti sul server.

    Supponiamo di dover realizzare un programma che esegue una o più operazioni su una tabella. E' bene usare le transazioni per evitare di sporcare i dati a causa di errori imprevisti o concorrenza dovuti ad accessi simultanei (nel caso di applicazioni multiutente)

    se devi cancellare dei record ed aggiornarne alcuni puoi fare:
    codice:
    MiaConn.BeginTrans
    'Codice per cancellare i record
    'Codice per aggiornare altri record
    MiaConn.CommitTrans
    in poche parole in presenza di una transazione le modifiche vengono apportate soltanto nel buffer e vengono scritte sul db nel momento in cui si esegue la commit. Nel caso in cui si verifichi un errore allora esegui la RollBack al posto della Commit per evitare di scrivere dati sporchi sul db, pensa ad esempio di lanciare il comando per cancellare e durante la cancellazione si verifica un errore: non potresti fare l'update successiva. Questo è particolarmente delicato nel caso in cui è necessario che la prima operazione vada a buon fine per eseguire la seconda.

    Quindi non sono metodi per gestire gli errori, come avevi erroneamente interpretato, bensì metodi di controllo delle operazioni sui dati.

    Spero di essere stato sufficientemente chiaro.


  7. #7
    Vi ringrazio a tutti...sapevo la teorie e sebbene li avessi già usati non avevo chiaro come potermi accorgere delle differenze in fase di esecuzione

    Lo chiedo perchè ho visto che se lo metto prima, salta tutto(giustamente) e va all'etichetta di gestione errore....E' normale ma pensavo che avendo iniziato una transazione con BeginTrans al generarsi di un errore passasse prima da RollBackTrans e dopo e solo dopo andasse come comandato alla'etichetta della gestione errori.

    Il RollBack lo devo mettere quindi nella parte di codice dove gestisco l'errore?
    visitate www.pcprimipassi.it, il portale italiano per i neofiti del computer

    "Tanto prima o poi ti buco...." disse il baco alla noce!

  8. #8
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    Originariamente inviato da RAVALON

    Il RollBack lo devo mettere quindi nella parte di codice dove gestisco l'errore?
    esatto

  9. #9
    Scusate l'intrusione

    io utilizzo un applicativo vb6 e access.

    Ho un problema con il begintrans ed il committrans

    Praticamente è come se non mi venga riconosciuto il comando
    ho scritto così:

    adocontrolla.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & App.Path & "\biblio.mdb';Mode=ReadWrite;Persist Security Info=False"
    adocontrolla.RecordSource = "select * from tab_autori where nomeautore='" & Text1.Text & "' AND cognomeautore='" & Text2.Text & "'"
    adocontrolla.Refresh


    If (adocontrolla.Recordset.RecordCount > 0) Then
    MsgBox "Autore già esistente!", vbCritical
    Else
    adoautori.begintrans
    adoautori.Refresh
    adoautori.Recordset.AddNew
    adoautori.Recordset("nomeautore") = UCase(Text1.Text)
    adoautori.Recordset("cognomeautore") = UCase(Text2.Text)
    MsgBox "L'Autore è stato inserito", vbInformation
    adoautori.Recordset.Update
    adoautori.CommitTrans
    End If

    perchè mi appare l'errore

    <impossibile trovare il metodo o il membro dei dati>

    Cosa ho scritto male nel mio codice?

    Praticamente il comando committrans non mi diventa "blu"
    E'come se non venisse riconosciuto come un comando.

    Io lavoro con vb6 service pack 6

    Devo fare qualche aggiornamento o aggiungere qualche componente o riferimento al progetto?

    GRAZIE 1000

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non usare un thread di 4 anni fa anche se puo' essere collegato a quello che vuoi tu!

    Ma adoautori cosa e'?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.