Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: antoniog - Novembre 03, 2018, 01:07:30 am

Titolo: Operation cannot be performed on an inactive dataset.[RISOLTO]
Inserito da: antoniog - Novembre 03, 2018, 01:07:30 am
Linux Mint 19x64-Lazarus 1.8.4- Zeos 2.14 - sqlite
Può sembrare incredibile è forse lo è ma una semplice istruzione come:ZTable.Active:=False; o ZConnection.Connected := False;
Può generare un errore di : Operation cannot be performed on an inactive dataset
e a questo punto farci impazzire perchè il nostro codice è corretto, tutto giusto, niente di sbagliato ma la logica di questo errore è un mistero e mi è capitato sia usando Zeoslib che  usando le semplici tabelle TSQLite3Dataset.Avevo dei campi di immissione in base ai quali calcolavo il campo successivo quindi avevo messo in OnExit del campo l'istruzione per il calcolo, es.:
Codice: [Seleziona]
 ZTable.Edit;          ZTableIVA_T_IMPO.Value:=
                     ceiling(ZTableSpese_TEC.Value+
          ZTableCNAP_IMP.Value)*
                     (ZTableIVA_TEC.Value/100);

          ZTable.Post;   

questa operazione mi generava l'errore chiudendo la ZTable con ZTable.Active:=False;. Dopo varie prove molto stressanti ho risolto. Innanzi tutto ho messo l'istruzioni in OnChange ed in OnExit (vuoto) il richiamo a OnChange, poi ho modificato l'istruzione come segue:
Codice: [Seleziona]
procedure DBEdit66Change(Sender: TObject);var  I, Code: Integer;begin
  val(DBEdit64.Text, I, Code);
     if Code=0 then //I > 0 then
       begin
         ZTable.Edit;
         ZTableCNAP_IMP.Value:=
             (ZTableCNAP_P.Value/100)*
             ZTableSpese_TEC.Value;
         ZTable.Post;

       end;
end;       
 
   
E NON mi genera più l'errore quindi ho risolto.
Titolo: Re:Operation cannot be performed on an inactive dataset.[RISOLTO]
Inserito da: xinyiman - Novembre 03, 2018, 11:22:10 am
Grazie per la segnalazione