Newsgroup: it.comp.appl.access
Titolo: Strano comportamento della proprietà QueryDefs

Ho una semplice maschera con un campo testo e un pulsante.
Nel campo testo si deve inserire una data e, premendo il pulsante, si apre
una seconda maschera con i risultati di una query filtrata per la data
inserita. Semplice no?
Per rendere la query parametrica ho inserito nel codice del pulsante
l'istruzione:
currentdb.querydefs("nomequery").sql = "SELECT bla bla bla FROM bla bla bla
WHERE bla=" & caselladitesto & ";"
Ma mi da questo strano problema:
siccome la clausola FROM è un'altra query
"SELECT ... FROM [SELECT ... FROM ... WHERE ...]
dopo la parentesi quadra ci vuole il punto ".", giusto?
"SELECT ... FROM [SELECT ... FROM ... WHERE ...]. AS Ciccio
Il fatto è che quando l'sql viene modificato dal codice tramite la proprietà
QueryDefs.sql, mi perde il punto e la query non funziona!!
Se io faccio copia/incolla, dall'sql della query al codice, e lo lascio così
com'è va tutto bene. Ma se spezzo la stringa, non importa in che punto,
aggiungendo la variabile "..." & caselladitesto & ";" non mi scrive il
punto.
Com'è possibile?
Grazie in anticipo per l'aiuto.

 ha scritto nel messaggio
news:AACyc.105430$Qc.40...@twister1.libero.it...

secondo Access le query le deve scrivere lui e incontrando un' Sql appena
più evoluto va in crisi.
Quando apporti le modifiche nella tua query cambia le parentesi quadre in
tonde e togli il puntino, lui salvando rimetterà le quadre e il puntino ma
la query funzionerà fino alla prossima modifica.
Ciao Giorgio


Se perde il punto IMO fai un errore nella combinazione del
string. Purtroppo non hai citato esatamente cosa fai.
Ma se la tua versione segreta di Access è >= A00 esiste
anche un altro modo, cioè
SELECT ... FROM (SELECT ... FROM ... WHERE ...)
Allora prova con questa versione "ufficiale" e standard SQL.
Dopo una query viene salvata per la prima volta Access
automaticamente cambia la sintassi di nuovo a [].
Ma non cambia niente per il funzionamento.
-- 
HTH
Karl
*********
Access-FAQ (tedesco): 
http://www.donkarl.com

Grazie a tutti.

Ho parlato troppo presto!
Purtroppo non funziona lo stesso!
Questo è il codice che uso nella routine del pulsante:
CurrentDb.QueryDefs("Entrate-Uscite").Sql = "SELECT [fine],
IIf(IsNull([fine]),'',IIf([fine]=#" & Format(l_Ini, "mm/dd,yyyy") &
"#,[nomeesce],[nomeesce] & ' (' & [fine] & ')')) AS Esce,
[Appartamento].[Nome], IIf(IsNull([inizio]),'',IIf([inizio]=#" &
Format(l_Ini, "mm/dd/yyyy") & "#,[nomeentra],[nomeentra] & ' (' & [inizio] &
')')) AS Entra, [inizio] FROM (SELECT * FROM FineToInizioFiltrata UNION
Select * From InizioToFineFiltrata) AS Tx INNER JOIN Appartamento ON
Tx.idappartamento=[Appartamento].[IdAppartamento] ORDER BY
Tx.idappartamento, IIf(IsNull([Fine]),[Inizio],[Fine]);"
Come vedete la seconda SELECT (quarta riga) è con le tonde e senza puntino.
Dopo aver premuto il pulsante, vado ad aprire la query e leggo cos'ha
combinato nell'sql. Ebbene è vero che ha cambiato le tonde in quadre ma il
punto latita ancora...
Cosa manca?

 ha scritto nel messaggio
news:JVHyc.54116$Wc.16...@twister2.libero.it...

Ciao,
Cosa vuol dire non funziona ? se dopo averla salvata con le parentesi tonde
non da errore la sintassi è corretta, se non rende il risultato sperato devi
indagare altrove.
Se non vuoi la seccatura di modificare tutte le volte le parentesi salva la
query di unione a parte, crea una nuova query (MergeInizioFineFiltrata) con
questo codice
------------------
SELECT * FROM FineToInizioFiltrata
UNION
SELECT * FROM InizioToFineFiltrata
-------------------
e poi la utilizzi nella tua querydef
-------------
........
.......
FROM MergeInizioFineFiltrata AS Tx INNER JOIN Appartamento ON
Tx.idappartamento=[Appartamento].[IdAppartamento] ORDER BY
Tx.idappartamento, IIf(IsNull([Fine]),[Inizio],[Fine])
------------
Ciao Giorgio


Ciao Giorgio
Ma tu cosa intendi per "salvarla con le parentesi tonde"? Dopo che hai
eseguito currentdb.querydefs ecc, ecc, non dovrebbe essere già salvata?
Comunque, io faccio così:
apro access, vado sulle query, seleziono "entrate-uscite", apro in
visualizzazione struttura, poi sql.
Cambio le quadre con le tonde e tolgo il punto. Eseguo e funziona.
Chiudo la query, mi chiede se voglio salvare, clicco sì. Se riapro la query
in visualizzazione sql, effettivamente adesso ci sono le quadre e il punto.
Bene.
Ma... se adesso apro l'editor di VBA, vado nella maschera in questione,
scrivo, nella routine del pulsante, la query con le tonde e senza punto,
quando apro la maschera, scrivo una data e premo il pulsante, dovrebbe
aprirsi un report che ha, come origine dati la query appena modificata;
invece non succede niente.
Allora, torno al database, apro la query "entrate-uscite" in visualizzazione
sql e vedo che, in effetti, la routine mi ha cambiato l'sql (la data è
effettivamente quella che ho inserito nella maschera), solo che adesso ha
solo le quadre senza punto. E se provo ad eseguirla da qui mi dice "Il
modulo di gestione di database Microsoft Jet non è in grado di trovare la
tabella o la query di input 'Select... bla bla bla'. Verificare che esista
ecc. ecc." (ecco perché non apriva il report!)
Non so se mi sono spiegato...
In ogni caso adesso provo a fare come hai detto tu, ovvero allungare la
minestra facendo un'altra query a parte per la UNION e poi implementarla.
Grazie di nuovo.
Frigster.