L'avere risolto con un sotterfugio l'errore mi lasciava perplesso e non mi convinceva ad andare avanti, perchè togliendo la connessione a ZConnection con False in Connected, con conseguente disattivazione di tutte le ZTable nel Datamodule, generasse un errore di "Access violation" e a volte proseguendo di "Operation cannot be performed on an inactive dataset"?
per cui ho continuato col debug e con la ricerca dell'arcano. Alla fine ho trovato questa istruzione che poteva essere la causa del secondo messaggio di errore
procedure TGescompF.DBEdit100Change(Sender: TObject);
begin
DataProge.Progetto.Edit;
DataProge.ProgettoImprevisti.Value:=
(DataProge.ProgettoTOT_PROG.Value-DataProge.ProgettoTOTALE2.Value);
DataProge.ProgettoTOTLETTERE.Value:= NumLettere(DataProge.ProgettoTOT_PROG.Value);
end;
ho provato a sostituirla con la seguente
procedure TGescompF.DBEdit100Change(Sender: TObject);
begin
if DataProge.Progetto.Active then
begin
DataProge.Progetto.Edit;
DataProge.ProgettoImprevisti.Value:=
(DataProge.ProgettoTOT_PROG.Value-DataProge.ProgettoTOTALE2.Value);
DataProge.ProgettoTOTLETTERE.Value:= NumLettere(DataProge.ProgettoTOT_PROG.Value);
end;
end;
e tutto si è risolto, con l'istruzione OnChange andavo a scrivere su una tabella che non era attiva!
Effettuata la modifica il cambio degli archivi a runtime funziona perfettamente ma ho perso quasi un mese nella ricerca dell'errore.