* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Maggio 06, 2024, 05:48:19 am

Inserisci il nome utente, la password e la durata della sessione.

484 Visitatori, 0 Utenti

Autore Topic: Access Violation dopo chiusura di una form  (Letto 5279 volte)

schumi

  • Full Member
  • ***
  • Post: 219
  • Karma: +1/-0
Access Violation dopo chiusura di una form
« il: Luglio 08, 2015, 04:27:46 pm »
sto impazzendo per un errore che capita qualche volta chiudendo una form ad un cliente, il programma è ancora una beta ma lo usano già come gestionale aziendale.
premetto che non riesco a replicarlo nel mio pc e quindi vado a tentativi. ???

come posso trovare il problema?
Grazie

Exception class: EAccessViolation
Message: Access violation
  $005A939F
  $005AAC70
  $00429F64
  $0042C774
  $00429AD4
  $0047AD02
  $005AA888
  $0047AA66
  $00578F24
  $0059709F
  $005977F8
  $005860B1
  $00596FAA
  $0040C496
  $0056C781
  $005D706B
  $0052E2E9

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Access Violation dopo chiusura di una form
« Risposta #1 il: Luglio 08, 2015, 04:44:24 pm »
potrebbe essere un evento sollevato dopo la chiusura in cui utilizzi un puntatore

se ad esempio hai un datamodule e da qualche parte fai qualcosa tipo
Codice: [Seleziona]
  MyDatamodule.Table1.First;

dovresti correggere con:
Codice: [Seleziona]
  if not Assigned(MyDatamodule) then exit;
  if not Assigned(MyDatamodule.Table1) then exit;

  MyDatamodule.Table1.First;
Imagination is more important than knowledge (A.Einstein)

schumi

  • Full Member
  • ***
  • Post: 219
  • Karma: +1/-0
Re:Access Violation dopo chiusura di una form
« Risposta #2 il: Luglio 09, 2015, 05:41:02 pm »
ho un datamodule, questo viene creato in automatico all'apertura dell'applicazione (progetto-opzioni-form), non so se sia il modo migliore.
utilizzo la tua superclasse nella (versione da svn) come base per le form

nel FormCreate apro le tabelle con una procedura nel datamodule (mydatamodule.table1.open)
nel FormCloseQuery le chiudo con un altra procedura (mydatamodule.table1.close)
nel FormClose lancio self.release
nel FormDestroy lancio if assigned(form1) then form1:=nil (oppure form1.free)

l'errore è successivo al form destroy, mai riscontrato nelle mie prove, il cliente apre e chiude la form 50 volte al giorno, almeno 1 volta da errore.

un errore non replicabile è la peggiore delle piaghe dell'informatica :'(

grazie

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Access Violation dopo chiusura di una form
« Risposta #3 il: Luglio 09, 2015, 06:11:59 pm »
nel FormDestroy lancio if assigned(form1) then form1:=nil (oppure form1.free)

questa non l'ho capita...
nell'evento FormDestroy tenti di autodistruggere il form che si sta distruggendo da solo?


il datamodule è in autocreate?
chi lo rilascia?
Imagination is more important than knowledge (A.Einstein)

schumi

  • Full Member
  • ***
  • Post: 219
  • Karma: +1/-0
Re:Access Violation dopo chiusura di una form
« Risposta #4 il: Luglio 10, 2015, 10:58:58 am »
il codice nel destroy era un vano tentativo leggendo qua e la sul forum ufficiale.

si, il datamodule è in autocreate, dici che può essere quello il problema? non ho trovato nessun tutorial serio sull'argomento

ho un datamodule principale con la connessione al DB, poi altri dm specifici.
la connessione al DB avviene all'apertura del prg

magari a voi sembrano banalità ma per me è tutto "nuovo" dopo anni di FoxPro
questo è il mio primo programma complesso con lazarus, mai usato neanche delphi in vita mia

grazie

schumi

  • Full Member
  • ***
  • Post: 219
  • Karma: +1/-0
Re:Access Violation dopo chiusura di una form
« Risposta #5 il: Luglio 10, 2015, 11:12:09 am »
volendo avere meno cose inutili in memoria, se creo il datamodule nel formcreate con Tmydatamodule.Create(self) e lo distruggo nel formdestroy con mydatamodule.free è corretto?
il datamodule principale invece vorrei lasciarlo nell'autocreate per testare la connessione al DB come prima cosa.
voi che mi consigliate?

grazie
« Ultima modifica: Luglio 10, 2015, 11:47:44 am da schumi »

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Access Violation dopo chiusura di una form
« Risposta #6 il: Luglio 10, 2015, 12:02:22 pm »
In linea di massima in autocreate io preferisco tenerci solo il form principale e poi creo/distruggo a seconda delle necessità da dentro il form.

Nell'evento OnCreate del form puoi tranquillamente (1) creare il datamodule principale e (2) testare la connessione del DB e, se fallisce, lanci Application.Terminate (che se non ricordo male dovrebbe richiamare OnDestroy del form).

Nell'OnDestroy del form, distruggi il datamodule con:
if Assigned(MyDataModule) then
   MyDataModule.Free;

Non so se è il modo migliore ma è il modo che mi risulta più chiaro personalmente e che mi permette di fare tutto.
Imagination is more important than knowledge (A.Einstein)

schumi

  • Full Member
  • ***
  • Post: 219
  • Karma: +1/-0
Re:Access Violation dopo chiusura di una form
« Risposta #7 il: Luglio 10, 2015, 03:35:52 pm »
Citazione
n linea di massima in autocreate io preferisco tenerci solo il form principale e poi creo/distruggo a seconda delle necessità da dentro il form.

Nell'evento OnCreate del form puoi tranquillamente (1) creare il datamodule principale e (2) testare la connessione del DB e, se fallisce, lanci Application.Terminate (che se non ricordo male dovrebbe richiamare OnDestroy del form).

Nell'OnDestroy del form, distruggi il datamodule con:
if Assigned(MyDataModule) then
   MyDataModule.Free;

Non so se è il modo migliore ma è il modo che mi risulta più chiaro personalmente e che mi permette di fare tutto.

farò anch'io cosi, ora che ho un po' di tempo
come logica mi piace di più, solitamente meno oggetti in memoria =più performance e meno conflitti

comunque un tutorial avanzato in rete non l'ho trovato, ne per Delphi ne per FP

grazie

schumi

  • Full Member
  • ***
  • Post: 219
  • Karma: +1/-0
Re:Access Violation dopo chiusura di una form
« Risposta #8 il: Febbraio 18, 2016, 02:51:37 pm »
rispolvero la questione, dopo aver "sistemato" il codice come consigli sopra il problema si è drasticamente ridotto, però sporadicamente riappare.
come faccio a fare un debug efficacie? mi arrangio con un file di log o c'è qualche metodo + intelligente su Lazy 8) 8) 8)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:Access Violation dopo chiusura di una form
« Risposta #9 il: Febbraio 18, 2016, 05:59:52 pm »
il problema è che appare "sporadicamente"

se riesci a trovare un modo per farlo fare *sistematicamente* quando fai certe azioni sarebbe meglio
poi vai di debug :)
Imagination is more important than knowledge (A.Einstein)

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18800
  • Topic in totale: 2239
  • Online Today: 513
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 484
Total: 484

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.