Newsgroup: it.comp.appl.access
Titolo: Querydef basata su querydef

Salve a tutti!
In Access 97, vorrei riuscire, da VB, a creare una querydef che
selezioni i dati da un'altra querydef appena creata.
Come si fa?
Grazie mille.
Marco


SELECT ... FROM [Nome Query] WHERE ....
La clausola FROM in Access può far riferimento anche ad un altra Query non
solo a Tabelle.
Antonio.



No, scusa, forse mi sono spiegato male. Che nella from io possa
mettere anche le query lo sapevo, quello che non riesco a fare è una
cosa del genere:
    Set DBMosaici = CurrentDb()
    Set qryEliminazioni = DBMosaici.QueryDefs("SelezioneEliminazioni")
    Set rstElencoRecord = qryEliminazioni.OpenRecordset(dbOpenDynaset)
    rstElencoRecord.MoveLast
    NumeroEdifici = rstElencoRecord.RecordCount
    Set qryElencoEdifici = DBMosaici.CreateQueryDef("", "SELECT
[IdMosaico] FROM [qryEliminazioni] GROUP BY [IdMosaico]")
    Set rstElencoElementi =
qryElencoEdifici.OpenRecordset(dbOpenDynaset)
Quando arriva alla riga nella quale crea la query temporanea e la
mette in qryElencoEdifici, mi dice che "la tabella o query
[qryEliminazioni] non esiste" etc.
Grazie dell'aiuto.
Marco

 Marco
Prova cosě:
Set qryElencoEdifici = DBMosaici.CreateQueryDef("", "SELECT
 [IdMosaico] FROM [SelezioneEliminazioni] GROUP BY [IdMosaico]")
Non capisco perchč vuoi usare qryEliminazioni.
Ciao, Antonio.


Il fatto è che "SelezioneEliminazioni" la uso solo ora per fare delle
prove.
Il concetto è questo: devo fare una query che cambia a seconda della
maschera in cui l'utente si trova, con condizioni WHERE o Parametri
sempre dipendenti dalla situazione.
Devo poi lanciare altre query usando come sorgente dati la query di
cui sopra.
Poiché il tutto è molto poco determinabile a priori, vorrei gestire il
tutto via codice, e creare le query adatte all'occorrenza, con i
criteri adatti. Vorrei anche, chiaramente, trovare la strada per non
dovere creare tutte le query possibili (sarebbero parecchie) per poi
richiamarle alla bisogna.
Ma non riesco a creare una querydef basata su un'altra querydef.
Tantomeno se sono temporanee.
Grazie.
Marco.

 ha scritto nel messaggio
news:d9D4PSHvO9=uRKa93Zd...@4ax.com...

Creati una query qualsiasi chiamata Query1.
Da codice modifica il suo codice SQL, a tuo piacimento e poi richiama sempre
e comunque Query1.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

e comunque Query1.
Tanto per la precisione: questa tua risposta significa che in Access
97 non è possibile utilizzare una querydef come sorgente dati per
un'altra querydef, oppure è solo un tuo consiglio su come procedere?
Perché io, come scrivevo sopra, devo eseguire Query1 a seconda di
certe condizioni, e tenermela stretta perchè mi serve. E mi serve sia
da sola, sia come sorgente per ricavare altri dati tramite varie
Query2, Query3, etc..
Se, come dici tu, uso sempre Query1 e ne cambio la stringa SQL,
anzitutto perdo i dati di cui ho bisogno, e poi le successive Query
dovranno essere eseguite ognuna sull'insieme dati iniziale, molto più
grande di quello che Query1 avrebbe creato. Quindi + lento.
Che ne dici?
Grazie.
Marco

 Marco


La seconda.
E, quindi, la prima come si fa?
Non è che insisto, è solo l'oggetto della mia domanda originale.
Grazie
Marco.

 Marco.


 grande di quello che Query1 avrebbe creato. Quindi + lento.
Non è possibile di usare una querydef non salvata (=senza nome)
in una seconda querydef. La clausola FROM di una query (=querydef)
ha bisogno di un nome di una tabella/query o di un'istruzione SQL.
Per questo in genere è meglio di creare tutta l'istruzione SQL di nuovo
in ogni situazione.
Si puo fare una cosa "successiva" con dei recordsets per cui
esiste la proprietà Filter. Ma come dice anche la guida in linea
per Filter: Normalmente SQL è più performante.
Se vuoi assolutamente prendere 2 Querydef non salvate:
Puoi solo usare l'istruzione SOL della prima querydef p.e. in un
SubSelect della seconda querydef.
La sintassi per un tale SubSelect in A97 è un po strano. Esempio:
Set qdf1 = db.CreateQueryDef("", "SELECT * FROM tabella")
Set qdf2 = db.CreateQueryDef("", "SELECT id FROM [" & qdf1.SQL & "]. AS pippo
GROUP BY id")
Ma spesso una tale cosa è più lenta di una query complettamente
nuova senza subselect. Dipende un po della complessità.
-- 
HTH
Karl
*********
Access-FAQ (tedesco): 
http://www.donkarl.com

 un'altra querydef...
Non è possibile di usare una querydef non salvata e senza nome
in un'altra querydef. La clausola FROM ha bisogno di un nome di
una tabella/query o di un'istruzione SQL. Per questo in genere è
meglio di creare tutta l'istruzione SQL di nuovo in ogni situazione.
Si puo fare una cosa "successiva" con dei recordsets per cui
esiste la proprietà Filter. Vedi l'esempio nella guida in linea.
Ma come dice anche la guida normalmente SQL è più performante.
Se vuoi assolutamente prendere 2 querydef non salvate puoi solo
usare l'istruzione SOL della prima querydef p.e. in un SubSelect
della seconda querydef.
La sintassi per un tale SubSelect in A97 è un po strano. Esempio:
Set qdf1 = db.CreateQueryDef("", "SELECT * FROM tabella")
Set qdf2 = db.CreateQueryDef("", "SELECT id FROM [" & qdf1.SQL & "]. AS pippo
GROUP BY id")
Ma normalmente una tale cosa è più lenta di una query complettamente
nuova senza subselect.
-- 




Grazie mille Karl!
Risposta chiara ed esauriente.
Marco