Supportnet / Forum / Datenbanken
Fehler bei Tabelle löschen
Frage
Hallo!
Habe da ein Problem!
'Verweis auf Tabelle "Dat_Ausschuss
Set Rec = db.OpenRecordset("Select ID, Dateiname, Tabname, GJ FROM [Dat_KST5]")
Do While Rec.EOF = False 'für alle Datensätze bis Ende Tabelle
Dateiname = Rec!Dateiname 'Wertzuweisung aus Tabelle zu Variable
Tablename = Rec!tabname
'bestehende Tabelle vorher löschen
DoCmd.DeleteObject acTable, Tablename
'Erzeugen der Tabellenverknüpfung
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, Tablename, _
Dateiname, True
'gehe zum nächsten Datensatz
Rec.MoveNext
Loop
Die Zeile DoCmd.DeleteObject acTable, Tablename bringt einen Fehler hervor, wenn
die zu löschende Tabelle nicht existiert. Was muss ich hinzufügen, damit in diesem Fall nicht gelöscht wird sondern nur eine Tabelle erzeugt wird?
Für Tipps wäre ich dankbar!
Dicker
Antwort 1 von dicker
ich bins nochmal.
gibt es vielleicht einen Befehl, mit dem man gucken kann ob eine Tabelle existiert in der Datenbank (wenn der Tabellenname bekannt ist)????
gibt es vielleicht einen Befehl, mit dem man gucken kann ob eine Tabelle existiert in der Datenbank (wenn der Tabellenname bekannt ist)????
Antwort 2 von reto
Frage die Anzahl Datensätze ab(RecordCount > 0) wenn > 0 lösche sie.
Antwort 3 von Frank1
ich glaube (allerdings nicht ausprobiert), dass es mit dem Abfragen der Datensätze eher schief geht - die Tabelle ist ja nicht da und dann sollt e es auch zu einem Fehler kommen. Deshalb mal (als Krücke) mit dem errorhandler - das klappt aber auf jeden Fall - nur muß man bei anderen Fehlern auch aufpassen:
Wobei bingo für das Nichtvorhandensein von Tabelle1 steht - dort also weitermachen und das Else-Teil andere Fehler und das Vorhandensein von Tabelle1 einschließt, man kann also mit resume next weitermachen und dann den Rest der Fehler behandeln - war jetzt relativ versionsneutral...
mfg frank
On Error GoTo Fehler
DoCmd.DeleteObject acTable, "Tabelle1"
Fehler:
If Err.Number = 7874 Then
MsgBox "bingo"
Else
MsgBox (Error)
End If
Wobei bingo für das Nichtvorhandensein von Tabelle1 steht - dort also weitermachen und das Else-Teil andere Fehler und das Vorhandensein von Tabelle1 einschließt, man kann also mit resume next weitermachen und dann den Rest der Fehler behandeln - war jetzt relativ versionsneutral...
mfg frank
Antwort 4 von reto
Habs raus so funktionierts habe es getestet
Dim tb As TableDef, vorhanden As Boolean
Dim gesuchterName
gesuchterName = "Beispiel"
vorhanden = False
For Each tb In CurrentDb.TableDefs
If tb.Name = gesuchterName Then vorhanden = True
Next
If vorhanden = True Then
'Löschen
msgbox "Vorhanden"
End If
Dim tb As TableDef, vorhanden As Boolean
Dim gesuchterName
gesuchterName = "Beispiel"
vorhanden = False
For Each tb In CurrentDb.TableDefs
If tb.Name = gesuchterName Then vorhanden = True
Next
If vorhanden = True Then
'Löschen
msgbox "Vorhanden"
End If
Antwort 5 von dicker
Danke euch! Habs gestern auch rausgeknobelt.
Habe es dann so gelöst:
Dateiname = Rec!Dateiname
'Wertzuweisung aus Tabelle zu Variable
Tablename = Rec!tabname
'Fehlerbehandlung
On Error Resume Next
Set T = db.TableDefs(Tablename)
'bestehende Tabelle vorher löschen
db.TableDefs.Delete T.Name
'Erzeugen der Tabellenverknüpfung
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, Tablename, Dateiname, _ True
'gehe zum nächsten Datensatz
Rec.MoveNext
und das ganze in einer while-schleife
danke für eure Hilfe
dicker
Habe es dann so gelöst:
Dateiname = Rec!Dateiname
'Wertzuweisung aus Tabelle zu Variable
Tablename = Rec!tabname
'Fehlerbehandlung
On Error Resume Next
Set T = db.TableDefs(Tablename)
'bestehende Tabelle vorher löschen
db.TableDefs.Delete T.Name
'Erzeugen der Tabellenverknüpfung
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, Tablename, Dateiname, _ True
'gehe zum nächsten Datensatz
Rec.MoveNext
und das ganze in einer while-schleife
danke für eure Hilfe
dicker

