Mancata memorizzazione

di il
1 risposte

Mancata memorizzazione

Buonasera a tutti,
uso Mysql da 10 anni ormai, programmo in Delphi e Lazarus, ma da poco, nello sviluppo di un nuovo applicativo, mi sono accorto di avere un problema: saltuariamente i record che memorizzo nella tabella spariscono.
Cioè io credo di inserire o aggiornare un record ma in realtà poi non c'è un bel niente.
Elenco qui di seguito altri dati sul mio programma:
-le tabelle sono MyIsam
-non ci sono molti record, al momento circa 8000.
-la versione di mysql è 5.0, lo so è un po' vecchiotta ma al momento non posso cambiarla.
-riporto un frammento del codice che non funziona:
  while ... do
  begin
     fdm.tpresa_pre.AppendRecord([null,....]);
     ...
  end;
  tpresa_pre.ApplyUpdates;    
  lab_anno.Transaction.CommitRetaining;
Ripeto che è una cosa che mi succede occasionalmente, in media su cento insert o update una non va a buon fine.
Ho trovato su qualche altro forum che la cosa è successa a qualche altro programmatore, anche con altri linguaggi, per questo motivo ho messo questo post in questa sezione e non nella sezione Delphi, spero di non aver sbagliato.
Grazie in anticipo a chi avrà qualche suggerimento da darmi.
Saluti.

1 Risposte

  • Re: Mancata memorizzazione

    Il problema NON E' Delphi OPPURE MySQL, ma il motivo del PERCHE' un record sparisce.

    I record possono sparire? SI, ASSOLUTAMENTE!

    Quando?

    Quando, a fronte di una modifica, la TRANSAZIONE NON VIENE TERMINATA CON UNA "COMMIT" MA viene terminata con una ROLLBACK.

    Questo e' PARTE INTEGRANTE del concetto FONDANTE di un database (relazionale e non): ACID

    A)tomico
    C)onsistente
    I)solato
    D)urabile

    https://en.wikipedia.org/wiki/ACI

    Quello che DEVI SAPERE (lo DEVi dal punto di vista teorico E DAL PUNTO DI VISTA PRATICO) e' che le modifiche al DB vanno SEMPRE FATTE all'interno di una transazione che DEVE terminare con COMMIT oppure ROLLBACK.

    Spesso ci si affida all'AUTOCOMMIT attivo in certi DB e certi driver,che dicono che una modifica viene SEMPRE seguita da una COMMIT.
    Ma questo DIPENDE da n-mila altri parametri di configurazione & regole di utilizzo che CONOSCI SOLO TU.

    Ad esempio:
    1) viene fatta la commit SE la connessione viene chiusa dall'utente? Oppure viene fatta una rollback?
    2) viene fatta la commit SE la connsessione viene chiusa perche e' troppo tempo che non viene utilizzata?
    2) viene fatta la commit SE viene useguita una successiva modifica?

    Ecc ...

    Dopo 10 anni di utilizzo di MySQL , queste cose le dovresti sapere a menadito
Devi accedere o registrarti per scrivere nel forum
1 risposte