Newsgroup: it.comp.appl.access
Titolo: conteggio record di una tabella in base a risultato filtro di un altra tabella

mi spiego, ho una tabella allevi con il campo tesserapagata che vale –1 e 0 
dovrei ottenere il numero delle tessere con –1 e 0
della tabella allievi il cui ID esiste nella tabella abbonamenti “ma non 
tutta la tabella abbonamenti” soltanto i record ottenuti dopo aver applicato 
un filtro alla maschera abbonamenti con una stringa da vba
 
me.filter=bla bla bla
me.filteron=true
 
dovrei quindi fare qualcosa del tipo
 
count tesserapagata from allievi where idallievo exist from 
me.recordset?????????
qualcuno può aiutarmi nella sintassi?
 

tmtube pretended :

- Crea una query sulla tabella abbonamenti
  che esponga almeno ID_Allievo e TesseraPagata
- Crea una seconda query che filtri ID_Allievo
  e che restituisca solo quel campo
- Inserisci nei "Criteria" della prima query:
  IN(SQL-string della seconda query)
- Conta i record della prima query.
 
Bruno
 
 

 - Conta i record della prima query.
 
Precisazione:
- Inserisci nei "Criteria" del campo ID_Allievo
  della prima query...
 
Bruno
 
 

Bruno
 
Ci provo, spero di aver capito bene. intanto grazie.
 


Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
 
Set db = CurrentDb
 
strSQL = _
  "SELECT -Sum(TesseraPagata=True) AS CountPagata, " & _
  " -Sum(TesseraPagata=False) AS CountNonPagata" & _
  " FROM Allievi INNER JOIN Abbonamenti" & _
  " ON Allievi.AllieviId = Abbonamenti.AllieviId"
 
If Me.Filter > "" Then
    strSQL = strSQL & " WHERE " & Me.Filter
End If
 
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
 
If Not rs.BOF Then
    Debug.Print rs!CountPagata, rs!CountNonPagata
End If
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 

Access FAQ:  
http://www.donkarl.com/it
 
 
Ah però! la provo domani mattina perchè sono cotto! intanto grazie ;)
 

Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
 
 
 
sembra andare tutto bene fino al punto >> Set rs = db.OpenRecordset(strSQL, 
dbOpenDynaset)
 
inizialmente me.filter è uguale a
me.filter = [datacreazione] >= 
Forms![00presenta]![00presentaabbonamenti]![dal] and [datacreazione] <= 
Forms![00presenta]![00presentaabbonamenti]![al] and [attivo] = -1
 
sulla riga Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
restituisce l'errore di runtime 3061 parametri insufficienti previsto 2
??????? 
 


DAO non puo lavorare con un riferimento come Forms...
(vedi anche 
http://www.donkarl.com/it?FAQ6.4
).
Non puoi usare i valori invece dei riferimenti alle maschere
già nel filtro? Se non è possibile prova con Eval() nel filtro
come descritto nella FAQ.


"Karl Donaubauer"  ha scritto nel messaggio 
news:av178h...@mid.individual.net...

Confermo  ora funziona con i valori anzichè i riferimenti a form....
però mi da un problema se ho 4 abbonamenti uno di paolo e 3 di marco e le 
tessere non sono pagate mi restituisce correttamente
0 pagate 4 non pagate
se pago la tessera di marco mi restituisce
3 pagate 1 non pagate
mentre dovrebbe restituire 1 pagate 1 non pagate (in quanto marco è lo 
stesso per i 3 abbonamenti)
 
provo a indagare sul codice 
 

questo è il mio codice
 
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSQL As String
 
    Set db = CurrentDb
 
    strSQL = _
      "SELECT -Sum(TesseraPagata=True) AS CountPagata, " & _
      " -Sum(TesseraPagata=False) AS CountNonPagata" & _
      " FROM Allievi INNER JOIN Abbonamenti" & _
      " ON Allievi.Id = Abbonamenti.Idallievo"
 
    If pop > "" Then
        strSQL = strSQL & " WHERE " & pop
    End If
 
    Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
 
    If Not rs.BOF Then
        'Debug.Print rs!CountPagata, rs!CountNonPagata
        Me.tesserepagate = rs!CountPagata
        Me.tesserenonpagate = rs!CountNonPagata
    End If
 
 

provo a indagare sul codice 
 
Per ora non ho trovato dove sta il problema
Si accettano consigli.


 
prova con
 
strSQL = _
  "SELECT -Sum(TesseraPagata=True) AS CountPagata, " & _
  " -Sum(TesseraPagata=False) AS CountNonPagata" & _
  " FROM Allievi" & _
  " WHERE EXISTS(SELECT Idallievo" & _
  " FROM Abbonamenti" & _
  " WHERE Abbonamenti.Idallievo = Allievi.Id"
 
If pop > "" Then
    strSQL = strSQL & " AND " & pop
End If
 
strSQL = strSQL & ")"


funziona grandioso!