Forum > Databases

Ancora su 'Operation cannot be performed on an inactive dataset'.

(1/2) > >>

JonnyB:
Un saluto a tutti,
sono un programmatore delphi che sta valutando il passaggio a Lazarus 2.0.6.
Nel simulare l'utilizzo dei vari componenti, soprattutto legati ai database,
ho incontrato una prima difficoltà riguardante i campi di fklookup, che
permettono, data una tabella, di reperire dei valori da una tabella di servizio collegando i relativi campi con un campo chiave.
Esempio
TabellaPrincipale->id_localita --> TabellaDiServizio->id_Localita->Descrizione_localita

Provate ad aprire il progetto nella cartella degli esempi di Lazarus al
seguente percorso C:\lazarus\examples\database\dblookup.
A design time sembra tutto a posto: la compilazione e la generazione dell'eseguibile vengono completati correttamente. Quando però viene eseguito il programma si verifica il seguente errore: 'Operation cannot be performed on an active dataset'.
Stranamente il problema si risolve disattivando a design time i due dataset e ricreando l'eseguibile!

Ho simulato una situazione simile utilizzando i componenti di Zeos Access versione 7.2.4 lavorando su tabelle di un Db Firebird 2.5.
A design time la creazione del campo fklookup non presenta problemi,
tutto sembra funzionare correttamente, nella dbgrid il campo  di fklookup viene correttamente visualizzato col dato recuperato dalla tabella di servizio.
Quando eseguo il programma però si verifica il seguente errore:
'Operation cannot be performed on an inactive dataset'.
(nel primo caso 'active dataset' nel secondo 'inactive dataset').

Se qualcuno di voi ha avuto un problema simile, como lo ha risolto ?
Vi ringrazio in anticipo.

xinyiman:
Ciao, io di solito gestisco tutto tramite codice alla creazione della form.
Apro il connettore, apro la transaction e apro la query.
Poi chiudo tutto nella distruzione della form

JonnyB:
Sono d'accordo con te, rimane il fatto che creando un campo di tipo fklookup in una TZTable, a designtime, tutto sembra funzionare correttamente, mentre a runtime avviene l'errore in argomento.
Si aggira l'errore aprendo la TZTable a runtime.
In una precedente installazione di Lazarus, se non ricordo male, lo stesso errore lo ottenevo anche con i componenti ibx4lazarus.
Se qualcuno potesse approfondire quanto sopra, si renderebbe più performante la piattaforma.
Comunque grazie.

nomorelogic:
nell'evento OnCalc

credo basti mettere l'istruzione

--- Codice: ---
if not Table1.Active then
   exit;

--- Termina codice ---

Edit:
come prima istruzione

JonnyB:
Ho provato il tuo suggerimento ma non funziona.
Rimane un mistero!

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa