Somma record di tutte le tabelle

di il
11 risposte

Somma record di tutte le tabelle

Ciao a tutti! Ho un DB con una decina di tabelle e stavo cercando un modo funzionale per far apparire nella maschera iniziale il numero totale dei record del DB, perciò appunto la somma del numero di record di tutte le tabelle....avete qualche suggerimento?
Grazie!

11 Risposte

  • Re: Somma record di tutte le tabelle

    In visualizzazione struttura maschera crea una casella di testo "non associata" e dentro ci scrivi:
    =DCount("*";"NomeTabella1")+DCount("*";"NomeTabella2")+DCount("*";"NomeTabella3")...+DCount("*";"NomeTabella10")
  • Re: Somma record di tutte le tabelle

    gmaster ha scritto:


    Ciao a tutti! Ho un DB con una decina di tabelle e stavo cercando un modo funzionale per far apparire nella maschera iniziale il numero totale dei record del DB, perciò appunto la somma del numero di record di tutte le tabelle....avete qualche suggerimento?
    Grazie!
    Costruirei una list box che ad ad ogni avvio viene popolata con il nome di tutte le tabelle e il numero dei record di ognuna (quindi una listbox con due colonne). Ciclo su TableDefs dove escludere però le tabelle di sistema, quelle nascoste e quelle collegate (ma questo lo decidi tu, in base alle tue esigenze). Per ogni tabella che corrisponde ai requisiti che cerchi (o che non soddisfa i requisiti che vuoi escludere) e sfrutti le proprietà name e recordcount di TableDef e per fare il ciclo sulla collection TableDefs, cercando solo le tabelle che ti interessano HOW TO: Use the Attributes Property for TableDef Objects in Access 2000
  • Re: Somma record di tutte le tabelle

    La domanda è molto strana... al limite del dubbio funzionale... ma vedrai tu...!
    Io farei una cosa simile
    
    Dim strSQL         As String
    Dim tdf As DAO.Tabledef
    Dim rsT As DAO.Recordset
    Dim rsR As DAO.Recordset
    strSQL = "SELECT MsysObjects.Name "
    strSQL = strSQL & "FROM MsysObjects "
    strSQL = strSQL & "WHERE ((Left$([Name],1)<>'~') AND (Left$([Name],4)<>'Msys')) "
    strSQL = strSQL & "AND (MsysObjects.Type=1) "
    strSQL = strSQL & "ORDER BY MsysObjects.Name;"
    
    Set rsT=DbEngine(0)(0).OpenRecordset(strSQL)
    Debug.Print "Numero Tabelle = " & rs.RecordCount
    Do Until rsT.Eof
       strSQL="SELECT Count(*) FROM " & rsT.Fields(0).Value
       Set rsR=DbEngine(0)(0).OpenRecordset(strSQL)
       Debug.Print "La Tabella [" & rsT.Fields(0).Value & "] ha n°" & rsR.Fields(0).Value & " record(s)"
       rsT.Movenext
    Loop
    rsT.Close
    rsR.Close
    Set rsT=nothing
    set rsR=Nothing
    Quello che ti ho scritto STAMPA nella finestra Immediata del VBA(CTRL+G) il carico che chiedi.
    Se vuoi invece riempire una LIstBox la cosa è decisamente meglio e piu comoda... predisponi una ListBox a 2 Colonne e modifichi il codice così:
    
    Dim strSQL         As String
    Dim tdf As DAO.Tabledef
    Dim rsT As DAO.Recordset
    Dim rsR As DAO.Recordset
    strSQL = "SELECT MsysObjects.Name "
    strSQL = strSQL & "FROM MsysObjects "
    strSQL = strSQL & "WHERE ((Left$([Name],1)<>'~') AND (Left$([Name],4)<>'Msys')) "
    strSQL = strSQL & "AND (MsysObjects.Type=1) "
    strSQL = strSQL & "ORDER BY MsysObjects.Name;"
    
    Set rsT=DbEngine(0)(0).OpenRecordset(strSQL)
    'Debug.Print "Numero Tabelle = " & rs.RecordCount
    Do Until rsT.Eof
       strSQL="SELECT Count(*) FROM " & rsT.Fields(0).Value
       Set rsR=DbEngine(0)(0).OpenRecordset(strSQL)
       Me!NomeListBox.AddItem rsT.Fields(0).Value & ";" & rsR.Fields(0).Value
       rsT.Movenext
    Loop
    rsT.Close
    rsR.Close
    Set rsT=nothing
    set rsR=Nothing
    Si possono fare mille cose...

    Saluti
  • Re: Somma record di tutte le tabelle

    Grazie mille a tutti, siete grandissimi!
    Li sto provando tutti, ma già che ci sono allora vi chiedo anche un altro dettaglio: per esempio utilizzando il codice VBA, se invece che tutte le tabelle ne volessi solo alcune che soddisfano una condizione? (nel mio caso quelle il cui nome finisce con "_BB")
  • Re: Somma record di tutte le tabelle

    gmaster ha scritto:


    Grazie mille a tutti, siete grandissimi!
    Li sto provando tutti, ma già che ci sono allora vi chiedo anche un altro dettaglio: per esempio utilizzando il codice VBA, se invece che tutte le tabelle ne volessi solo alcune che soddisfano una condizione? (nel mio caso quelle il cui nome finisce con "_BB")
    Lavora su questa riga
    strSQL = strSQL & "WHERE ((Left$([Name],1)<>'~') AND (Left$([Name],4)<>'Msys')) "
    inserendo come ulteriore criterio
    AND (Right$([Name],3 = '_BB'))
    Occhio che questa comincia a diventare una selezione molto particolare delle tabelle (eri partito chiedendo tutte le tabelle, poi va bene la scrematura fra quelle di sistema, nascoste e le altre "normali"). Valuta se questa ulteriore condizione può essere gestita come "variabile".
  • Re: Somma record di tutte le tabelle

    Se vuole solo quelle "_BB" non serve più controllare quelle di Sistema... basta
    
    strSQL = strSQL & "WHERE (Right$([Name],3 = '_BB')) "
  • Re: Somma record di tutte le tabelle

    @Alex ha scritto:


    Se vuole solo quelle "_BB" non serve più controllare quelle di Sistema... basta
    
    strSQL = strSQL & "WHERE (Right$([Name],3 = '_BB')) "
    Sarebbe superfluo dire "cavoli, è vero". Ma quando ce vvvo', ce vvvo'. La testa, Phil, la testa!
  • Re: Somma record di tutte le tabelle

    Ciao,
    vedo che hai ottenuto ciò che ti serve, in ogni caso suggerisco anche questa alternativa.
    rivedi semplicemente la "if" qualora ti intessi includere anche le tabelle di sistema.
    
    Public Function TotRecDb()
    
    Dim tbf As TableDef
    Dim totRec As Integer
    For Each tbf In DBEngine(0)(0).TableDefs
        If Left(tbf.Name, 4) <> "Msys" And Right(tbf.Name, 3) <> "_BB" Then
            totRec = totRec + tbf.RecordCount
        End If
    Next
    
    TotRecDb = totRec
    
    End Function
    
    
    un saluto.
  • Re: Somma record di tutte le tabelle

    Goku ha scritto:


    ciao,
    vedo che hai ottenuto ciò che ti serve, in ogni caso suggerisco anche questa alternativa.
    rivedi semplicemente la "if" qualora ti intessi includere anche le tabelle di sistema.
    
    Public Function TotRecDb()
    ...
        If Left(tbf.Name, 4) <> "Msys" And Right(tbf.Name, 3) <> "_BB" Then
    ...
    Scritta così esclude tutte le tabelle di sistema e quelle il cui nome finisce per "_BB"

    Goku ha scritto:


    ...rivedi semplicemente la "if" qualora ti intessi includere anche le tabelle di sistema.
    dovrebbe usare OR, non And
    If Left$(tbf.Name, 4) = "Msys" Or Right$(tbf.Name, 3) = "_BB"
  • Re: Somma record di tutte le tabelle

    Ciao, corretta osservazione nel test mi è rimasto per errore, modificando il nome di una tabella con "_BB".
    buona cosa distruggere la variabile oggetto settandola a nothing.
    un saluto.
  • Re: Somma record di tutte le tabelle

    Grazie ancora a tutti, facendo un po' di test ho notato che forse per il mio db la soluzione che esegue il calcolo più rapidamente è il ciclo su "If" di Goku, ma questione di millisecondi
    Siete i meglio
Devi accedere o registrarti per scrivere nel forum
11 risposte