Spalten löschen
hallo,
folgendes Problem. In einer tabelle wird jede Woche eine Spalte angefügt und mit der Wochen/jahreszahl benannt.
Gleichzeitig soll immer dann die 2. Spalte der tabelle gelöscht werden.
Da der Name immer wechselt, soll das an der Spaltenanzahl (hier 2 also Field(1)) festgemacht werden.
DoCmd.RunSQL "ALTER TABLE Tabelle1 DROP COLUMN (1);"
funktioniert leider nicht
Weiß jemand Rat?
Vielen Dank im Voraus
Gruß
Antwort schreiben
Antwort 1 von RaHi vom 16.02.2022, 18:14 Options
Hallo babypet,
das ist ein ungewöhnlicher Programmierstil! Zunächst einmal: Über den Feldindex kannst du in Access nicht löschen. Du musst das Feld konkret benennen. Im folgenden habe ich dir mal einen Code geschrieben, der in der Tabelle "tblColDel" immer die letzten 6 Wochen als Felder (Syntax "wYYYYWW", Typ text(255)) enthält. Die Tabelle sollte aber die letzten 6 (Vor)Monate bereits enthalten, sonst bekommst du die ersten 6 Wochen eine Feldermeldung. Weiterhin darf du auch keine Woche auslassen, dann macht es "bumm". Eine Fehlerbehandlung ist drin, experimentiere mal damit:
Option Compare Database
Option Explicit
Public Sub delcol()
Dim insdate As Date
Dim deldate As Date
Dim delWeek As String
Dim insWeek As String
Dim prefix As String
prefix = "w"
insdate = Date
deldate = DateAdd("ww", -6, insdate)
insWeek = prefix & Year(insdate) & Right("0" & Format(insdate, "WW"), 2)
delWeek = prefix & Year(deldate) & Right("0" & Format(deldate, "WW"), 2)
On Error GoTo delerr
DoCmd.RunSQL "ALTER TABLE tbldelcol DROP COLUMN " & delWeek
On Error GoTo inserr
DoCmd.RunSQL "ALTER TABLE tbldelcol ADD COLUMN " & insWeek & " TEXT(255)"
On Error GoTo 0
Exit Sub
delerr:
MsgBox "Feld '" & delWeek & "' existiert nicht (mehr)."
Resume Next
inserr:
MsgBox "Feld '" & insWeek & "' existiert (wahrscheinlich) bereits."
Resume Next
End Sub
Kannst du das nicht anders lösen? Deine MDB wächst durch solche Aktionen ziemlich rasch an und du solltest den Menüpunkt "Reparieren und komprimieren" öfters verwenden.
Wenn du das mal anders versuchen willst und keinen Ansatz findest, melde dich noch mal mit einer konkreten Problembeschreibung.
Gruß
Ralf
Antwort 2 von Marie vom 16.02.2022, 22:33 Options
Das müsste doch viel einfacher gehen, sag doch mal ein Beispiel: wie heißt konkret die neu angefügte Spalte zum Beipiel nächste Woche und wie heißt zum selben Zeitpunkt die Spalte die gelöscht werden soll. Mach zum Vermeiden von Fehlern gleich noch ein Beispiel für die Woche davor oder dahinter.
Ich denke mal die zu löschende Spalte hat immer einen bestimmten Abstand zur anzuhängenden Spalte, also kann man das doch rechnerisch vermutlich fürchterlich einfach ermitteln, wenn Du und mal nicht so im Dunkeln tappen lässt.
Gruß marie
Antwort 3 von babypet vom 17.02.2022, 07:06 Options
danke erst einmal für die antworten.
konkret gweht es um folgendes.
mehrere tausend artikel müssen über den Zeitraum von 60!! Wochen (fortlaufend) in ihrem Pike beobachtet werden.
Fortlaufend heisst, dass statt 61 wieder bei 1 begonnen wird. Die Wochen sollen aber nachvollziehbar sein. So werden die neu erstellten Felder mit ww_jj bezeichnet. In der ersten Spalte stehen die Artikelnummern.
So müsste z. B. nach Neuerstellen der Spalte 07_10 die Spalte mit der Woche 52_08 gelöscht werden.
Ich hoffe, ich konnte mich erklären.
Gruß Christian
Antwort 4 von babypet vom 17.02.2022, 07:34 Options
gelöst
Danke Ralf, das war der richtige Weg.
Habe es nun so gelöst
.....
delweek = format(DateAdd("ww", -60, Date),"ww")
delyear=format(DateAdd("ww", -60, Date),"yy")
delcolumn = delweek & "_" & delyear
DoCmd.RunSQL "ALTER TABLE tabelle1 DROP COLUMN [delcolumn]"
....
Dumm nur dass Access die falsche KW ausgibt (nach amerikanischem kalender und nicht nach europäischen. Wir haben hier 7 während die US-Kollegen schon bei 8 sind.
Gruß und Dank an alle
Antwort 5 von RaHi vom 17.02.2022, 08:17 Options
Hallo babypet,
Die Funktion format hat noch zwei weitere Parameter, damit kannst du die dt.
Wochenberechnung einstellen. Der Parameter ist ausagekräftig. Da das G1 kein Access kann
und ich im Zug sitze, probiere es selbst mal aus.
Dein. Sql-statement aus A4 ist aber nicht korrekt!
Gruß Ralf
Antwort 6 von babypet vom 17.02.2022, 08:45 Options
Hallo Ralf,
so richtig(er)?
DoCmd.RunSQL "ALTER TABLE tabelle1 DROP COLUMN" & delcolumn
Den Parameter "vbFirstFullWeek" habe ich gefunden und erfolgreich eingesetzt.
Danke und Gruß Christian
Antwort 7 von RaHi vom 17.02.2022, 09:15 Options
Hallo Christian,
Fast, Leerzeichen hinter column fehlt.
Gruß Ralf