Newsgroup: it.comp.lang.delphi
Titolo: Catastrophic Failure

Ciao, forse la cosa vi farà sorridere.... ma un mio programma ogni tanto da
un "Catastrophic Failure".
Avviene sulla chiusura di una form... ho provato a cercare sulla
documentazione di Windows ma sembra che sia un errore di accesso al disco e
io in quel momento non sto accedendo (almeno non esplicitamente) al disco.
Quello che posso dire è che faccio un buon uso di memoria (quando entro in
detta form carico in memoria anche una ventina di mb).
Qualche idea di quale possa essere la causa?
Qualcun altro ha mai visto lo stesso errore?
Ciaoux

Ho cercato un po' a giro e ho trovato un vecchio post di SteveTeixeira ( sì
proprio lui, il sacro...) che diceva che tale errore è un errore generico di
OLE....
...
ma.... sigh....
... io in questo caso OLE manco lo tocco.... uffa......

 ha scritto nel messaggio
news:amcrbn$mm1$1...@newsreader.mailgate.org...

Ole, Ole... non ricordo dove ho letto che microsoft ha disconosciuto il suo
figlio, dicendo che non è più l'acronimo di Object Linked and Embedded, ma
solo una parola che si pronuncia Olè... eheh:)
Ti suggerisco, a scopo umoristico:
http://www.soft-land.org/cgibin/commenti.pl?doc=commenti/xp&title=Breve+stor
ia+della+programmazione+in+Windows
(riassembla l'url)
Cmq, per sapere dove è l'errore, bisognerebbe sapere cosa fa il tuo
programma e *come* lo fa...
Ciao
Matteo

usi ADO?
La da sempre sullo stesso pc?
Sistema operativo?
Bye
A.

Non uso ADO, lo dà su diversi PC aventi tutti Win2k SP2
In pratica uso il MW di FPiette ma in questo caso la cosa è un po'
particolare:
gli archivi vengono caricati attraverso detta tecnologia da SQLServer in
MWTable.
I dati, strutturati su 5 livelli, vengono visualizzati attraverso un
dxDBTreeList (devExpress).
Causa enorme presenza di record il mapping dei livelli da parte
dell'alberino è estremamente lento.
allora cosa ho fatto:
siccome l'alberino va più veloce in presenza di indici e le MWTable non ne
dispongono.....
...
ho preso un DataSetProvider e l'ho attaccato alla MWTable.....
ho attaccato un ClientDataSet al DataSetProvider....
ho creato gli indici sul ClientDataSet "on the fly"
....
e l'alberino va molto più veloce ma questo genera un livello in più e in
genere, con il carico medio di dati che mi tiro su.... il task alloca ca 20
mb in più...
Concludendo....  l'errore si genera SPORADICAMENTE e non SISTEMATICAMENTE al
momento della chiusura della form che fa tutto 'sto rigirio...
posto il codice (non credo sia di aiuto ma...) che ho messo sull' OnClose
      if CDSPoCovered.Active then
         CDSPoCovered.Close;
      if CDSCartons.Active then
         CDSCartons.Close;
Nota importante : tutto il caricamento dei dati viene fatto attraverso un
Thread creato ad hoc che fa solo il caricamento e poi muore.
Grazie ancora... ciao

per iniziare, suggerisco la creazione di un file di log all'atto della
chiusra del form:
var
  F: textfile;
  LogName: TFileName;
begin
  LogName := format('c:\logmiaapp%s.txt', [DateTimToStr(Now)]);
  AssignFile(f, LogName);
  rewrite(f);
  WriteLn(f, 'Check su covered..');
  try
       if CDSPoCovered.Active then begin
          CDSPoCovered.Close;
          WriteLn(f, 'ho chiuso covered');
  finally
          WriteLn(f, 'Blocco covered terminato');
end;
Lo stesso blocco anche x l'altra chiusura.
In questo modo, almeno puoi capire se uno dei 2 fa qualcosa di anomalo
all'atto della chiusura.
Intanto, controlla se sui cdspoxxx hai degli eventi e verifica cosa vanno a
fare.
Bye
A.

grazie albe, non importava che mi facessi vedere come scrivere sui FAIL :)))
.... in effetti lo sto facendo non in quel punto ma....
adesso provo
sui cds.. non  ci sono eventi...

Arieccolo
tutto 'sto tempo aspettando che l'errire si riverificasse :)
la sequenza del codice è questa
scrivolog
chiudo primo
scrivolog
chiudo secondo
scrivo log
apparte il fatto che si verificano anche degli acess violation quà e la (ma
non contestualmente al catastrophic failure)
la conclusione è che dà errore (quando lo dà) su "chiudi primo" perchè sul
log dopo lo schianto trovo solo la prima scrittura del log.

allora....
Hai detto che sui cds non hai eventi.
E sul provider?
Bye
A.

Neanche adesso ho tolto le chiusure dei CDS (dovrebbero chiudersi
impolicitamente alla chiusura del form visto che sono strutture caricate in
memoria e non file o database fisici) e per ora non sono riuscito a far
riverificare il problema.
Se continua così...