Tabel verwijderen

Status
Niet open voor verdere reacties.

Karin VdA

Gebruiker
Lid geworden
26 mei 2004
Berichten
21
Hey iedereen,

Ik heb een nogal ingewikkeld zoekformulier dat via de aanmaak van nieuwe tabellen werkt. Nu maken deze tabellen het geheel nogal zwaar... ik zou ze dus graag automatisch laten verwijderen als het zoeken afgelopen is.

Hoe doe ik dit?

groetjes,

Karin
 
Door het zoeken door een macro te laten lopen. met een macro kan je meerdere query's achter elkaar zetten en dat zou dus moeten werken....

Je vertelt alleen niet de procedure hoe je zoekt (via VBA/query) dus ik kan niet zeggen of het voor jou ook werkt...
 
Als laatste actie in de VBA macro:

docmd.runsql "DROP TABLE <tabelnaam>;"

Volgens mij wordt je DB er echter niet kleiner van, omdat Access zijn tijdelijke gegevens dan nog niet opruimt. Maar in combinatie met Compact on Close is ook dat weer opgelost.


Grtz,
 
Bedankt, het werkt! :thumb:

Komt compact on close overeen met comprimeren? Want dit mag alleen als er geen andere versies open zijn...

Kan je op een of andere manier controleren of een bepaalde tabel bestaat?


groetjes,

Karin
 
Uit access help
Access-databases of Access-projecten automatisch comprimeren wanneer u ze sluit
Een Microsoft Access-database of een Microsoft Access-project kan automatisch worden gecomprimeerd zodra u de database of het project sluit.

Open de Access-database of het Access-project waarvoor u automatische compressie wilt inschakelen.

Klik op Opties in het menu Extra.

Klik op het tabblad Algemeen.

Schakel het selectievakje Comprimeren bij sluiten in.
Opmerking Er vindt geen compressie plaats als u een database die wordt gedeeld door meerdere gebruikers sluit terwijl een andere gebruiker de database nog open heeft.




Code:
'****delete tabel
    DoCmd.DeleteObject acTable, "tabelnaam"

'****listing alle tabs in huidige db

Dim dbs As Database, tabtab As TableDef, FileListT As String

Set dbs = CurrentDb()

For Each tabtab In dbs.TableDefs
     FileListT = FileListT  & tabtab.Name & vbcrlf
Next

Set dbs = Nothing

msgbox FileListT

'****als je de systeem tabs niet wil zien

If Not Left(tabtab.Name, 4) = "MSys" Then
    FileListT = FileListT  & tabtab.Name & vbcrlf
End If
 
De databank is momenteel al in gebruik en Access maakt om een of andere reden soms nieuwe databanken aan. Ze krijgen gewoon de naam db1, db2, ... Het lijken gewoon kopies van de originele databank. Ik dacht dat dit iets met het comprimeren te maken had (staat al automatisch ingeschakeld zoals hieronder beschreven).


Wat de code betreft, dat lukt me niet hoor...

Ik had al een gelijkaardige code in een boek gevonden, maar het lukt me niet om iets als een database te declareren. Access herkent dit gewoon niet bij mij! :confused:

Kan ik ook op een andere manier controleren of een tabel al dan niet bestaat?

groetjes,

Karin
 
verwijzing

Kan het niet zijn dat de database backups maakt op bepaalde tijdstippen ?

In de VBA-editor via extra->verwijzingen en dan microsoft DAO xxx object library aanvinken.
Dan zou de declaratie moeten lukken.

groeten
 
Dan kan ik effectief databases declareren...
Aangezien maar een paar dagen tijd heb, zie ik het niet zitten om me in de DAO-taal te verdiepen... Ik heb trouwens niet de juiste helpbestanden voor handen.

Heb je een idee of het anders ook kan?

sorry dat ik zo moeilijk doe ... :o

groetjes,

Karin
 
hoeft niet

Code:
Private Sub CmdTabLists_Click()

Dim dbs As Database, tabtab As TableDef, FileListT As String

Set dbs = CurrentDb()
'voor elke tabel in de current db
For Each tabtab In dbs.TableDefs
    If Not Left(tabtab.Name, 4) = "MSys" Then 'als het geen systeem tabel is
        FileListT = FileListT & ";" & tabtab.Name 'voeg hem toe  aan de string met ; om er een lijst van te maken
    End If
Next
Set dbs = Nothing
LstTabel.RowSource = Mid(FileListT, 2) 'de eerste ; mag eraf anders hebben we een lege rij in de listbox
End Sub


plaats in je form een knop 'CmdTabLists' en een listbox 'LstTabel' en plaats bovenstaande code dan in de module onder 'klikken' van de knop.
Bij de eigenschappen van de lijst zet je op de tab gegevens->type rijbron deze op 'Lijst met waarden'


Code:
Private Sub LstTabel_DblClick(Cancel As Integer)
On Error GoTo fout
If Not LstTabel.ListIndex = -1 Then 'klikken in lege lst
    If MsgBox("Wilt u de tabel verwijderen uit de database ?", vbYesNo) = vbYes Then
        DoCmd.DeleteObject acTable, LstTabel.ItemData(LstTabel.ListIndex)
        CmdTabLists_Click  'stel de tabslijst opnieuw samen
    End If
End If
Exit Sub
fout:
Select Case Err.Number
    Case 3211
            MsgBox "De tabel die u wenst te verwijderen is momenteel in gebruik, " & vbCrLf _
                & "sluit eerst alle geopende tabellen/formulieren die deze tabel gebruiken " & vbCrLf _
                & "probeer het daarna opnieuw !", , "Tabel is in gebruik"
     Case Else
        MsgBox Err.Description, 48, "Verwijderen tabel"
End Select
End Sub

in de module 'dubbelklik' van de listbox 'LstTabel' plaats je dan bovenstaande code



zo zou het moeten lukken zonder help/kennis en anders als je er nog vragen over hebt, stel ze maar of spreek af op de chat
 
ziet er goed uit!
Maar het was mijn bedoeling om de tabellen te verwijderen zonder dat de gebruiker hier iets van merkt... wat het natuurlijk extra moeilijk maakt aangezien de basistabellen niet weg mogen!

groetjes,

Karin
 
Re: hoeft niet

Code:
Private Sub [b]Form_Close[/b]()
[b]On Error GoTo fout[/b]

Dim dbs As Database, tabtab As TableDef

Set dbs = CurrentDb()
'voor elke tabel in de current db
For Each tabtab In dbs.TableDefs
    If Not Left(tabtab.Name, 4) = "MSys"[b] And Not _ 
       tabtab.Name = "de_naam_van_de_tab_die_moet_blijven" And Not _ 
       tabtab.Name = "de_naam_van_de_tweede_tab_die_moet_blijven"[/b] Then 'als het geen systeem tabel is of eentje die niet weg mag
        DoCmd.DeleteObject acTable, tabtab.Name
    End If
Next
Set dbs = Nothing
[b]Exit Sub
fout:
Select Case Err.Number
    Case 3211
            MsgBox "De tabel die u wenst te verwijderen is momenteel in gebruik, " & vbCrLf _
                & "sluit eerst alle geopende tabellen/formulieren die deze tabel gebruiken " & vbCrLf _
                & "probeer het daarna opnieuw !", , "Tabel is niet verwijderd"
            Resume Next
     Case Else
        MsgBox Err.Description, 48, "Verwijderen tabel"
End Select
[/b]
End Sub

probeer dit wel eerst even in een copy van de database

groetjes
 
Bedankt! :thumb:
Ik test het maandagochtend onmiddellijk uit!

Heb jij trouwens enig idee waar ik kan controleren of de databank automatisch backupt?


groetjes en prettig weekend! :cool: (lekker BBQ-en!)

Karin
 
code

Geplaatst door Karin VdA

groetjes en prettig weekend! :cool: (lekker BBQ-en!)

Karin

Is dat een uitnodiging ? :p :p


Het kan zijn dat die persoon het via code doet of het lukt misschien ook met macro's of eventueel maakt hij telkens replica's.
Vraag anders even de maker van de db om uitleg en anders stuur je me een mail met de db dan kijk ik er even naar, als ze niet te 'ingewikkeld' is.
(het lijkt me trouwens raar om elke keer tabellen aan te maken en ze na elke sessie weg te gooien, er zijn misschien andere oplossingen)

groeten

Ronny
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan