Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135

    [Delphi] deadlock update conflict witch concurrent update

    Ho un db firebird 1.5 sul un server in azienda.

    il mio programma, che utilizzano in circa 20 persone, funziona senza problemi.

    mi è stato chiesto di aggiungere x 2 utenti, un memo, che abbia le funzioni di una chat. mi spiego:

    abbiamo 2 utenti, tutti e due sulo stesso cliente, e col memo davanti..

    l'utente 1 decide di inserire un messaggio tramite apposita finestra..
    il messaggio viene salvato e visualizzato sul memo..

    a questo punto io vorrei che l'utente 2, veda in breve tempo, quello che l'utente1 ha scritto..

    tramite un pulstante refresh, o qualsisasi altro metodo, mi visualizzi le modifiche fatte dagli altri... tipo chat...

    il problema è che mi sce sto errore:

    "deadlock update conflict witch concurrent update"

    anche se uno inserisce e l'altro refresha a distanza di tempo...

    il refresh ho provato a farlo con un refresh table ma non succede niente, ho provato con apertura e chiusura tabella ma mi da questi errori.. ho provato la commit, la commitretaining, ma niente..

    se 2 utenti aprono 1 eterminato cliente nello stesso momento, esce questo errore quando qlc cerca di modificare.

    come posso fare?!

  2. #2
    E' strano che anche con la Commit non venga risolto l'errore.
    Prova a vedere questo articolo redatto da Borland Link


  3. #3
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    no neanche con la commit..

    ho letto l'articolo ..

    però dice che l'errore può essere ridottotenendo la transazione molto corta... questo non posso farlo purtroppo...

    e poi non vedo cosa cambierebbe...

    non capisco, addiritura con access si può lavorare contemporaneamente sullo stesso record, e non si può in delphi?!..


  4. #4
    Prova vedere questo topic


  5. #5
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    mmmmh....



    ho risolto il problema del deadlock

    grazie mille

    ora il problema è far vedere i dati aggiornati ai 2 utenti

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Esprimo due opinioni riguardo la questione.

    Innanzitutto, secondo il mio punto di vista, è un grande spreco utilizzare un database client/server SQL per scambiare un semplice messaggio tra più utenti appartenenti ad una rete: sarebbe più consono utilizzare direttamente socket di rete attraverso i componenti Indy e realizzare un apposito sistema di chat che viaggi in modo del tutto separato dall'editing del database che dovrebbe essere esclusivamente riservato ai problemi gestionali.

    In secondo luogo, la visibilità o meno di dati inseriti, cancellati o modificati dipende dal livello di isolazione scelto per le transazioni; ad esempio, potrebbe essere necessario eseguire una Commit della transazione in cui hanno luogo le memorizzazioni dei messaggi per poterle rendere visibili a tutti gli utenti.

    Lasciamo stare quello che è possibile fare con Access e non paragoniamolo minimamente a FireBird (non a Delphi, poichè è solo un compilatore e un linguaggio, quindi le possibilità sono determinate tutt'al più dalle tecnologie utilizzate: librerie, piattaforme, basi di dati, ecc.).

    Io comunque spingerei sulla prima strada che ti ho indicato, obiettivamente anche per un motivo di performance, oltrechè per un motivo di logica, senza contare quanta memoria viene sprecata sul server con transazioni perennemente aperte per supportare l'invio e la ricezione di messaggi.

    Nello sviluppare applicazioni, io mi sto sempre più orientando verso modalità disconnesse, cioè approcci che prevedono lo scaricamento dei dati necessari dal server e il loro upload (attraverso opportuni statement SQL) solo in fase di conferma, tenendo la transazione il più corta possibile, per risparmiare memoria sul server e ottimizzare il traffico di rete, nonchè incrementare le prestazioni dei programmi.

    Spero di averti fornito indicazioni utili, anche se forse non è la soluzione diretta del tuo quesito.

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

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

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    allora...

    sicuramente esiste un metodo migliore da quello che utlilizzo

    il problema è che questo programma, è stato creato x un determinato ufficio, ed ha determinate caratteristiche..

    quello che sto cercando di fare adesso, mi è stato chiesto di aggiungerlo al programma, e di renderlo utilizzabile solo x 2 determinate persone..

    purtroppo devo cercare di far combaciare le 2 cose.. sarebbe piu comodo fare un prog apposta x queste 2 persone (vogliono addirittura un avviso tipo allarme quando uno dei due scrive )..
    ma non mi è permesso farlo.. perchè vogliono tutto sullo stesso programma.

    ora, io sinceramente sono all'oscuro delle funzionalità dei componenti indy in questo tipo di progetto...
    se potessi spiegarmi rapidamente o linkarmi qlcs mi faresti un favore

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da Oasis81
    il problema è che questo programma, è stato creato x un determinato ufficio, ed ha determinate caratteristiche..
    La soluzione che ti ho suggerito non necessita di nulla di più o di meno rispetto a quello che hai già; inoltre, le caratteristiche di cui deve essere dotato un software non pregiudicano necessariamente il mezzo adottato per ottenerle, no?

    Originariamente inviato da Oasis81
    quello che sto cercando di fare adesso, mi è stato chiesto di aggiungerlo al programma, e di renderlo utilizzabile solo x 2 determinate persone..
    Non vedo il problema.

    Originariamente inviato da Oasis81
    purtroppo devo cercare di far combaciare le 2 cose.. sarebbe piu comodo fare un prog apposta x queste 2 persone (vogliono addirittura un avviso tipo allarme quando uno dei due scrive ).. ma non mi è permesso farlo.. perchè vogliono tutto sullo stesso programma.
    Sì, diciamo che ti stanno pagando per sviluppare un surrogato di MSN Messenger.

    Originariamente inviato da Oasis81
    ora, io sinceramente sono all'oscuro delle funzionalità dei componenti indy in questo tipo di progetto...
    se potessi spiegarmi rapidamente o linkarmi qlcs mi faresti un favore
    Il link te l'ho indicato, ma forse - per via dei colori del forum - non era ben visibile.

    Puoi trovare risorse (articoli, tutorial, esempi) sul sito ufficiale; se hai Delphi 6/7, dovresti avere tali componenti già installati.

    Usando i componenti IdTCPServer e IdTCPClient, puoi instaurare una connessione tra i due computer in esame attraverso un socket di rete e permettere loro di inviare e spedire messaggi oppure comandi seguendo un protocollo stabilito da te.

    Quando dovrai indicare l'uno all'altro che sta scrivendo, voglio proprio vedere come farai attraverso il database. :rollo:

    Se vuoi un esempio delle potenzialità dei componenti Indy, dai un'occhiata su questa pagina; l'esempio "ScreenThief" è molto interessante e istruttivo.

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

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

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    ah si ora lo vedo il link di prima..

    io utilizzo delphi 2005, ora guardo un po tutto e poi vedo che fare... anche perchè quello che scrivono deve rimanere memorizzato nel memo...


    grazie

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da Oasis81
    io utilizzo delphi 2005, ora guardo un po tutto e poi vedo che fare... anche perchè quello che scrivono deve rimanere memorizzato nel memo...
    Se utilizzi Delphi 2005, dovresti avere i componenti Indy installati (ammesso che tu stia sviluppando un'applicazione VCL oppure VCL.NET).

    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.