Newsgroup: it.comp.appl.access
Titolo: [Query] passare sql a una variabile

Questa è sicuramente facile. 
Ho una query presente nel database.
Come faccio a passarne il "contenuto" sql a una variabile stringa?

 Come faccio a passarne il "contenuto" sql a una variabile stringa?
Stringa=Currentdb.QueryDefs("NomeQuery").SQL
Ciao Giorgio.

 Stringa=Currentdb.QueryDefs("NomeQuery").SQL
Per la verita` un'occhiata alla guida l'avevo data. Tuttavia trovo strano 
che l'unico modo di accedere a un oggetto query sia tramite l'insieme 
querydefs. Per le maschere non funziona proprio cosě. Mi sfugge la logica 
sottostante.
Cmq grazie.

 Cmq grazie.
Prego Giorgio.

 e ovviamente esiste anche il metodo per ADO.
 
Ok. Questo piů o meno lo avevo capito :-)
I miei crucci sono spesso dettati dalla sensazione di non saper 
"come" fare le cose. Raggiungo il risultato finale, ma con soluzioni 
orribili.
Per esempio, da alcuni giorni sto giocando con una maschera non 
associata che deve impostare i criteri da passare a una query. 
Dovendo inviare l'output della query su un file che costituisce 
l'origine dati per una stampa unione, ho fatto cosě:
a. ho creato una query di selezione "liscia" senza criteri
b. ho assegnato l'sql della query a una stringa
c. ho concatenato la stringa con la stringa criteri generata 
   attraverso la lettura dei controlli presenti sulla maschera.
d. ho aggiornato l'oggetto query con Set MyQueryDef = CurrentDb... 
   seguito da MyQueryDef.SQL = stringa
e. ho lanciato DoCmd.OutputTo...
f. ho riassegnato all'oggetto query l'sql originale che avevo 
   parcheggiato in una seconda stringa 
Il tutto nella stessa sub (mailmerge, sql di aggiornamento per il 
flag "stampato", ecc. ecc.).
Un gran pasticcio.

 Un gran pasticcio.
Ciao Massimo
La sensazione di non saper come fare le cose forse un giorno sparirà (a me
non è ancora sparita anche se è dal 79 che faccio questo lavoro). Io dedico
molto tempo allo studio e ai test sulle nuove tecnologie messe a
disposizione e questo tempo è ripagato in fase di produzione.
Il tuo problema può essere risolto in maniera più semplice e meno soggetta a
BUG (se due o più operatori eseguono la tua sub nello stesso instante e con
filtri diversi cosa succede ?).
Prova a crearti una sub in base a questo semplice esempio.
Sub OutPutQuery()
Dim StrFiltro As String
'Filtro che comporrai in base al tuo form non associato
StrFiltro = "Id=3 Or Id=1"
'Apro la query standard senza filtri
DoCmd.OpenQuery "QueryProva", acViewNormal
'Applicho il filtro
DoCmd.ApplyFilter , StrFiltro
'Eseguo l'output
DoCmd.OutputTo acOutputQuery, "QueryProva", "Text", "C:\Pippo.txt"
'Chiudo la query
DoCmd.Close acQuery, "QueryProva", acSaveNo
End Sub
Se non vuoi far vedere l'apertura della query a video inserisci prima di
OpenQuery "Application.Echo False" e dopo Close Query "Application.Echo
True" (con la disabilitazione dell'echo è bene utilizzare una routine per
intercettare eventuali errori e ristabilire l'echo dell'applicazione).
Ciao Giorgio.

 End Sub
[...]
Ho provato la tua soluzione e sembra effettivamente valida. Su una 
cosa a mio modesto avviso è inferiore a quella da me prospettata. 
Viene aperta una query su cui non è applicato alcun filtro. E se la 
query contenesse 100.000 record? Cosa potrei fare? Impostare la 
proprietà MaxRecords nella query a un numero ragionevole? Esiste 
un'altra soluzione?
PS: non è questo il caso perché la query, ancor prima di applicare
i criteri della maschera non associata, richiede avvisato=false 
che comunque rappresenta una piccola selezione del totale.

 un'altra soluzione?
La proprietà MaxRecords non funziona sui db di microsoft Access ma solo su
tabelle collegate a un'origine dati ODBC o a Viste e Stored Provedure di un
Progetto ADP.
Nel caso tu usassi ODBC vengono resi pacchetti di circa 250 record quindi la
situazione migliora.
Nel caso tu usassi un progetto ADP conviene progettare una Stored procedure
che esegue le elaborazioni e le memorizza in una tabella temporanea (##Tmp)
identificando i record dall' HOST_ID() a prevenzioni di accavallamenti
simultanei.
Le soluzioni possono essere tante inclusa quella da te sviluppata,  e ogni
caso ha la sua soluzione conveniente e funzionale a seconda del ritorno
finanziario e della quantità di dati trattati.
Ciao Giorgio.