Calocybe: Überprüfen ob Tabelle vorhanden ist

Beitrag lesen

Hallo Thomas

endlich mal ne brauchbare Antwort, das man hier immer Antworten auf nicht gestellte Fragen bekommt ist immer wieder verwunderlich. Vor allen Dingen bekommt man immer wieder Antworten von Leuten die von der Thematik keine Ahnung haben.

Na, ganz schoen heftig, oder? Leider wird Dir der TransactSQL-Dialekt bei MS Access auch nichts nuetzen. Zwar stammt beides aus dem Hause M$, aber Access-SQL und Transact sind so unterschiedlich wie Tag und Nacht.

In Access gibt es meines Wissens keinen SQL-Befehl, der soetwas testet. Ich erledige sowas daher gewoehnlich in Access-Basic:

Public Function DoesTableExist(tblname As String) As Boolean
        Dim dbs as Database
        Dim t As TableDef

Set dbs = CurrentDb
        DoesTableExist = False

For Each t In dbs.TableDefs
            If (t.name = tblname) Then DoesTableExist = True: Exit For
        Next

Set dbs = Nothing
    End Function

If DoesTableExist("tablename") Then DoCmd.RunSQL "DROP TABLE tablename;"

Mag sein, dass Du das nicht direkt gefragt hast, aber immerhin koennte es Dein Problem loesen. Alternativ kannst Du auch die Variante von Jens benutzen, also

On Error Resume Next
    DoCmd.RunSQL "DROP TABLE tablename;"
    On Error Goto 0     ' oder auf die vorherige Marke setzen

Die zweite Variante ist allerdings nicht ganz so sauber. Es kann durchaus vorkommen, dass die Tabelle sehr wohl existiert, jedoch nicht geloescht werden kann, weil sie gerade benutzt wird.

An Dominik: Weisst Du zufaellig, wie ich in TransactSQL eine Spalte einer Tabelle loeschen kann? In Access-SQL (und bei Oracle glaube ich auch) geht das mit
    ALTER TABLE tablename DROP COLUMN columnname;

An Jens: Um alle Zeilen einer Tabelle zu loeschen, braucht man wirklich keine Schleife. Das geht auch mit
    DELETE FROM tablename;
Ritsch ratsch sicnd alle Datensaetze weg.

Calocybe