Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Marzo 09, 2022, 12:04:03 pm

Titolo: [Risolto] Errore su OpenDB con Zeos
Inserito da: petrusic - Marzo 09, 2022, 12:04:03 pm
.Da ieri mattina cerco di risalire ad un errore che si manifesta durante la Open del mio DB. Sembra un errore logico, ma non ho saputo riconoscere alcuna possibile anomalia.

L'errore è segnalato con la finestra allegata.

Riporto pure il passo di programma incriminato.
Codice: [Seleziona]
function FaiGridVoceSotCto(coVoSotCto, nomiVoce: string): String;  
. . .
 coVoCtoPriCas:= LeftStr(coVoSotCtoCassa, 6) + '000';
          sql:= 'SELECT piancont.NomeVoce FROM piancont WHERE piancont.NumVoce = ' +  coVoSotCtoCassa;
          swOpenErro:= OpenDbZQuery1(sql);
          if not swOpenErro then
          begin
            Form6.ZReadOnlyQuery1.First;
            nomiVoceCassa:= Form6.ZReadOnlyQuery1.FieldByName('NomeVoce').AsString;   // Legge il NomeVoce del SottoConto di Cassa
            Form6.ZReadOnlyQuery1.Close;
            sql:= ' SELECT piancont.NomeVoce FROM piancont WHERE piancont.NumVoce= ' + coVoCtoPriCas;
            swOpenErro:= OpenDbZQuery1(sql);
            if not swOpenErro then
            begin
              Form6.ZReadOnlyQuery1.First;
              nomiVoceCassa:= (Form6.ZReadOnlyQuery1.FieldByName('NomeVoce').AsString) + nomiVoceCassa + '.';   // Legge il NomeVoce del Conto Principale di Cassa
              Form6.ZReadOnlyQuery1.Close;
            end;                                                       
//------------------------------------------------------------   FIN QUI funziona benissimo
 sql:= 'SELECT movimgg.DtCoMovgg, movimgg.DescrMovvgg, movimgg.ImpMovvgg, movimgg.MonMovvgg FROM movimgg ';
            sql:= sql + 'WHERE movimgg.DtCoMovgg >= ' +  dataIni  + ' AND movimgg.DtCoMovgg <= ' + dataFin;
            sql:= sql + ' AND movimgg.CoVocMovvgg = coVoSotCtoCassa ORDER BY movimgg.CoVocMovvgg, movimgg.DtSolMovgg, movimgg.OraSolMovgg';
            WriteLn('sql = "' + sql + '"');
            WriteLn('coVoSotCtoCassa = "' + coVoSotCtoCassa + '"');
//----------------------------------------------------------------------- istruzioni in osservazione -----------------------------------------------------------------
Form6.ZConnect.Database := dbCorr;
 Form6.ZReadOnlyQuery1.SQL.Text := sql;
 try
   Form6.ZReadOnlyQuery1.Open;      // <----------------------- questa Open NON FUNZIONA
   except
   on E: Exception do
   begin
       WriteLn('ERRORE nella OPEN del ContabFamdb (sql: "' + sql + '" ' + IntToStr(E.HelpContext) + ': ' + E.Message);
       swOpenErro:= True;
   end;
 end;
          end;
 if not swOpenErro then
 begin
   nuRec:= Form6.ZReadOnlyQuery1.RecordCount;
 end;
 Form6.ZReadOnlyQuery1.Close;     
. . .             

Non cerco la soluzione al problema. Vorrei capire cosa andare a guardare a cui non ho pensato:
1) ho verificato la stringa sql eseguendo la query con DBBROWSER for SQLite. --> Legge correttamente 64 record
2) ho guardato tutto il percorso eseguito dal programma, verificando che tutte le Open fossero seguite dalle rispettive Close, e ci sono tutte.
ho verificato il nome del DB fornito a ZConnect (dbCorr = '/media/dirdati/dativari/contabfam/ContabFamdb_prove') --> Corretto

 :'(
Titolo: Re:Errore su OpenDB con Zeos
Inserito da: DragoRosso - Marzo 09, 2022, 12:44:37 pm
Non riesco a vedere il dettaglio in questo momento, ma il problema segnalato è che il dataset non è attivo (quindi è in stato ACTIVE = FALSE, oppure è stato fatto una "CLOSE").

La query viene eseguita al momento della messa in stato di TRUE della proprietà ACTIVE, e non deve essere messa in FALSE per tutta la durata delle operazioni (a meno che tu non abbia finito le operazioni e non intenda eseguire un'altra query).

Se esegui un passo passo tramite il debugger con dei breakpoint "mirati" non dovresti avere difficolta a trovare il problema (prova a mettere in WATCH la proprietà ACTIVE della query).
Ciao.