Newsgroup: it.comp.appl.access
Titolo: query da Codice

Ho una variabile sql alla quale restituisco una stringa Sql.
Se eseguo questo comando:
DoCmd.Runsql sql
funziona tutto bene.
Se invece eseguo:
CurrentDb.Execute sql
mi genera
Errore di Run-time 3061
Parametri insufficienti. Precisto 3
che significa?
come risolvo?
grazie
Riccardo
p.s.: dovrei usare il metodo execute perchè dovrei usare l'opzione
dbSQLPassThrough
per eseguire una query Pass-Through.

 per eseguire una query Pass-Through.
nel tuo caso dovrai fare qualcosa tipo:
qdf.SQL= "la tua stinga sql"
qdf.parameters("nome parametro 1")= valore parametro 1
qdf.parameters("nome parametro 2")= valore parametro 2
qdf.parameters("nome parametro 3")= valore parametro 3
qdf.type= dbQSQLPassThrough
qdf.Execute
NON so se ho settato tutti i parametri, guardati l'help
Ciao, Max

 wrote in message rEf57.83905$q77.8...@news2.tin.it...

ci provo subito, grazie.
ma come mai invece con il RunSql non crea problemi?
che differenza c'č?
ciao Riccardo

 che differenza c'č?
Ho una mia teoria in proposito...
RunSql č un metodo dell'oggetto DoCmd, che fa parte del macrooggetto
Application (che comprende anche tutte le maschere)
La mia idea č che se esegui le query con DoCmd Access le controlla, e se
trova dei riferimenti a dei controlli contenuti nelle sue maschere fa le
opportune sostituzioni mettendoci i valori, e dando poi tutto in pasto al
DBengine.
Invece se usi il CurrentDb.Execute usi direttamente il DBengine... che di
suo non fa (giustamente) alcuna sostituzione... il DBengine funziona con sql
schietto, ed sql schietto prevede che ciň che č inserito tra parentesi
quadre e che non č riconosciuto sia considerato un parametro esterno, che
quindi viene richiesto. E quindi bisogna darglielo, come ti ho fatto vedere.
Ciao, Max (spero di non aver detto eresie :-)

 wrote in message Gjh57.129768$cd.7...@news1.tin.it...

Scusa ma non ho capito bene l'esempio di prima.
Supponiamo che la stringa sql che costruisco sia:
sql="SELECT Scadenze.Id_Cliente, Scadenze.Importo, CLienti.Cliente " _
    & "FROM Scadenze INNER JOIN (CLienti INNER JOIN Fatture ON " _
    & "CLienti.Id_Cliente = Fatture.Id_Cliente) ON Scadenze.Id_Ft =
Fatture.Id_Ft " _
    & "WHERE (((CLienti.Cliente) Like "*" & [Quale Cliente?] & "*") AND " _
    & "((Scadenze.DataSca)<= " & [Forms]![Data_Scaduto]![Data] & ") AND
((Scadenze.Saldo)=0))"
tu hai scritto:
Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("?????")
qdf.Parameters("????") =[Forms]![Data_Scaduto]![Data]
qdf.type= dbQSQLPassThrough
qdf.Execute
dovrebbe essere cosě?
ma nei punti interrogativi, cosa debbo scrivere?
ho letto l'help ma non ci ho capito nulla!
forse questo č giusto?
qdf.Parameters("<= [Forms]![Data_Scaduto]![Data]") =
[Forms]![Data_Scaduto]![Data]
(se ho capito bene il tuo esempio, ma in CurrentDb.QueryDefs("?????")
non so cosa scrivere)
La query non esiste, la voglio solo creare da codice.
ciao e grazie per la disponibilitŕ
Riccardo

 La query non esiste, la voglio solo creare da codice.
cos' crei una querydef temporanea (perchè come nome gli dai una stringa di
lunghezza nulla) e gli metti dentro il tuo codice sql.
ciao, max

 ciao, max
Mille grazie....sei proprio Mega!
ora funziona, debbo solo controllare se quello che sto facendo velocizza il
tutto!
(spero di si, altrimenti è solo tempo perso...anzi no, perchè ho
imparato una cosa nuova grazie a te)
ciao Riccardo