none
Problemi in fase di salvataggio su SQL Server dopo un errore RRS feed

  • Domanda

  • Salve a tutti,

    Ho un applicativo VB6 che lavora con SQL Server, spesso più utenti su più istanze di questa applicazione

    lavorano contemporaneamente nella stessa LAN, a volte, di rado, capita che uno dei tanti utenti produce un errore

    nell'applicazione, dunque è costretto a chiudere tale applicazione, se dopo che è accaduto questo evento qualcun altro

    utente stava salvando un' operazione nel database, capita che l'applicazione non segnala problemi come se tutto fosse andato bene, tuttavia in questi casi sono costretto a riavviare SQL Server con la conseguenza che tutte le operazioni post-errore non vengono salvati nel DB.

    In pratica, semplificando, se un utente crea un errore su SQL Server, da quel momento gli altri utenti è come se lavorassero correttamente, mentre invece alla fine quel lavoro andrà perso!

    Avete suggerimenti?

    grazie come sempre

    mercoledì 1 aprile 2015 08:08

Tutte le risposte

  • Ciao,

    é una domanda che sarebbe piú appropriato postare nei forum developers:

    https://social.msdn.microsoft.com/Forums/en-US/home

    Per come la vedo io é sul lato applicazione che devi intervenire, SQL fa il suo lavoro, fa il rollback delle transazioni non completate, le eccezioni si gestiscono a livello applicativo.


    You wouldn't demand your Doctor a therapy just because you told him "I don't feel very well"
    You wouldn't expect your accountant to know how much your taxes are just because you told him "I have earned some money"
    Do not expect any IT Pro to suggest you a solution just because you said "It doesn't work"


    • Modificato aperelli mercoledì 1 aprile 2015 08:45 typo
    mercoledì 1 aprile 2015 08:33
  • le operazioni di insert, update o delete verso sql server dall'applicazione vb6 sono eseguite col 

    try/catch

    in modo da intercettare gli errori restituiti da sql server ?


    Edoardo Benussi
    Microsoft MVP - Directory Services
    edo[at]mvps[dot]org

    mercoledì 1 aprile 2015 08:41
    Moderatore
  • Credo di NO, usiamo le istruzioni edit e addnew dei recordset DAO
    mercoledì 1 aprile 2015 13:40
  • mercoledì 1 aprile 2015 14:02
    Moderatore
  • Dal link che mi hai fornito mi suggerisce di usare l'istruzione

    "On error goto Label", cioè una istruzione che intercetta un errore a runtime e mi rimanda ad un codice alternativo posto in una label definita, nel mio caso, come dico nel post, apparentemente il salvataggio va a buon fine, infatti la stessa istruzione di Commit in DAO non mi segnala nulla, però se riavvio SQL Server perdo tutto quanto.

    mercoledì 1 aprile 2015 14:25
  • Se é cosí ti consiglio di cambiare tecnologia di accesso a SQL server, DAO é obsoleto (come VB6), dovresti usare ADO.

    Non sono un programmatore, questa é solo una mia opinione.


    You wouldn't demand your Doctor a therapy just because you told him "I don't feel very well"
    You wouldn't expect your accountant to know how much your taxes are just because you told him "I have earned some money"
    Do not expect any IT Pro to suggest you a solution just because you said "It doesn't work"

    mercoledì 1 aprile 2015 14:48
  • quello era solo un indizio per qualcuno che sa sviluppare in vb6.

    qualcosa di più dettagliato lo trovi qui

    http://www.vbforums.com/showthread.php?343710-Newbie-error-handling-vb6-and-sql-server


    Edoardo Benussi
    Microsoft MVP - Directory Services
    edo[at]mvps[dot]org

    mercoledì 1 aprile 2015 14:58
    Moderatore
  • Ci darò un'occhiata, grazie comunque
    mercoledì 1 aprile 2015 15:15
  • Si tratta di un programma oramai vecchio, risulterebbe antieconomico gestire questo cambiamento.
    mercoledì 1 aprile 2015 15:16
  • Prova anche a vedere lato Sql Server cosa accade, mi sembra strano che una transazione con commit ok in realtà vada persa...e mi sembra di aver capito che dal momento del tuo incident non rilevato anche tutte le operazioni successive da parte di altri utenti vadano perse?

    Cmq lato SqlServer prova a utilizzare Sql Server Profiler per verificare se e come arrivano sul tuo DB le operazioni eseguite dai tuoi client, poi prova a gestire le eccezioni come suggerito da alcuni colleghi tramite statement "On error goto" che ti permette di indirizzare il flusso del programma in caso di errore e di gestirlo (per caporco l'antesignano del try catch).
    Msdn On error : link

    mercoledì 1 aprile 2015 16:14
  • Si tratta di SQL Express, non ha il Profiler
    mercoledì 1 aprile 2015 18:37
  • Ci darò un'occhiata, grazie comunque
    forse mi sbaglio ma questa risposta denota, secondo me, scarsa voglia di risolvere il problema...

    Edoardo Benussi
    Microsoft MVP - Directory Services
    edo[at]mvps[dot]org

    giovedì 2 aprile 2015 07:30
    Moderatore
  • Nel codice che uso io c'è già una gestione degli errori con

    "On error goto label", inoltre tutto il codice è già incluso in una transazione DAO, e non scoppia nessun errore in fase di salvataggio, solo per questo motivo.

    P.S.: Non c'è bisogno di dare giudizi affrettati, Evidentemente voglio carpire altri elementi prima di passare giorni e giorni a fare prove.

    giovedì 2 aprile 2015 13:41