Newsgroup: it.comp.lang.delphi
Titolo: Domande da vero newbie su accessi concorrenti, c/s e n-tier

Ciao a tutti,
scusate la domanda da newbie doc e la lunghezza del messaggio, ma ho alcuni
grossi dubbi su quale architettura usare per un'applicazione che vorrei
creare, un piccolissimo gestionale, utilizzabile su tre-quattro postazioni
al massimo: client/server o n-tier ?
Premetto che vorrei usare Delphi 7 e Firebird.
Finora mi è capitato di fare solo piccoli programmini monoutente, usando
Delphi 2 con il BDE e come database dBase, quindi per me è una materia
completamente nuova (compreso sql).
Il dubbio viene dal fatto che oggi tutto sembra essere orientato su n-tier,
come Ado.Net e DataSnap. Però penso che l'utente medio rimarrebbe parecchio
disorientato alla vista di una eventuale form per il "reconcile error" dopo
aver confermato i dati...
Se non ho capito male: con il C/S questo non dovrebbe succedere perché si
mantiene una connessione (bloccando il record ?) per tutto il tempo che
serve, ma facendo così cosa succede a chi volesse modificare o anche solo
leggere gli stessi dati nello stesso momento ?
Con n-tier invece la connessione avviene solo per il tempo che serve, e si
usano dei dataset caricati in memoria (tipo TClientDataset), ma si ha il
suddetto problema poco user-friendly (per l'utente medio), della dialog per
gestire il "reconcile error". Anche perché secondo me il suddetto utente
potrebbe essere convinto che ciò che sta vedendo a video sono esattamente i
dati presenti in quel momento sul database, anche se magari li ha caricati
mezz'ora fa...
Inoltre, dovessi scegliere per il client/server, quali componenti devo usare
per accedere ad un database (Firebird) in modalità C/S senza usare il BDE ?
Sareste così gentili da chiarirmi le idee o darmi qualche link dove posso
trovare le risposte a questi dubbi ?
Grazie,
Andrea.

 Andrea.
Ciao!
--
Marco Kregar
marco....@FirebirdSQL.it
www.FirebirdSQL.it
"over the bench the goat sings, under the bench the goat dies"

 pagamento).
Per vari motivi sarei più orientato verso IBObjects. Bastano solo i
componenti "core" o è necessario prendere il bundle "data access"
(costosetto) ?
Grazie,
Andrea.

no ?
Esatto.  In questi casi l'unica soluzione valida è implementare (a
mano) il lock pessimistico dei dati.

 mano) il lock pessimistico dei dati.
Non sto capendo bene: quindi dovrei usare una "optimistic lock", ma poi
simulare un lock pessimistico (via codice) dei dati ?   Ma in che modo ?
Puoi darmi un piccolo suggerimento per darmi un'idea, per favore ?
Anche questo non mi è ancora chiaro: normalmente nei gestionali, cosa
succede quando un utente tenta di modificare un record che è in fase di
modifica da parte di un altro utente:
1) il secondo utente viene avvertito che non è possibile aprire in modifica
i dati finché il primo utente non li ha rilasciati (e se impiega diversi
minuti ?)
2) il secondo utente modifica i dati lo stesso, ma quando tenta di
registrarli:
    A) i dati sovrascrivono quelli dell'altro utente o vengono sovrascritti,
a secondo di chi arriva prima (non credo proprio)
    B) la transazione fallisce, vengono caricati i dati aggiornati e si
chiede all'utente di riprovare
    C) viene presentata una schermata con i dati presenti adesso sul
database e quelli che si tenta di registrare (tipo n-tier)
3) altro che mi viene in mente.
Scusate, forse adesso sto andando un po' off-topic...
Grazie,
Andrea.