Toon posts:

[ACCESS] Controleren of tabel bestaat

Pagina: 1
Acties:
  • 220 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Simpel, ik wil controleren of een bepaalde tabel bestaat, en als dit zo is wil ik hem wissen.

Onderstaande code werkt! (ook bedoelt als aanvulling op de search, want ik ( O-) ) kon er niks over vinden)

code:
1
2
3
4
5
6
7
8
9
10
'controleer of de tabel Stuklijst bestaat, zo ja, delete deze dan
    Dim Obj As AccessObject, Dbs As Object
    Set Dbs = Application.CurrentData
    ' Search for AccessObject objects in AllTables collection.
        For Each Obj In Dbs.AllTables
            If Obj.Name = "Stuklijst" Then
                'de tabel is gevonden, delete deze
                    DoCmd.DeleteObject acTable, "Stuklijst"
            End If
        Next Obj


OK, dit werkt, maar het moet toch beter (korter) kunnen....

andere optie; mbv SysCmd bepalen of een tabel bestaat werkt niet.... bestaan en niet bestaan geeft allebei 0 als resultaat.

code:
1
If SysCmd(acSysCmdGetObjectState, acTable, "Stuklijst") <> 0 then....


Is er geen snellere manier, want hij hoeft toch niet alle tabellen te doorlopen om te kijken of een bepaalde tabel bestaat??? :)

[ Voor 8% gewijzigd door Verwijderd op 18-02-2004 09:39 ]


Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function BestaatTabel(tabelnaam As String) As Boolean
On Error GoTo ErrHand

    tabelnaam = CurrentDb.TableDefs(tabelnaam).name
        
    BestaatTabel = True
    
    Exit Function
    
ErrHand:

    BestaatTabel = False

End Function


Dat werkt goed, en hij hoeft niet alle tabellen door. :7

Verwijderd

Topicstarter
Verwijderd schreef op 18 februari 2004 @ 09:57:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function BestaatTabel(tabelnaam As String) As Boolean
On Error GoTo ErrHand

    tabelnaam = CurrentDb.TableDefs(tabelnaam).name
        
    BestaatTabel = True
    
    Exit Function
    
ErrHand:

    BestaatTabel = False

End Function


Dat werkt goed, en hij hoeft niet alle tabellen door. :7
Zo kan je natuurlijk ook
code:
1
2
3
4
5
6
7
8
Public Function DeleteTabel(tabelnaam As String) 
    On Error Resume Next   'jakkiebah!!!

    DoCmd.DeleteObject, AcTable, Tabelnaam

    Exit Function

End Function

Maar mijn doel is om zo geen gebruik te maken van de foutafhandeling...... en dan heb je weer een extra functie.....

Ga nog eens even kijken of ik iets kan met CurrentDb.TableDefs(tabelnaam).name

misshien iets met if exists oid...

Verwijderd

als je onderstaande querie in een functie aanroept kom je er ook:

code:
1
2
3
4
5
6
SELECT Count(*) AS Aantal
FROM MSysObjects T
WHERE 
    T.Name)="tblExtra"
AND 
    T.Type=1;


Je krijgt dan een 1 of een 0 terug.
Neem aan dat je zelf wel zo creatief bent om hier een functie van te maken.
Dit werkt ook voor linked tables. Wel ff sjekken of die van een ander type zijn.

De andere tips die je al had vond ik overigens ook niet verkeerd.
Dit is weer een andere mogelijkheid. Succes :7

Verwijderd

Topicstarter
Verwijderd schreef op 18 februari 2004 @ 10:26:
als je onderstaande querie in een functie aanroept kom je er ook:
...........
Je krijgt dan een 1 of een 0 terug.
Neem aan dat je zelf wel zo creatief bent om hier een functie van te maken.
Dit werkt ook voor linked tables. Wel ff sjekken of die van een ander type zijn.

De andere tips die je al had vond ik overigens ook niet verkeerd.
Dit is weer een andere mogelijkheid. Succes :7
Over die types, heb even in de tabel MSySObjects gekeken, en voor zover ik kan zien: 6=gelinkte tabel, 5= form, 1=locale tabel, en de rest is niet belangrijk.

Ga hier eens even mee klooien, moet wel iets nuttige uitkomen! Bedankt!