thecaptain
Goto Top

ERLEDIGT - Access 2000 - Daten in andere Tabelle verlagern

Hallo zusammen.

Folgende Situation:
Wir haben hier eine Access2000 MDB-Datei, in der verschiedene Lagerdaten erfasst werden. In einer der Tabellen sind diese Daten bereits über einen längeren Zeitraum erfasst worden und mit der Zeit hat sich da einiges angesammelt. Auch die Geschwindigkeit von Abfragen wird schon beeinträchtigt.
Daher sollen alte Daten (Datum wurde als entsprechender Felddatentyp mit gespeichert) in eine identisch aufgebaute "Ablage"-Tabelle ausgelagert werden.

Ein Kollege hatte das bereits einmal gemacht, der Mann ist aber leider die nächsten paar Wochen im Urlaub und steht nicht zur Verfügung. Ich weiß, dass er dafür kein VBA verwendet hat. Ich könnte mir noch vorstellen, dass er zwei separate Abfragen gemacht hat. Eine zum Kopieren der Daten in die Ablage und eine um aus der Haupttabelle den alten Kram zu löschen. Wie das mit dem Kopieren aber funktionieren könnte weiß ich nicht.

Gibt es für sowas überhaupt eine Möglichkeit in SQL oder hat jemand vielleicht sogar eine viel bessere Idee?

Content-ID: 59116

Url: https://administrator.de/contentid/59116

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

cim
cim 16.05.2007 um 08:26:37 Uhr
Goto Top
Moin,
natürlich kannst Du das per SQL programmieren.
Einfacher ist es vielleicht mit dem Access-Assistenten. Ich habe zwar nur 2003, sollte aber identisch mit 2000 sein.

Siehst Du das Datenbankfenster? Wenn nein, drücke F11.

Erstelle eine neue Abfrage aus der Ursprungstabelle mit Daten ab dem gewünschten Datum.
Ändere den Typ der Abfrage in "Tabellenerstellungsabfrage" in der Entwurfsansicht und gebe der neuen Tabelle einen Namen wie "neu...".
Abfrage ausführen.
Benenne die Ursprungstabelle um, z.B. "alt..."
Gebe der Tabelle "neu..." den gleichen Namen wie die Ursprungstabelle vorher hatte.

Natürlich sollte bei Access immer !!! eine Sicherungskopie der Datenbank existieren.

Bitte kurze Info, falls Du den Ablauf detaillierter brauchst.

Schöne Grüße
cim
Guenni
Guenni 16.05.2007 um 08:43:09 Uhr
Goto Top
@thecaptain

Hi,

wenn's auf einmal so dringend ist, und man kein SQL kann, so kann man sich auch behelfen,
in dem man die Tabelle kopiert, und unter neuem Namen wieder einfügt. Dann das Original
öffnen und alle alten Daten manuell löschen.

SQL-Version:

create table neue_tabelle select * from alte_tabelle where Datum < "tt.mm.jjjj"

anschl.:

delete from alte_tabelle where Datum < "tt.mm.jjjj"

Generell würd' ich aber meinen, wenn Daten über einen so langen Zeitraum erfasst wurden,
dass die Performance schon beeinträchtigt wird, würde ich warten, bis der Kollege wieder da ist.
Auf die paar Tage kommt's ja jetzt auch nicht mehr an, und wenn, dann hätte man den Kollegen
damit beauftragen sollen, bevor er in Urlaub geht.

Meine SQL-Version funktioniert jetzt ja mal für eine Tabelle, wie sich das Ergebnis aber
auf eure gesamte Datenbank auswirkt, kann ich natürlich nicht sagen, weil ich die Struktur
nicht kenne. Oder gibt es nur die eine Tabelle für Lagerdaten?

Grüße
Günni
thecaptain
thecaptain 16.05.2007 um 09:47:34 Uhr
Goto Top
Ja, ich denke das ist das einfachste. Ehe ich mir jetzt noch lange den Kopf über eine elegante SQL-Version zerbreche verwende ich lieber die manuelle "quick and dirty"-Methode.

Danke euch beiden!
thecaptain
thecaptain 16.05.2007 um 10:23:01 Uhr
Goto Top
Eine Frage hätte ich noch:
Da die Daten in der Tabelle manchmal etwas durcheinander sind, möchte ich mich nicht auf meine persönliche Gründlichkeit verlassen und wenigstens das mit SQL erledigen:
DELETE * FROM tbl_test WHERE Datum < "01.01.2007";

Dabei bekomme ich aber immer den Fehler "Datentypen in Kriterienausdruck unverträglich". Das Feld "Datum" habe ich auch als solches definiert. Verpeile ich da grade wieder etwas?
cim
cim 16.05.2007 um 10:50:30 Uhr
Goto Top
Das Datum muss in # stehen und nicht in ".
cim
cim 16.05.2007 um 10:52:01 Uhr
Goto Top
Das Datum muss in # und nicht in " stehen.
thecaptain
thecaptain 16.05.2007 um 12:42:13 Uhr
Goto Top
Hey, eine neue Fehlermeldung:
"Syntaxfehler in Datum in Abfrageausdruck ..."

Das Teil sieht jetzt folgendermaßen aus:
DELETE FROM tbl_test WHERE Datum < #01.01.2007#;
cim
cim 16.05.2007 um 13:20:11 Uhr
Goto Top
Mit dem Abfrageassistenten in Access ist das zwar keine Programmierung, aber einfach.
Darin kannst Du in der Entwurfsansicht die Löschabfrage erstellen.

Dort ist dann zu sehen, dass Access das Datum 31.12.2004 für SQL anpasst:
...
WHERE (((tbl_test.datum) < #12/31/2004#));
thecaptain
thecaptain 21.05.2007 um 07:42:15 Uhr
Goto Top
Perfekt. Jetzt klappt alles. Habe es jetzt folgendermaßen gemacht:

1. Sicherungskopie anlegen!!!
2. Tabelle "lagerablage" in "lagerablage 2002-2006" umbenennen
3. Tabelle "lager" kopieren mit dem Dateinamen "lagerablage"
4. Per Löschabfrage aus "lagerablage" alle Daten bis Ende März löschen
DELETE * FROM lager WHERE (((lager.Datum) > #03/31/2007#));
5. Per Löschabfrage aus "lager" alle Daten vor Ende März löschen
DELETE * FROM lager WHERE (((lager.Datum) < #04/01/2007#));

Die simpelsten Lösungen sind oftmals die besten, oder um Koroljow zu zitieren:
"Die Genialität einer Konstruktion liegt in ihrer Einfachheit. Kompliziert bauen kann jeder."

Vielen Dank für die Hilfe!