sqll = "select * from cassa order by idcassa"
MyRSl = MODMain.MyConn.Exec(sqll)
IF MyRSl.Available THEN
MyRSl.MoveFirst
MyCa = 0
FOR ix = 1 TO MyRSl.Count
IdRecA = Str(MyRSl!idcassa)
MyEN = MyRSL!entrate
MyUs = MyRSL!uscite
MyRS = ModMain.MyConn.edit("cassa", "idcassa=" & IdRecA) '<< qui si rallenta il pc
MyCa = MyCa + MyEN - MyUs
MyRS!cassa = MyCa
MyRS.update
MyRSl.MoveNext
NEXT
ENDIFUPDATE cassa SET cassa = (entrate - uscite)..ma forse non ho colto bene
'
sql= "UPDATE cassa SET cassa = (cassa + entrate - uscite)"
MyRS = MODMain.MyConn.EXEC(sql)
Ho notato anch'io un pò di lentezza nell'aprire i record del listino.
Ho un listino con 22.000 record com mysql. per aprirlo ci vuole 30 secondi. ho dovuto filtrarli, praticamente quando li cerco con il codice la ricerca parte dopo la terza lettera in modo da toglierne già parecchi. Purtroppo devo dire che access era più veloce.
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.
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?
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.
@dex
Forse e' perche' io non ho capito bene come fai a calcolare la cassa....
io ho fatto cosi':
1°rec: cassa=0;entrate=10;uscite=5
cassa = 10 - 5
2° aggiorno cassa a 5
cosi' facendo io ho la cassa aggiornata del record precedente.
adesso magari ho sbagliato ma quello che conta e' che siamo riusciti a far fare a sqlite update veloci...
poi il metodo te lo devi veder tu... io non so che tipo di calcoli devi fargli fare....
comunque claudio non ti sta consigliando male... anch'io ho fatto un piccolo programma per gestire una lavanderia a secco... e il metodo che ho usato per il calcolo del totale cassa e' identico a quello suggerito.
Non per insistere, ma cosi' pero' il primo rec non viene aggiornato...
Non per insistere, ma cosi' pero' il primo rec non viene aggiornato...
vabbe' l'importante e' che ti sia servito come spunto il mio codice...
le modifiche te le vedrai tu...
non vorrai mica che ti faccia tutto il programma (esagerato!) :P
vero access era molto più veloce, con visualbasic e access usavo lo stesso codice per aggiornare la cassa e con migliaia di record ci metteva pochi secondi
Ho notato anch'io un pò di lentezza nell'aprire i record del listino.
Ho un listino con 22.000 record com mysql. per aprirlo ci vuole 30 secondi. ho dovuto filtrarli, praticamente quando li cerco con il codice la ricerca parte dopo la terza lettera in modo da toglierne già parecchi. Purtroppo devo dire che access era più veloce.
PUBLIC SUB riempigrid()
DIM sql AS String
DIM i AS Integer
GridView1.Clear
sql = "select * from dettaglilistini WHERE "
sql &= "idlistino LIKE '%" & dettagli.defidlistino & "%'" " " ' filtro un listino tra i vari listini
sql &= "AND descrizione LIKE '%" & Replace(tbricdescrizione.Text, " ", "%") & "%' " ' filtro gli articoli in base a descrizione
sql &= " order by iddettaglio"
MyRS = MODMain.$conn.Exec(sql)
IF MyRS.Available = TRUE THEN
GridView1.Mode = Select.multiple
GridView1.Header = GridView1.Horizontal
GridView1.Columns.Count = 4
GridView1.Columns[0].Width = 20
GridView1.Columns[1].Width = 120
GridView1.Columns[2].Width = 520
GridView1.Columns[3].Width = 100
GridView1.Rows.Height = 20
GridView1.Columns[0].Text = ""
GridView1.Columns[1].Text = "Codice"
GridView1.Columns[2].Text = "Descrizione"
GridView1.Columns[3].Text = "Prezzo"
GridView1.Rows.Count = MyRS.Count
i = 0
FOR EACH MyRS
GridView1[i, 0].Picture = ""
GridView1[i, 1].Text = MyRS!codice
GridView1[i, 2].Text = MyRS!descrizione
GridView1[i, 3].Alignment = 2
GridView1[i, 3].Text = Funzioni.formtvaluta(MyRS!prezzo)
INC i
NEXT
ELSE
GridView1.Columns.Count = 1
GridView1.Rows.Count = 1
GridView1[0, 0].Text = "Nessun dato"
ENDIF
CATCH
Message.Error(Error.Text)
END