2.7k Aufrufe
Gefragt in Datenbanken von
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ß

7 Antworten

0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
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
0 Punkte
Beantwortet von marie Experte (2k Punkte)
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
0 Punkte
Beantwortet von
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
0 Punkte
Beantwortet von
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
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
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
0 Punkte
Beantwortet von
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
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Christian,

Fast, Leerzeichen hinter column fehlt.

Gruß Ralf
...