Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 13 su 13
  1. #11
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    xpiacere e' la prima volta che utilizzo la transazione...

    puoi controllare se e' giusta?

    ho inserito un ogetto IBTransaction sulla form e al clik dell'OK:
    codice:
    procedure TFrmMovimenti.BtnOKClick(Sender: TObject);
    begin
    
       IBTransaction1.Free ;
       IBTransaction1.StartTransaction ;
    
       IBDatasetTestata.ApplyUpdates ;
    
       IBDataSetDettaglio.ApplyUpdates;
    
       IBTransaction1.Close ;
       I
    end;
    come devo fare x controllare se la transazione e' andata a buon fine?

    grazie

  2. #12
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Non ne hai azzeccata una...

    Scherzi a parte, ogni componente IBTransaction rappresenta una transazione, poichè è possibile averne di multiple, ma questo discorso esula dal nostro scopo.

    La transazione ti permette di eseguire più UPDATE, DELETE e INSERT e di renderle effettive in modo atomico (tutte assieme, come fossero un'unica operazione) e visibili agli altri utenti oppure di rifiutarle nella loro interezza.

    In genere, qualsiasi DataSet IBX deve fare riferimento ad un componente IBTransaction.

    Quando avvi un'operazione di modifica (entri in modalità Edit oppure Insert), una transazione viene avviata automaticamente (senza la necessità di chiamare StartTransaction).

    Mi domando quali errori vengano restituiti dal tuo codice se richiami il metodo Free che distrugge il componente.

    Gli unici metodi che ti possono servire sono CommitRetaining e RollbackRetaining che, richiamati dal componente IBTransaction, confermano o annullano le operazioni eseguite nel contesto della transazione.

    Pertanto, quando premi il pulsante di salvataggio, applica le modifiche e richiama la CommitRetaining per confermare l'intero volume di operazioni comprese nella transazione.

    Il pulsante di annullamento, invece, dovrà richiamare RollbackRetaining per effettuare l'operazione inversa.

    La chiamata a StartTransaction non è necessaria, in quanto se non vi è alcuna transazione attiva, essa viene automaticamente avviata quando inizi a modificare i dati.

    Se i dati non sono validi, gli errori vengono segnalati in fase di Post, quindi la conferma della transazione provoca difficilmente errori, e se lo fa significa che c'è un problema grave, probabilmente infrastrutturale, diverso dalla problematica di convalida dei dati.

    Gli errori sono sempre segnalati sottoforma di "eccezioni" in Delphi, e questo risulta particolarmente comodo anche in questo frangente: siccome l'istruzione di CommitRetaining della transazione segue la chiamata a ApplyUpdates, se quest'ultima non va a buon fine, l'eccezione generata e corrispondente all'errore impedisce anche di confermare la transazione, portando poi alla visualizzazione del consueto messaggio predefinito da parte di Delphi.

    Scusa ma questo argomento è davvero troppo vasto, le considerazioni e le indicazioni sono veramente parecchie e, come puoi vedere, per pochi concetti si scrive una buona mezz'ora.

    Io ti suggerirei di comprare un bel librino, magari su Amazon.

    Ad esempio, su "Mastering Delphi 7" (in inglese) di Marco Cantù c'è un capitolo intero sui componenti dbExpress e InterBase Express, con parecchie indicazioni teoriche e pratiche anche sull'uso dei database, in particolare InterBase/FireBird, per organizzare al meglio il progetto.

    Secondo me, se procedi al buio così a tentoni, rischi di distribuire poi un'applicazione che funziona, se usata correttamente, nelle tue mani, ma potrebbe magari causare una perdita di dati o incongruenze dal cliente.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #13
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    scusate...ho sbagliato a scrivere il messaggio qui

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