Autore Topic: [risolto] edit database  (Letto 3047 volte)

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: edit database
« Risposta #15 il: 14 Marzo 2010, 16:48:01 »
ho aggiunto una progress bar cosi' si puo' vedere se il programma sta andando avanti... sfalsa un po' il risultato perche' ho dovuto mette dei wait 0.1 per fare il refresh del form...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: edit database
« Risposta #16 il: 14 Marzo 2010, 16:57:35 »
errore mio :) non ho avuto la pazienza di aspettare

test1 2 min e 11
test2 2 min e 04
test3 1 secondo e 19

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: edit database
« Risposta #17 il: 14 Marzo 2010, 16:59:01 »
a giudicare dal risultato il tuo pc di prova non e' tanto 'giovane' :)

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: edit database
« Risposta #18 il: 14 Marzo 2010, 17:01:08 »
comunque dex chiedeva un modo veloce per fare l'update dell tabella, e visto i risultati credo che la soluzione migliore sia quella di riscrivere l'intera tabella

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: edit database
« Risposta #19 il: 14 Marzo 2010, 17:38:27 »
forse ho trovato la soluzione:

con la seconda prova (quella sei record concatenati) inizio la query con un "BEGIN; "
poi 200 update a seguire e un bel " END;" finale
risultato test: 1.8 sec. !
provar per credere...
ps. ho saltato il primo test per far piu' veloce.

Offline claudio

  • Gambero
  • **
  • Post: 57
    • Mostra profilo
Re: edit database
« Risposta #20 il: 14 Marzo 2010, 17:45:25 »
Secondo me è inutile mettere il saldo progressivo della cassa nel record, perché ad ogni modifica o inserimento
deve essere aggiornato in  tutti i record della tabella, però puoi aggiungere un campo in cui riporti il valore del
campo Entrata con segno positivo o il valore del campo Uscita con segno negativo, e rifare i calcoli utilizzando
un solo campo della tabella.


Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: edit database
« Risposta #21 il: 14 Marzo 2010, 18:07:23 »
Si e' vero, ma la mia era pura curiosita'...

Ho provato a passargli i 1422 update in un botto solo.... 0,4 sec!
« Ultima modifica: 14 Marzo 2010, 22:47:28 da milio »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: edit database
« Risposta #22 il: 14 Marzo 2010, 18:55:05 »
milio
ho provato il test, e in effetti l'ultimo impiega meno di 1 sec.

mi chiedevo tu hai fatto un test con 1400 rec e 200 insert, quindi hai fatto 7 cicli completi.

se invece di 1400 fossero stati 1398? oppure 1410?


Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: edit database
« Risposta #23 il: 14 Marzo 2010, 19:47:18 »
Secondo me è inutile mettere il saldo progressivo della cassa nel record, perché ad ogni modifica o inserimento
deve essere aggiornato in  tutti i record della tabella, però puoi aggiungere un campo in cui riporti il valore del
campo Entrata con segno positivo o il valore del campo Uscita con segno negativo, e rifare i calcoli utilizzando
un solo campo della tabella.

ad ogni inserimento la cassa viene aggiornata ma risulta velocissimo in quanto prima di inserire un nuovo record mi basta leggere l'ultimo record cassa, e non ho bisogno di aggiornarlo su tutti i record ma solo sul nuovo.

il problema si pone se un utente và a modificare un vecchio record, in quel caso la cassa va ricalcolata su tutto il database o al limite dal record modificato fino alla fine.
Anche se riportassi i valori + e  - come dici tu non toglie che per avere la cassa aggiornata devo sempre rifare il calcolo dal record modificato.


Offline claudio

  • Gambero
  • **
  • Post: 57
    • Mostra profilo
Re: edit database
« Risposta #24 il: 14 Marzo 2010, 20:53:56 »
Nell'applicazione che ho realizzato 'PrimanotaContabile' (nella sezione progetti in cerca di aiuto con sorgente allegato), c'è la gestione delle entrate e uscite di cassa, che ho impostato nel seguente modo:
Nel record inserisco la data dell'operazione e il relativo valore dell'entrata o uscita di cassa, poi se ad esempio voglio visualizzare in una gridview il mastrino della cassa dal 01/03/2010 al 15/03/2010, prima con una semplice query mi calcolo il saldo cassa al 28/02/2010 e lo assegno ad una variabile, successivamente nel ciclo di lettura dei record compresi nel periodo di estrazione, ad ogni record letto aggiorno la variabile del saldo cassa e ne inserisco il valore nel gridview.


Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: edit database
« Risposta #25 il: 14 Marzo 2010, 21:28:09 »
@claudio

il tuo è un procedimento diverso ma le modalità di calcolo sono le stesse, bisogna far leggere il database uno ad uno ed effettuare calcoli.
anzi a mio parere il tuo metodo è ancora più laborioso, in quanto ogni volta che vuoi sapere il saldo devi far scorrere tutto il database.
per evitare ciò mi salvo il saldo in ogni record, in qualsiasi momento sò sempre il saldo senza effettuare nessun calcolo, solo e se un record viene modificato devo rifare il calcolo del saldo.

finchè avevo pochi record non si era presentato il problema, quando ne sono diventati varie centinaia ho notato il rallentamento.

secondo me con il tuo metodo avrai lo stesso problema. hai provato ha fare dei test con migliaia di record?


Offline claudio

  • Gambero
  • **
  • Post: 57
    • Mostra profilo
Re: edit database
« Risposta #26 il: 14 Marzo 2010, 22:06:04 »
Per sapere il saldo cassa in un dato giorno mi basta una semplice interrogazione al database, senza scorrere alcun record. Solo se devo visualizzare le operazioni comprese in un intervallo di date, sono obbligato a scorrere i record per calcolare e visualizzare il saldo, che chiaramente varierà dopo ogni singola operazione.
Poi è normale che l'elaborazione impieghi più tempo a seconda del numero di registrazioni.

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: edit database
« Risposta #27 il: 14 Marzo 2010, 22:35:20 »
milio
ho provato il test, e in effetti l'ultimo impiega meno di 1 sec.

mi chiedevo tu hai fatto un test con 1400 rec e 200 insert, quindi hai fatto 7 cicli completi.

se invece di 1400 fossero stati 1398? oppure 1410?



Infatti se guardi il test erano esattamente 1422 i record
Comunque ho provato a passargli con il BEGIN .... END tutte le 1422 UPDATE ed e' stato piu' veloce che riscrivere la tabella...
« Ultima modifica: 14 Marzo 2010, 22:48:23 da milio »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: edit database
« Risposta #28 il: 14 Marzo 2010, 23:19:40 »
@milio

ho provato anche io con il begin è talmente veloce che sembra che non fà nulla, unico neo la cassa non risulta esatta.
ho effettuato varie prove ed ho scoperto che alla fine conteggia il penultimo record.

esempio  845 record
843 cassa 152.00
844 cassa 183.00
845 cassa 215.00

ricalcolando con il tuo metodo mi dà sempre 183.00

edit: mi correggo il record cassa è in ritardo di 1 su tutto il database

esempio nei record ho
1 entrate 50 uscite 0 cassa 50
2 entrate 20 uscite 0 cassa 50
3 entrate 10 uscite 0 cassa 70
4 entrate 0 uscite 40 cassa 80

« Ultima modifica: 14 Marzo 2010, 23:38:02 da dex »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: edit database
« Risposta #29 il: 14 Marzo 2010, 23:41:30 »
Per sapere il saldo cassa in un dato giorno mi basta una semplice interrogazione al database, senza scorrere alcun record. Solo se devo visualizzare le operazioni comprese in un intervallo di date, sono obbligato a scorrere i record per calcolare e visualizzare il saldo, che chiaramente varierà dopo ogni singola operazione.
Poi è normale che l'elaborazione impieghi più tempo a seconda del numero di registrazioni.

scusa ma se per sapere il saldo a un determinato giorno vuol dire che salvi il valore saldo da qualche parte?