Newsgroup: it.comp.appl.access
Titolo: Operazioni con query

Ciao a tutti!
Sto creando una stampa che mi restituisce totali di vari record  di tabelle. 
Usando delle query creo le liste che mi servono e calcolo il totale dei 
record.
Una query delle piů semplici, memorizzate nella cartella query, potrebbe 
essere questa anche se ce ne sono di decisamente piů complicate, a campi 
incrociati e query di query. Sono parametrizzate da campi di una maschera e 
provengono da tabelle collegate ad altro database access.
Query "TotaleInattivi" :
SELECT [Movimenti].MeseAnno, [Movimenti].Inattivi
FROM [Movimenti]
WHERE ((([Movimenti].MeseAnno) Between DateSerial(Forms![Scelte per 
stampa]!AnnoInizioPeriodo,9,1) And DateSerial(Forms![Scelte per 
stampa]!AnnoFinePeriodo,8,31)) And (([Movimenti].Inattivi)>0));
se lancio la query dalla finestra database tutto bene: mi da la lista dei 
record filtrati ecc.
nella stampa metto una casella di testo con origine controllo 
=ConteggioQuery("TotaleInattivi") che č questa
Public Function ConteggioQuery(NomeQuery As String) As Long
Dim Dbs As Database
Dim Rst As Recordset
Set Dbs = CurrentDb
Set Rst = Dbs.OpenRecordset(NomeQuery)
If Rst.RecordCount > 0 Then
    Rst.MoveLast
    ConteggioQuery = Rst.RecordCount
Else
    ConteggioQuery = 0
End If
Rst.Close
End Function
Mi da questo errore:
Errore run-time '3061'
Parametri insufficienti. Previsto 2.
Qualcuno mi illumina!
Grazie!

 =ConteggioQuery("TotaleInattivi") che è questa
non fai prima a fare =dcount("campo","totaleinattivi") ?
Questo a parte la questione dei parametri che prevede la forms [Scelte 
per stampa] attiva
--
ac

 tabelle.
[...]
Cosě funziona:
============================
Public Function Conta() As Long
Dim RS As Recordset, SQL As String
SQL = "SELECT T1.F1, T1.Data_ FROM T1 WHERE T1.Data_ Between #" & _
      Format([Forms]![Form1]![DataIni], "mm-dd-yy") & "# And #" & _
      Format([Forms]![Form1]![DataFin], "mm-dd-yy") & "#;"
Set RS = CurrentDb.OpenRecordset(SQL)
If RS.RecordCount Then
    RS.MoveLast
    Conta = RS.RecordCount
Else
    Conta = 0
End If
End Function
===============================
Bruno 

Le possibilità sono sostanzialmente 2 per ottimizzare l'azione:
1)Come ti ha suggerito A.Cara usare una funzione di aggregazione
  sui domini inserendo il Criterio nella stessa.
  Lo svantaggio di questo metodo è che nel caso di un Recordset di
dimensioni
  sostanziose si evidenziano rallentamenti.
2)Ottimizzare una query SQL  vista la possibilità
  di far eseguire la somma alla chiamata SQL.
  SELECT Count(NomeCampo) As Conteggio From NomeTabella WHERE
condizioni
  Aprendo il Recordset avrai già il conteggio fatto nel campo
Conteggio che puoi
  estrarre in questo modo:
  rs!Conteggio
  Non devi nemmeno verificare EOF perchè essendo una SQL con
raggruppamento per somma restituisce sempre e comunque un risultato che
varierà da 0÷Conteggio
Ciao
@Alex

Alessandro Baraldi wrote:
facciamo sta ciat. Mi sembra che sei in linea.
Che dici mi vado a mangiare una pasta alla crema?
mi spieghi perche'
dcount("*","tab")
e' meno performante di
select count(*) from tab?
--
ac

Sono in linea.
Ne abbiamo già parlato l'anno scorso di questa cosa.
Non voglio convincerti, fai una prova invece in modo da poter validare
o meno la questione.
Io a suo tempo ho fatto diverse prove con i 2 metodi, calcolando i
tempi
in modo sicuro, ed ho notato che già superando i 10000 Records la
differenza
è evidente.
Nel mio caso specifico avevo alcune tabelle con qualche centinaio di
migliaio
di Records e la differenza era dell'ordine di qualche secondo.
Ora visto che ho discriminato che era meglio non mi pongo più il
problema
di quanti Record ho, uso sempre il metodo migliore, anche a scapito
della
leggerezza.
Se poi valuti che la scalabilità delle funzioni di aggregazione è
nulla......!
@Alex

 ha scritto nel messaggio 
news:1145969925.1...@e56g2000cwe.googlegroups.com...


 me molto più laboriosi da programmare).
Non conosco i motivi reconditi per cui l'istruzione VBA
Set Rst = Dbs.OpenRecordset(NomeQuery)
funziona solo se la query non ha parametri o riferimenti
ad oggetti esterni.
So solo che così è da sempre: "vuolsi così colà dove si
puote ciò che si vuole e più non dimandare".
Per tale motivo, ma non solo per esso, non utilizzo mai
alcuna query dalla finestra database: lì proprio non ne ho nessuna.
Le creo tutte da QBE, ne riporto il costrutto SQL in VBA e lì
le uso.
Bruno