database info ophalen via querie

Status
Niet open voor verdere reacties.

JohanRVT

Gebruiker
Lid geworden
2 mrt 2011
Berichten
555
Beste groep,
via een selectiequerie kan je het aantal tabellen, rapporten, formulieren, queries, modules, etc.... in een MS Access DB eenvoudig ophalen maar graag had ik daar ook de grootte (in procenten of Kb) die dit bv een tabel in beslag neem van de totale grootte van de DB erin gekregen. En dan nog een vraagje het totaal aantal queries bij ons bewonersdossier klopt aan geen kanten (ik krijg er 1886 terwijl het eigenlijke querieonderdeel in het navigatievenster er maar een paar honder heeft), worden hierbij VBA, rapport en formulier queries meegteld?
Gebruikte selectie sql
Code:
SELECT IIf([Type]=5,"Queries (+VBA Queries)",IIf([type]=1,"Lokale Tabellen (+verborgen)",IIf([type]=4,"Systeem Tabellen",IIf([Type]=6,"Gelinkte Tabellen",IIf([Type]=-32768,"Formulieren (+ Subs)",IIf([Type]=-32764,"Rapporten (+ Subs)",IIf([Type]=-32761,"Modules",IIf([Type]=-32766,"Macros")))))))) AS [DB Items], Count([DB Items]) AS Totaal
FROM MSysObjects
WHERE (((MSysObjects.Type) In (5,1,4,-32768,6,-32764,-32761,-32766)))
GROUP BY IIf([Type]=5,"Queries (+VBA Queries)",IIf([type]=1,"Lokale Tabellen (+verborgen)",IIf([type]=4,"Systeem Tabellen",IIf([Type]=6,"Gelinkte Tabellen",IIf([Type]=-32768,"Formulieren (+ Subs)",IIf([Type]=-32764,"Rapporten (+ Subs)",IIf([Type]=-32761,"Modules",IIf([Type]=-32766,"Macros"))))))));
Klein voorbeeld bijgevoegd en wie er iets wil aan toe voegen of veranderen graag
 

Bijlagen

Je hebt nog een tabel [tLogError] die er wel is, maar die je niet ziet. En die ook niet bij de verborgen tabellen staat. Dus dat maakt dat de telling niet klopt.
 
Overigens zou ik de nogal eindige IIF constructie vervangen door een veel simpelere SWITCH variant:
Code:
DB Items: Switch([Type]=5;"Queries (+VBA Queries)";[type]=1;"Lokale Tabellen (+verborgen)";[type]=4;"Systeem Tabellen";[Type]=6;"Gelinkte Tabellen";
[Type]=-32768;"Formulieren (+ Subs)";[Type]=-32764;"Rapporten (+ Subs)";[Type]=-32761;"Modules";[Type]=-32766;"Macros")
 
Michel, die Switch geeft me een extra leeg veld met count 0 en ben al een tijdje aan 't zoeken om de "geschatte" grootte die een tabel inneemt in de database eenvoudig te zien. zou dus handig zijn dat ergens in de eerste list er een cijfer wordt weergegeven. Heb er al een paar gezien met de Debug.print naar het Vba venster direct gezien maar nog geen gevonden die dat in een querie gieten.
 

Bijlagen

Die 0 zie je omdat je eigenlijk teveel checkt, zodat er lege records in zitten. Die kun je wel weer wegfilteren:
Code:
SELECT Switch([Type]=5,"Queries (+VBA Queries)",[type]=1,"Lokale Tabellen (+verborgen)",[type]=4,"Systeem Tabellen",[Type]=6,"Gelinkte Tabellen",[Type]=-32768,"Formulieren (+ Subs)",[Type]=-32764,"Rapporten (+ Subs)",[Type]=-32761,"Modules",[Type]=-32766,"Macros") AS [DB Items], Count([DB Items]) AS Totaal
FROM MSysObjects
GROUP BY Switch([Type]=5,"Queries (+VBA Queries)",[type]=1,"Lokale Tabellen (+verborgen)",[type]=4,"Systeem Tabellen",[Type]=6,"Gelinkte Tabellen",[Type]=-32768,"Formulieren (+ Subs)",[Type]=-32764,"Rapporten (+ Subs)",[Type]=-32761,"Modules",[Type]=-32766,"Macros")
HAVING (((Switch([Type]=5,"Queries (+VBA Queries)",[type]=1,"Lokale Tabellen (+verborgen)",[type]=4,"Systeem Tabellen",[Type]=6,"Gelinkte Tabellen",[Type]=-32768,"Formulieren (+ Subs)",[Type]=-32764,"Rapporten (+ Subs)",[Type]=-32761,"Modules",[Type]=-32766,"Macros"))<>""));
Ik heb verder niks om de grootte van tabellen te lezen, dus als jij dat wel hebt, dan zou ik zeggen: doet-um erbij!
 
Bedankt voor de <>"" tip

Achter een knop de volgende procedure gezet die in het Venster Direct de tabellen opsomt met hun "geschatte" grootte.
Misschien die Debug.print opdracht in een recordset gieten en dan weergeven in een listvenster?
Code:
Private Sub CmbListTablesAndSize_Click()
On Error GoTo Err_CmbListTablesAndSize_Click

'---------------------------------------------------------------------------------------
' Procedure : ListAllTables_Size
' Author    : Gustav(original)
' Created   : 11/15/2009
' Purpose   : To get approximate sizes of all
'non-MSys tables in an Access mdb.
'Outputs table names and sizes  to immediate window.
'
'From AccessD discussion-
'---------------------------------------------------------------------------------------
' Last Modified:
'
' Inputs: N/A
' Dependency: Microsoft DAO 3.6 Object Library
'------------------------------------------------------------------------------


  Dim dbs As DAO.Database
  Dim tdf As DAO.TableDef
  
  Dim strName As String
  Dim strFile As String
  Dim strPath As String
  Dim lngBase As Long
  Dim lngSize As Long
    
   On Error GoTo ListAllTables_Size_Error

  Set dbs = CurrentDb
  strName = dbs.Name
  strPath = Left(strName, Len(strName) - Len(Dir(strName)))
  
  ' Create empty database  to measure the base file size.
  strFile = strPath & "base" & ".mdt"
  CreateDatabase strFile, dbLangGeneral
  lngBase = FileLen(strFile)
  Kill strFile
  Debug.Print "Base size", lngBase
  
  For Each tdf In dbs.TableDefs
    strName = tdf.Name
    ' Apply some filtering - ignore System tables.
    If Left(strName, 4) <> "MSys" Then
      strFile = strPath & strName & ".mdt"
      Debug.Print strName, ;
      CreateDatabase strFile, dbLangGeneral
      DoCmd.TransferDatabase acExport, "Microsoft Access", strFile, acTable, strName, strName
      lngSize = FileLen(strFile) - lngBase
      Kill strFile
      Debug.Print lngSize
    End If
  Next
  
  Set tdf = Nothing
  Set dbs = Nothing

   On Error GoTo 0
   Exit Sub

ListAllTables_Size_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure ListAllTables_Size "

Exit_CmbListTablesAndSize_Click:
    Exit Sub

Err_CmbListTablesAndSize_Click:
    MsgBox Err.Description
    Resume Exit_CmbListTablesAndSize_Click
    
End Sub
 
Laatst bewerkt:
Ik kende deze functie niet, maar had zelf al bedacht dat je niet veel meer kan doen dan exporteren naar een bestand en dan kijken hoe groot het bestand is :). Blijkt dus redelijk te werken? Je kunt natuurlijk een tabel maken, die openen met een Recordset en i.p.v. de Debug met rs.AddNew records maken voor elke tabel. Zou je volgens mij wel moeten kunnen ondertussen!
 
Zal ik zeker proberen maar ik verlies nog steeds teveel tijd met in de verkeerde richting te zoeken en met try en error, daarom smijt ik graag 's een vraag in deze groep voor duiding of hulp.
 
Heb je gelijk in. Anders zou ik me toch maar vervelen :)
In de laatste nieuwsbrief heb ik een mooi voorbeeldje staan van het maken van een tabel met VBA, en het vullen ervan met een Recordset. Kun je vast gebruiken!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan