Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    286

    Nessuna transazione attiva.

    Ciao a tutti,
    utilizzo questo codice per modificare un elenco di scatole che si trova nel mio archivio.

    codice nel'allegato (il forum non mi lasciava salvare il messaggio perchè superavo i 13000 caratteri)

    soltanto che mi da l'errore

    Microsoft OLE DB Provider for ODBC Drivers
    error '8004d00e'

    Nessuna transazione attiva.

    /com_riposiziona/db.asp, riga 297

    sulla riga ConnUBI.CommitTrans

    se come variabile iniziale

    elScatole = request("elencoScatole")

    inserisco

    2017113 C02-P1-F01-AA-R01 2
    2017114 C02-P1-F01-AA-R01 2
    2017115 C02-P1-F01-AA-R01 2

    numero scatola - ubicazione in magazzino - bancale, valori separati da TAB, che suddivido con split.
    Controllando sulla tabella le prime due righe sono aggiornate correttamente e va in errore solo sull'ultima.

    Mi sapete aiutare? grazie
    File allegati File allegati
    Da un grande potere derivano grandi responsabilità

  2. #2
    è perché tu apri UNA transazione all'inizio e poi tenti di committarla n volte dentro un ciclo. La prima va bene. le altre ovviamente falliscono

  3. #3
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    286
    Grazie optime, ho capito, allora sposto il controllo if sugli errori fuori dal ciclo.
    Però fammi capire bene, se faccio girare lo script del mio esempio con questi dati
    2017113 C02-P1-F01-AA-R01 2
    2017114 C02-P1-F01-AA-R01 2
    2017115 C02-P1-F01-AA-R01 2
    i valori dei record 2017113 e 2017114 vengono aggiornati, dovrebbe darmi errore già dopo il primo commit su 2017113 o sbaglio?
    Da un grande potere derivano grandi responsabilità

  4. #4
    Quote Originariamente inviata da abellos Visualizza il messaggio
    .... già dopo il primo commit ...
    Questo passaggio mi fa capire che non mi sono spiegato bene.

    Ogni begin transaction vuole un solo commit, o, in caso di errore, un solo rollback

    Quindi, inizia la transazione e fa' il tuo ciclo. Se, all'interno del ciclo, trovi un errore, fai rollback ed esci dal ciclo. Se alla fine del ciclo non hai avuto errori, fai la commit.

    A questo punto ti devi chiedere se serve davvero usare le transazioni, che servono per fare una serie di operazioni sul db che debbono TUTTE andare a buon fine ASSIEME: se solo una delle N operazioni va in errore, con la rollback riporti tutto a com'era prima di cominciare.

    Se non hai questa esigenza, semplicemente NON usare le transazioni, che sono comunque una fonte di stress per il db (durante la transazione, operi su una sorta di db parallelo/temporaneo, invisibile agli altri utenti).

    Spero di essermi spiegato, in caso contrario chiedi.

  5. #5
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    286
    Si avevo capito gia' prima che si deve avere una sola begintrans e un solo commit o rollback, però mi chiedevo come mai il mio script aggiornava 2 record e poi andava in errore, avrebbe dovuto aggiornare 1 solo record ed andare in errore visto che al secondo passaggio c'era già stato il commit per il primo record, era questo che non mi tornava.
    Da un grande potere derivano grandi responsabilità

  6. #6
    che cos'è "il commit per il primo record"? eppure hai detto di aver capito che va fatto UN SOLO commit (alla fine)...

  7. #7
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    286
    intendo nel mio codice errato, facevo il commit ad ogni ciclo sbagliando ma i record aggiornati erano 2 e non solo 1 come penso avrebbero dovuto essere
    Da un grande potere derivano grandi responsabilità

  8. #8
    il secondo te lo aggiornava "normalmente", e cioè fuori dalla transazione. Poi l'errore avveniva sul commit, perché stavi tentando di chiudere una transazione non aperta (l'avevi già chiusa)

  9. #9
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    286
    grazie ho capito
    Da un grande potere derivano grandi responsabilità

  10. #10
    poi facce vede' come hai risolto

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 © 2021 vBulletin Solutions, Inc. All rights reserved.