Newsgroup: it.comp.lang.delphi
Titolo: Domandina....

Ciao a tutto il gruppo!
Dopo un po' di lavoro in Java sono tornato a lavorare in Delphi (che bello!)
ma non mi ricordo più un po' di cose...
Mi servirebbe di lockare una tabella (per ora access, poi sarà mysql ma non 
credo che cambi il procedimento) in una fase critica dove leggo e aggiorno un
progressivo da assegnare ad un record su un'altra tabella. Poichè, ovviamente,
il db sarà condiviso, vorrei un consiglio su come gestire la cosa in modo safe.
Il passaggio è già sotto transazione, quindi se qcsa va male rollbacka, però mi
piacerebbe che la tabella dei progressivi fosse lockata durante l'operazione
di lettura scrittura. 
Ho già provato con Table.lockTable sia in read che in write ma sembra 
fregarsene. Inoltre, se io faccio la mia lettura e scrittura via query, la table
che locko (ovviamente l'oggetto nel Datamodule), è la stessa o vado a lockare
solo l'interfaccia alla tabella nel mio ambito?
Aiutatemi please!!
Grazie in anticipo e Delphi rulez!!!
Ciao, 
Fede.

 credo che cambi il procedimento)
Ed invece credo che il punto focale sia questo. Mi risulta che i metodi come
LockTable di TTable ed altri diano problemi sui DB Access, e che le funzioni
per vedere se una tabella è "lockata" falliscano restituendo sempre false.
Non so se ci sia una gabola per evitare ciò, ma se devi passare a mysql
forse conviene iniziare proprio con quello ...
Bye
--
- Carlo -

il db sarà condiviso, vorrei un consiglio su come gestire la cosa in modo safe.
Per interfacciarsi ad access io consiglio sempre i componenti ADO.
Il motore Jet ha un sistema di locking particolare, in questo ng se n'era parlato 
tempo addietro, se vuoi ti posto il link del thread su google.
Come dicevo, il jet ha un sistema di locking particolare, puo' lockare a livello di pagina, 
ma non ha i livelli di isolamento come i db piu' complessi.
Non credo si possa lockare direttamente una tabella, io lascio che sia il motore a farlo per me:
imposto la proprieta' della ADOTable locktype, e il jet si arrangia.
Se devi poi passare a mysql, mi accodo al suggerimento di Bertuccini: lascia perdere access, e
vai subito sotto mysql.
Ciao
--
Buon      .-""",
 Natale    /____, \
          {_____}`{} 
Buone    (/ . . \)
 Feste   {`-=^=-`}
         {   `   }
          {     }jgs
Morde.     `-,-`

Ciao, grazie per le risposte!
Allora, il fatto č che "temporaneamente" mi sono appoggiato ad access
per creare il db perchč č piů veloce(da gestire), mentre aspetto i
tracciati record
finali dal cliente per creare il db mysql.
Non userň mai ado, conosco i metodi di locking su ado stesso ma in
questo momento volevo sapere, visto che i componenti che uso, sia per
access che per
mysql, sono ODBC e BDE, se il locking funziona o meno o eventualmente
un altro
metodo per evitare il "conflitto di interessi" ;) sui progressivi.
Io intanto sto facendo cosě, a grandi linee:
try
  myDb.StrartTransaction;
 
  if CheckCorrettezzaCampi() then
  begin
    leggo progressivo via query
    myTable.FieldByName('cod').asString := progressivo di cui sopra; 
    myTable.Post;
    aggiorno il progressivo a +1
    myDb.Commit;
  end;   
except
   MessageDlg('Sono Cazzi', mtWarning, [mbOk], 0);
   myDb.Rollback;
end;
Questo puň essere sufficiente?
Grazie ancora a tutti,
Ciao, 
Fede.

 access che per mysql, sono ODBC e BDE,
non so se ora sia cambiato qualcosa, ma quando ho usato
"access + odbc + bde"
l' unico ricordo che mi è rimasto è una lentezza esasperante.
Non puoi usare Paradox al posto di access? La il locking dovrebbe
funzionare.
--
- Carlo -