Newsgroup: it.comp.lang.delphi
Titolo: Delphi 6.0 e ClientDataset...

Devo fare una miriade di calcoli su dei campi e uso i canonici oggetti 
inseriti dalla tabsheet data access(ClientDataset,Datasource,Dataset 
provider) per connettermi al db.
Finche' i record sono pochi va tutto bene, ma quando son tanti mi da 
l'errore divisione per zero(ho messo dei controlli sulle divisioni senza 
risultato)Il problema e' che ho come l'impressione che sia un problema 
di memoria(cache credo)... cioe' se faccio i cicli fino a 200 record 
regge, se pero' poi ripeto operazione piu' volte mi da quel maledetto 
errore(Dopodiche' si imballa anche se intercetto l'errore), se invece 
chiudo la form e la riapro si riprende...
Grazie per qualunque consiglio.
Ciauz

 Prova a controllarli meglio.
Mi son spiegato male:
es.
clikko su buttone che fa partire routine-->
while record.eof
fa i suoi calcoli (per es. moltiplica per due il valore del campo 
'COSTO_PERE')
poi appare finestra conferma/annulla
clik su annulla
While record.eof
fai i suoi calcoli(per es campo/2) per ripristinare
non da nessun errore, va tutto bene(??????)
riclik su buttone che fa partire routine-->
a meta' mi da errore divisione per zero!Se e solo se i campi sono piu' 
di 250!!
Ci sara' un errore nei calcoli,no non c'e(al 90%[son veramente 
tanti]),se pero' prima di cliccare su bottone che fa partire routine, 
chiudo la form e la riapro non mi da nessun errore(?????????)
Fatto inquietante:
l'errore me lo da al record numero 329 nel momento in cui vi e' la 
procedura record.next... Bene penso l'errore sara' in quel record 
controllo col debug passo passo e va tutto bene...
Fatto ancora piu' inquietante:
a seconda del numero di record l'errore si sposta tipo piu' indietro se 
il num di rec e' maggiore, piu' avanti se minore.
Pensa che prima sto cavolo di division by 0 me lo dava quando facevo 
partire quickreport che guarda caso nella procedura preview si dovrebbe 
ciclare quel dannato dataset e si bloccava alla pagina 20 se processavo 
tutti i record,se i record erano di meno arrivava alla pagina 36 e cosi' 
via...Eppoi non esiste che si impalli che cavolo!!!
A sto punto e' un prob di memoria?Un baco?Sbaglio qualcosa io?Ho degli 
spiriti nel pc?
non riesco a capire cos'e' ne sto uscendo pazzo!! :-D
cavoli son stato troppo prolisso va a finire che sta robaccia non la 
legge nessuno!! :-)
Ciau

 chiudo la form e la riapro si riprende...
Il TClientDataSet non ha limitazioni precise sul numero di record da
gestire.
Sicuramente il problema di divisione per zero dipende dai calcoli che fai.
Prova a controllarli meglio. 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 A sto punto e' un prob di memoria?Un baco?Sbaglio qualcosa io?
La terza che hai detto: ne sono convinto.
D'altronde, dimostrarlo è semplice: prova a eseguire lo scorrimento del
TClientDataSet _senza_ eseguire i calcoli e vedrai che tutto andrà bene.
Ricontrolla i calcoli che fai, record per record.  Metti un controllo
sull'uguaglianza a zero di un eventuale denominatore.  Tieni presente che
250 record sono un'inezia per il TClientDataSet (BTW, non si possono
considerare "tanti" in nessun contesto, specialmente nel mio attuale, in
cui ci sono _milioni_ di record ;-) ).


 TClientDataSet _senza_ eseguire i calcoli e vedrai che tutto andrà bene.
Mamma mia, domani provo... cmq son tante le robe da controllare ci sono 
anche campi calcolati e altri eventi correlati... Speriamo bene, per me 
non ne esco anche perke' quel codice non era mio!!
Cmq grazie ciao!!

 non ne esco anche perke' quel codice non era mio!!
Quello che puoi fare, se ti puņ essere d'aiuto, č racchiudere i calcoli in
un try/except e provare ad eseguire un log in cui riporti il calcolo
effettuato e l'eventuale eccezione.  Vedrai che lo scovi.  Purtroppo
quando le iterazioni sono realmente tante, č l'unica strada.


 quando le iterazioni sono realmente tante, č l'unica strada.
Ho provato a scorrere il record da solo e mi da quel cavolo di 
DivisionBy0!Dopo 6 cicli consecutivi!!!!
Nel dataChange di un  datasource, ci sono una sflilza di SqlQuery che si 
aprono e si chiudono e mi pare che sia li' che dia danno per che se 
disabilito la grid principale non mi da errore!!!!Ma che caspio e'???

 disabilito la grid principale non mi da errore!!!!Ma che caspio e'???
Non ho la sfera di cristallo purtroppo.
Hai provato ad andare in debug o a seguire i consigli che ti ho dato sul
log ?


 log ?
no ekekkakkio si morto a casa il lavoro va a finire che non esco piu' di 
casa! :-P
Qnd avro un attimo di tempo provo a fare un log...
per ora grazie ciao!

 Qnd avro un attimo di tempo provo a fare un log...
Scusa, io pensavo che 8 ore di lavoro bastassero per aggiungere un log ;-)


 Scusa, io pensavo che 8 ore di lavoro bastassero per aggiungere un log ;-)
il prob e' che faccio anke help_desk via telefono e in ordine di 
priorita' ho da finire  altri 3 progetti prima :-/

 priorita' ho da finire  altri 3 progetti prima :-/
Tranquillo, è una vita di merda per tutti ;-)


Praticamente vi erano dei problemi in 2 TSQLDataset che probabilmente si 
ingarbugliavano perche' avevano nel command_text(nella proprieta' 
presente nell' ObjInspector) una stringa troppo lunga o i parametri non 
si settavano bene...
cmq ho risolto sostituendo i 2 TSQLDataset con 2 SQLQry in cui gli 
associo sia i paramentri sia la stringa sql da codice.
Ciao