* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 24, 2024, 07:57:14 pm

Inserisci il nome utente, la password e la durata della sessione.

145 Visitatori, 0 Utenti

Autore Topic: vedere record aggiunti da altri utenti  (Letto 5979 volte)

Maverich

  • Scrittore
  • Full Member
  • *****
  • Post: 134
  • Karma: +0/-0
vedere record aggiunti da altri utenti
« il: 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.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:vedere record aggiunti da altri utenti
« Risposta #1 il: 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):
  • implementare sia a livello di record che di tabella un sistema di versione del record; per i record, ad esempio, un campo numerico aggiuntivo incrementato da un trigger; per le tabelle, una tabella aggiuntiva che contiene i nomi delle tabelle che devono essere aggiornati da vari trigger
  • quanto sopra è evitabile se il db server che usi ha implementato gli eventi (e firebird li ha!); leggi qua: http://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf
Imagination is more important than knowledge (A.Einstein)

Maverich

  • Scrittore
  • Full Member
  • *****
  • Post: 134
  • Karma: +0/-0
Re:vedere record aggiunti da altri utenti
« Risposta #2 il: 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.







nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:vedere record aggiunti da altri utenti
« Risposta #3 il: 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
Imagination is more important than knowledge (A.Einstein)

Maverich

  • Scrittore
  • Full Member
  • *****
  • Post: 134
  • Karma: +0/-0
Re:vedere record aggiunti da altri utenti
« Risposta #4 il: 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.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:vedere record aggiunti da altri utenti
« Risposta #5 il: 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? :)
Imagination is more important than knowledge (A.Einstein)

Maverich

  • Scrittore
  • Full Member
  • *****
  • Post: 134
  • Karma: +0/-0
Re:vedere record aggiunti da altri utenti
« Risposta #6 il: 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).

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:vedere record aggiunti da altri utenti
« Risposta #7 il: 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 ;)
Imagination is more important than knowledge (A.Einstein)

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18772
  • Topic in totale: 2233
  • Online Today: 256
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 145
Total: 145

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.