Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326

    [delphi] firebird sincronizzazione tabella

    Ciao a tutti,

    ho una tabella: TabellaMovimenti

    se due o più utenti richiamano e modificano i dati dello stesso record contemporaneamente.., alla fine il record avrà i valori impostati dall'ultimo utente che li ha postati.

    il mio problela nasce nel momento in cui un utente salva un valore Foreign Key..
    in questo caso può succedere di perdere la referenza verso una ulteriore tabella.

    in che maniera devo procedere per eliminare questo tipo problema?
    devo agire sull'eveno BeforePost?

    grazie

  2. #2
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Non ti so dire, firebird l'avrò usato due volte, ma in generale non riesci mediante questi approcci, ti serve una transazione (vera e propria) ACID o un lock sulla tabella, magari con un timeout che quando scade fa saltar fuori un messaggio "non posso scrivere il record")

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ciao,

    la situazione è cosi:
    tabellaMovimenti--> con transazione1

    poi da un'altra postazione effetuo l'assegnazione del field FKey con transazione2
    posto transazione2 scrivendo il field FKey

    posto transazione1 e il filed FKey risulta non assegnato


    sbaglio?

  4. #4
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Vagamente ricordo con firebird che c'è SET TRANSATION con ISOLATION LEVEL a SERIALIZABLE e LOCK_TIMEOUT o qualcosa del genere.
    Spiacente ma l'ho abbandonato praticamente un 10 anni fa

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da 123delphi321
    se due o più utenti richiamano e modificano i dati dello stesso record contemporaneamente.., alla fine il record avrà i valori impostati dall'ultimo utente che li ha postati.
    Devi gestire la riconciliazione, cioè verificare le eventuali modifiche ad altri campi del record che vai ad aggiornare con una versione che potrebbe essere differente da quella iniziale di partenza.

    Che componenti usi per accedere ai dati?

    Se adoperi la libreria dbExpress e il componente TClientDataSet, configurando il componente TDataSetProvider (in particolare, la proprietà UpdateMode) puoi implementare tutti gli scenari che preferisci senza necessariamente bloccare l'aggiornamento del record con lock manuali o transazioni.

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

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

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.