Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: Maverich - Ottobre 17, 2014, 11:24:23 pm

Titolo: vedere record aggiunti da altri utenti
Inserito da: Maverich - Ottobre 17, 2014, 11:24:23 pm
uso Db Firebird e visualizzo i dati su un DbGrid tramite query,
ora se nella stessa Tabella un'altro utente aggiunge un record, non lo vedo fino a quando non rieseguo la query.

c'e' un e vento che mi permette di sapere se e' stata variata la Tabella , in modo che possa fare un Refresh della query ?

va bene anche riferito ai componneti standard ClientdataSet, SQLDataSet.
Tutti gli eventi che trvo anche in Delphi scattono solo se sono io ad aggiungere un record.

credo sia chiaro ma per scrupolo:
Tabella1 eseguo una query e visualizza ArticoloA, ArticoloB, ArticoloC
come faccio a sapere se un'altro utente aggiunge ArticoloD (perche' nuovo) o rimuove ArticoloA (perche obsoleto)

sembra una cosa da poco, ma se sto facendo un preventivo, non essere llineato, diventa grave.
Titolo: Re:vedere record aggiunti da altri utenti
Inserito da: nomorelogic - Ottobre 18, 2014, 10:46:07 am
non è affatto una cosa da poco, è un problema che in certi casi come il tuo è proprio serio.

Il fatto è che un dataset su un client non ha nessuna idea di cosa accade sul server, è normale che non ti vengano segnalate attività di altri utenti.

Per risolvere il problema su una architettura client/server hai 2 modi (almeno che io conosco):
Titolo: Re:vedere record aggiunti da altri utenti
Inserito da: Maverich - Ottobre 20, 2014, 10:00:35 am
cercando ho trovato questo articolo e ralativi problemi
http://mikejustin.wordpress.com/2012/11/06/firebird-database-events-and-message-oriented-middleware/

e una soluzione ,
http://mikejustin.wordpress.com/2012/11/08/firebird-database-events-and-message-oriented-middleware-part-2/

basata su librerie esterne
http://activemq.apache.org/delphi-and-freepascal.html

questo frammento di codice ha tutta l'aria di un Timer lato Client

procedure TOrderForm.CheckPurchaseOrder(Sender: TObject);
var
  NewOrderMessage: IMessage;
  OrderID: Integer;
begin
  // check for new message (wait 100 milliseconds)       <==== Timer ?
  NewOrderMessage := MessageConsumer.Receive(100);
.......

questo potrebbe essere anche fatto (dove realmente serve) lato Client in un punto a in cui si cerca se
un record e' stato aggiunto (basterebbe leggere il GENERATOR che mantiene la numerazione progressiva)
o eliminato (un RecordCount)
o ancora creare una Tabella apposita con 1 campo Varcahar (nome tabella variata) 2 integer (NrRecordAttuale e NrRecordPrecedente) dove scrivere
le variazioni avvenute, e credo, ridurre il traffico di rete.

ma anche a livello Indy Client potrebbe esserci qualcosa che puo' risultare utile, io mi limito ad usare idTCPClient e idFTP; e non conosco gli altri.






Titolo: Re:vedere record aggiunti da altri utenti
Inserito da: nomorelogic - Ottobre 20, 2014, 11:00:26 am
nella palette sqldb di lazarus c'è l'ultimo componente che riguarda gli eventi di firebird, proverei quello prima di tutto ;)


se non ricordo male credo che anche zeos fornisca una classe per registrarsi agli eventi del database
Titolo: Re:vedere record aggiunti da altri utenti
Inserito da: Maverich - Ottobre 21, 2014, 09:24:10 pm
Ho provato i componenti FireDac in Delphi XE7 trial, tramite il componente *FDEventAlerter* si possono intercettare gli eventi di vari DB
tra questi anche FireBird.

Creato un semplice trigger a livello DB, inserito  *FDventAlerter* in un datamodule e configurati i parametri, in poco tempo ho capito il funzionamento e
nel momento in cui scatta l'evento nella procedure DoAlert si puo' indirzzare ad un Form per eseguire DBGrid.refresh, dopo avere eseguito un FDQuery.refresh sul datamodule, quindi si puo' fare esattamente quello che chiedevo nel post.

Il problema e' che non esistono per Lazarus; derivano da AnyDac, e questi dovrebbero potersi installare su Lazarus, ma non li conosco.
Vi risulta che esista il componente AventAlerter all'interno di AnyDac ?

l'alternativa delle ZeosLib, ha il gestore di eventi *TZIBEventAlerter* solo per Firebird/Interbase e' questo e' un limite.

Il dubbio per uso professionale Client/Server resta:
- fidarsi di Lazarus o del suo simile CodeTyphon
- spendere ... molto per passare a Delphi almeno Ultimate, le Professional hanno i componenti DB mono.
Titolo: Re:vedere record aggiunti da altri utenti
Inserito da: nomorelogic - Ottobre 22, 2014, 09:05:05 am
ho visto sul loro sito e c'è scritto che si possono usare con free pascal
non sono però open source

chiaramente il discorso costi lo devi valutare in quanto delphi-a-pagamento ti risolve molti problemi che con lazarus-open-source dovrai risolvere da solo...
anche il solo debugger è diverso e molto più agevole quello di delphi

per curiosità, di che tipo di progetto si tratta? :)
Titolo: Re:vedere record aggiunti da altri utenti
Inserito da: Maverich - Ottobre 22, 2014, 01:40:20 pm
la gestione di un museo;
alla fine e' un gestionale, si tratta di prevedere per ogni opera (anche ancora nelle cantine ... almeno 50%), dei dati utilli
- data , luogo ritrovamento
- note sullo stato conservazione (blob)
- affidato in restauro
- dati su che si occupa della classificazione
- luogo in cui si trova l'opera , tipo di assicurazione, data rientro prevista
- valutazione eventuali danni da esposizione/trasporto
- preventivi/costi di restauro
- link all'immagine sul server (le foto non sono su un blob)
- link ai documenti di stima e valutazione
e altre cose simili
il server e' Linux con DB Firebird (parte gestionale) ; hanno l'idea di passare ad Oracle (stando a chi lo propone, sarebbe piu' veloce nelle query join)

l'IDE Delphi e' certo migliore e piu' veloce e certe librerie sono davvero utili (es. TMS), ci sono progetti da D4 a XE5 e 1 con Lazarus;
per contro la politica commerciale e tecnica mi piace meno (es: -> Quick Repoort -> Rave Report -> Fast Report) per non parlare delle FMX

a livello azienda sono intenzionati a valutare Lazarus per il multipiattaforma; in modo da avere il codice piu' simile possibile (con Delphi non e' possibile).
Titolo: Re:vedere record aggiunti da altri utenti
Inserito da: nomorelogic - Ottobre 22, 2014, 05:24:46 pm
grazie per la condivisione ;)

su oracle valutate bene il guadagno di tempo con le join

con oracle ci lavoro e secondo me il suo uso deve essere giustificato da una mole di dati stratosferica o, almeno, da una scalabilità del db server importante.

Mi riferisco al fatto della manutenzione ed alla portabilità: su firebird la manutenzione è prossima allo zero e ti puoi permettere cambio di versione di database o cambio di OS host con 15 minuti (= tempo di ripristino per disaster recovery).
Con oracle nulla è semplice e veloce (neanche l'installazione dei client o la preparazione di un muletto) e non tutti sono in grado di fare manutenzione.

Ti consiglio di fare delle simulazioni con tempi di risposta sulle join ;)