Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: schumi - Giugno 24, 2014, 11:53:35 am

Titolo: tutorial Zeos
Inserito da: schumi - Giugno 24, 2014, 11:53:35 am
dovrei iniziare a sviluppare un'applicazione multi client, avevo pensato ad Zeos con PostgreSql o Firebird (propendo per il primo).
dove trovo un tutorial serio e degli esempi per capire che strategia usare ?
tenete presente che sarebbe la mia prima applicazione client-server con lazarus (e non provengo da Delphi :P)

grazie
Titolo: Re:tutorial Zeos
Inserito da: xinyiman - Giugno 24, 2014, 01:26:01 pm
se mi dai qualche giorno te ne scrivo uno io...
Titolo: Re:tutorial Zeos
Inserito da: schumi - Giugno 24, 2014, 04:09:20 pm
 :) :) :) :)
certo, non devo iniziare domani....
Titolo: Re:tutorial Zeos
Inserito da: xinyiman - Giugno 24, 2014, 06:00:36 pm
perfetto :)
Titolo: Re:tutorial Zeos
Inserito da: nomorelogic - Giugno 25, 2014, 11:23:58 am
Qualcosa già è stato scritto ;)

http://www.lazaruspascal.it/index.php?page=111 (http://www.lazaruspascal.it/index.php?page=111)

http://www.lazaruspascal.it/index.php?page=85 (http://www.lazaruspascal.it/index.php?page=85)
Titolo: Re:tutorial Zeos
Inserito da: schumi - Giugno 25, 2014, 03:07:51 pm
Si ho letto tutte le guide qui e sul wiki ufficiale (meglio quella nostrana ;)) e sono tutte ideali per iniziare.
Ora che qualcosa ho capito vorrei andar oltre al programma mono-utente e quindi mi sorgono tutti quei dubbi sulle strategie per ottenere buone performance e affidabilità che ho dovuto affrontare in altri ambienti.
-gestione errori
-gestione conflitti utenti
-conviene usare i datamodule?
-qual'è il sistema più veloce per inserire migliaia di record in una tabella?
-quando usare tztable e quando tzquery?
-meglio sfruttare le store-procedure del db perdendo però l'astrazione dal db o scrivo tutto su codice?

in sostanza sto cercando qualche suggerimento, qualche trucchetto spinto e qualche esempio avanzato, poi ovviamente devi sbatterci la testa di persona per tirar fuori il meglio per la tua applicazione.

Titolo: Re:tutorial Zeos
Inserito da: nomorelogic - Giugno 25, 2014, 04:12:50 pm
-gestione errori
-gestione conflitti utenti
-conviene usare i datamodule?
-qual'è il sistema più veloce per inserire migliaia di record in una tabella?
-quando usare tztable e quando tzquery?
-meglio sfruttare le store-procedure del db perdendo però l'astrazione dal db o scrivo tutto su codice?

gestione errori
argomento molto vasto, fai un esempio

gestione conflitti utenti
di solito ci sono le transazioni per questo scopo e se il database non è replicato è più che sufficiente

conviene usare i datamodule?
assolutamente si, il datamodule astrae dall'accesso ai dati (1 datamodule lo puoi usare in più form, procedure, ecc...)
solitamente io ne creo uno globale e lo passo come puntatore a tutte le form
poi ne devi creare uno o più a seconda del compito

qual'è il sistema più veloce per inserire migliaia di record in una tabella?
generare uno script SQL ed inviarlo direttamente al server


quando usare tztable e quando tzquery?
non conosco bene zeos ma tztable dovrebbe aprire una tabella e richiedere *tutti* i record (operazione potenzialmente devastante, dipende da quanti record ci sono in tabella)
tzquery, decidi tu cosa richiedere al server

meglio sfruttare le store-procedure del db perdendo però l'astrazione dal db o scrivo tutto su codice?
hai fatto una domanda con risposta annessa ;)
a me piace lavorare con le stored proc (perdi l'astrazione dal db se i db non sono SQL ANSI ;) ) perchè alleggerisco il codice sui client
ma ovviamente ogni volta bisogna valutare
Titolo: Re:tutorial Zeos
Inserito da: xinyiman - Giugno 25, 2014, 04:24:47 pm
Mi ero dimenticato di quei tutorial, non c'è bisogno che ne scrivo un altro allora. Quello che volevi è già li per iniziare. Poi alle domande ci ha pensato il buon nomore...

Ti consiglio di dare un occhiata alla proprietà

TransactIsolationLevel

del ZConnection
Titolo: Re:tutorial Zeos
Inserito da: schumi - Giugno 26, 2014, 11:33:22 am
sapevo che basta punzecchiare ;) ;) ;)

volevo appunto un esempio su come voi programmatori di lungo corso 8) mettete giù il codice di prassi... :P
può andare così?
dbo.starttransaction ;
....
insert/update
....
try
   dbo.commit ;
except
  dbo.rollback ;

dbo.endtransaction ;

ci sono altri accorgimenti ? consigli ? paranoie ?

@xinyiman e no, bello, lanci il sasso e nascondi la mano? sulle strategie TransactIsolationLevel ci potresti fare un bel articoletto.... ;D ;D

in generale il problema è che la documentazione è scarsa e sparsa nella rete.

OT: qualcuno di voi ha preso la guida di Lazarus? ne vale la pena?

grazie
Titolo: Re:tutorial Zeos
Inserito da: nomorelogic - Giugno 26, 2014, 12:38:58 pm
io di solito metto sul datamodule (non sulla form) un metodo "Save" per ogni contesto, se ad esempio con un datamodule permetto la modifica di clienti, pagamenti e documenti di vendita allora predispongo qualcosa del genere:

procedure OpenPagamenti;
procedure OpenClienti;
procedure OpenDocumento(ID: integer);
procedure OpenAll;

procedure ClosePagamenti;
procedure CloseClienti;
procedure CloseDocumento;
procedure CloseAll;

procedure SaveClienti;
procedure SavePagamenti;
procedure SaveDocumento;
procedure SaveAll;

In questo modo ogni volta che avrò bisogno di questo datamodule (ad esempio in 3 form: pagamenti, clienti, documenti e importfromcsv) avrò ereditato anche tutto il codice necessario alla gestione del caricamento/salvataggio.

Il codice SavePagamenti può essere qualcosa tipo:
Codice: [Seleziona]
procedure TDataModule1.SavePagamento;
begin
  try
    if SQLTransaction1.Active then
    begin
        // si presume che tutti i dataset abbiano postato

      SqlPagamenti.ApplyUpdates;
      SQLTransaction1.Commit;
    end;
  except
  on E: exception do
      raise exception.create('Impossibile memorizzare il pagamento: ' + #10 + e.Message);
end;

Risollevo l'eccezione perché abitualmente predispongo il codice del chiamante (che sia un button nella form o SaveAll nel datamodule) in modo che venga eseguito in un blocco try/except. In questo modo ogni chiamante può gestire l'eccezione come meglio crede.