Forum > Generale

[Risolto] Run Error (216) - General protection fault

(1/9) > >>

petrusic:
Ieri ho ricevuto un augurio di Buon divertimento.
Sembra però che io debba divertirmi passando da un tipo di Errore ad un altro.

Dopo l'ultima correzione ed il completamento della compilazione, mi si presenta per la prima volta un Errore a me completamente sconosciuto ed assolutamente nuovo, durante l'esecuzione di una riga di codice che funzionava eccellentemente fino a prima dell'ultima modifica
l'istruzione è l'ultima della serie seguente:

--- Codice: ---
procedure TForm1.Panel1Enter(Sender: TObject);
var
. . .
begin
  Menu2.Enabled:= False;
  if not FileExists(dbOrig) then    // l'ASSENZA del file ContabFamdb, potrebbe significare che il programma sta lavorando per la prima volta e bisogna dare vita al DB
  begin
   ShowMessage('DB ' + dbOrig + ' INESISTENTE - il Programma verra'' chiuso');
    Halt;   // Halt interrompe BRUTALMENTE l'esecuzione del programma e restituisce il controllo al chiamante
  end;
  i:= 0;
  sql:= 'select * from (select "causalifreq" AS nomeTbx, count(*) AS totRecTbx from causalifreq';
  sql:= sql + ' UNION select "ggaperte" as nomeTbx, count(*) as totRecTbx from ggaperte';
  sql:= sql + ' UNION select "movimgg" as nomeTbx, count(*) as totRecTbx from movimgg';
  sql:= sql + ' UNION select "partmovv" as nomeTbx, count(*) as totRecTbx from partmovv';
  sql:= sql + ' UNION select "piancont" as nomeTbx, count(*) as totRecTbx from piancont';
  sql:= sql + ' UNION select "prestmom" as nomeTbx, count(*) as totRecTbx from prestmom';
  sql:= sql + ' UNION select "racodvoci" as nomeTbx, count(*) as totRecTbx from racodvoci';
  sql:= sql + ' UNION select "restacassagg" as nomeTbx, count(*) as totRecTbx from restacassagg';
  sql:= sql + ' UNION select "riepmovg" as nomeTbx, count(*) as totRecTbx from riepmovg';
  sql:= sql + ' UNION select "componfam" as nomeTbx, count(*) AS totRecTbx from componfam';
  sql:= sql + ' UNION select "riepnewrecdb" as nomeTbx, count(*) as totRecTbx from riepnewrecdb) as contaRecDB';
  DataModule1.ZConnection1.Database:= dbOrig;

--- Termina codice ---

Questa volta non so pproprio da dove cominciare. Ho provato a togliere l'ultima modifica, ma non è cambiato niente.

xinyiman:
Consiglio spassionato. Hai verificato che la query funzioni? Visto che si tratta di una query non parametrizzata fai anche abbastanza veloce. Copy e incolli nel DBMS che usi e vedi se il problema è li.

slapshot:
Fpc user guide dice:

https://www.freepascal.org/docs-html/user/userap4.html#x189-196000D

petrusic:

--- Citazione da: slapshot - Marzo 22, 2024, 09:08:30 pm ---Fpc user guide dice:
https://www.freepascal.org/docs-html/user/userap4.html#x189-196000D

--- Termina citazione ---

--- Citazione da: xinyiman - Marzo 22, 2024, 04:55:10 pm ---Consiglio spassionato. Hai verificato che la query funzioni? Visto che si tratta di una query non parametrizzata fai anche abbastanza veloce. Copy e incolli nel DBMS che usi e vedi se il problema è li.

--- Termina citazione ---

Questo passo di programma, come tanti altri che accedono al databse è stato testato ancor prima dell'ultima modifica e funzionava perfettamente. E' inoltre mia abitudine provare sempre le query che compilo con l'applicazione DB Browser for SQLite e posso, per certo affermare che, a parte l'aggiunta di una form di avviso per l'utente, non ho apportato altre modifiche.
Nel mio post d'apertura ho anche detto che ho reso inattive le ultime modifiche , ma riprovando, l'Errore 216 si ripresenta ugualmente.

Prima di aprire questa discussione ho anche letto le note sull'Errore 216, l'istruzione segnalata si trova all'interno della Form1, mentre io ho aggiunto la Form8 che viene creata ed avviata dentro la Form9.

DragoRosso:
L'errore 216 è un errore abbastanza comune e l'indicazione così come è stata data è troppo generica.

E' necessario identificare il blocco di codice dove avviene ciò.
Il fatto che avvenga in una Form o in un'altra non toglie che le ultime modifiche non ne siano la causa. Una variabile globale, un evento, o altro possono essere influenzati anche da altri componenti / classi / moduli.

Metti diversi Breakpoint per delimitare la zona di ricerca, in alternativa occorre leggere i "map files" per vedere a cosa corrisponde l'indirizzo incriminato.

Ciao

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa