Grazie ad entrambi,
@nomorelogic
questa tua risposta conferma la mia interpretazione, l'assegnazione
non assegna i valori ma solo l'indirizzo, quindi se distruggo l'oggetto TMiaSelezione (che contiene la query e i dati) di fatto perdo un puntatore, chiaro
@bonmario
l'errore che ho descritto avviene alla seconda chiamata di ShowMessage, dove cerco di accedere alla query interna all'oggetto TMiaSelezione, dopo averlo distrutto.
// inizializzo una TQuery per memorizzare i dati che verranno selezionati
query:= TQuery.Create(nil);
// quì la funzione restituisce la query utilizzata all'interno di TMiaSelezione
query:= F.GetQuery;
// testo l'assegnazione utilizzando la variabile locale e tutto funziona !!
ShowMessage( query.FieldByName( 'campo_qualsiasi').AsString);
// ora libero l'oggetto TMiaSelezione
F.Free;
// testo l'assegnazione ma questo NON funziona
ShowMessage( query.FieldByName( 'campo_qualsiasi').AsString);
chiaramente se non distruggo TMiaSelezione ma lo chiamo successivamente a quello di query (come hai suggerito), il tutto funziona,
ma vista in questo modo allora non avrebbe senso creare una variabile query locale per assegnargli il valore di TMiaSelezione.query in quanto potrei tranquillamente utilizzare l'oggetto TMiaSelezione, leggere quello che mi serve e poi distruggerlo.
il che ci porta alla mia domanda iniziale: come posso tenere a disposizione i dati dopo aver distrutto TMiaSelezione ... ammesso che sia possibile ?
In sostanza come si fà a trasferire i dati (solamente il record corrente) al di fuori di TMiaSelezione?
Lo scopo è utilizzarli successivamente, e in un altro ambito, alla distruzione di TMiaSelezione
Marco
ok chiaro, ma non mi và di creare ogni volta le strutture... assegnarle i valori...
Ho trovato una alternativa, non mi riempie di gioia e probabilmente sarà anche poco ortodossa, ma l'ho testata e funziona perfettamente,
solitamente l'inizializzazione della query avviene all'interno dell'oggetto che gestisce la struttura dati, ma come abbiamo visto quando distruggo l'oggetto mi perdo anche la query con i dati,
allora ho pensato di creare la query al di fuori dell'oggetto e passarla come var ... lasciare che l'utente faccia quello che vuole all'interno del form modale,
quando esce posso distruggere l'oggetto tanto la query contiene ora i dati, faccio quello che devo e poi la distruggo io, diciamo un compromesso tra la risposta di bonmario: invertire l'ordine dei distruttori
e quello che volevo fare io, dstruggere subilo la form modale e poi lavorare con i dati :)
questo un esempio semplificato del codice
...
MyQuery:= TQuery.Create(nil);
MyQuery.Text:= 'SELECT ....ecc..ecc';
MySelezione:= TMySelezione.Create(nil);
MySelezione.SetQuery( MyQuery, nome_campo_da_ritornare_come_valore);
MySelezione.ShowModal;
MySelezione.Free;
MyQuery..... faccio quello che devo
MyQuery.free;
...
come si dice, non sarà il massimo ma fa il suo sporco lavoro
Certo, trovare il modo di "copiare i dati" dall'oggetto non sarebbe male
ciao Marco