PDA

Vollständige Version anzeigen : Aufteilung einer Tabelle in mehrere Tabellen


mkiehl
13.08.2001, 20:00
Hallo,

habe folgendes Problem:
Ich habe eine Tabelle mit 37000 Datensätzen. Diese möchte ich nun nach z.B. Mitarbeiternummer in verschiedene (je Mitarbeiter eine Tabelle) aufteilen. Es sollte möglichst maschinell gehen.
Habe es schon mit VBA probiert, aber keine Lösung gefunden.
Ich möchte den Namen der neuen Tabelle über Dialogbox eingeben und den entsprechenden Mitarbeiter.

Kennt ihr eine Lösung ?

Danke schon mal im Voraus.

cu
MAC

Mad
13.08.2001, 20:17
Am einfachsten geht es mit einer Tabellenerstellungsabfrage. Als Kriterium in der Spalte Mitarbeiter trägst du [NameMitarbeiter] ein und beim Start wirst du nach dem Namen gefragt. Allerdings mußt du bei dieser Variante den Tabellennamen jeweils vor dem Start der Abfrage fix eintragen.

Mit VBA geht das etwa so:

dim NameneueTabelle as string
dim NameMitarbeiter as string
NameneueTabelle = InputBox("Wie soll die Tabelle heißen","Eingabe Tabellenname")
NameMitarbeiter = InputBox("Wie heißt der Mitarbeiter","Eingabe Mitarbeitername")

SELECT [Tabellealt].* INTO NameneueTabelle
FROM [Tabellealt]
WHERE ((([Tabellealt].Name)=[NameMitarbeiter]));


Hab´s nicht probiert - muss sicher noch verfeinert werden.
Gruß, Dietmar

mkiehl
13.08.2001, 21:25
Hallo Dietmar,

danke für die schnelle Antwort.

Ich probiers aus.

Danke !!!

bis dann
Mac

mkiehl
14.08.2001, 10:47
Hallo Dietmar,
habe heute das VBA geschrieben. Bei folgender Zeile tritt ein Fehler auf:

SELECT [Tabellealt].* INTO [NameneueTabelle]

Der Fehler lautet:
"Erwarte CASE"

Wenn ich dann den CASE-Befehl hinzufüge, kommt folgende Meldung:

"Erwartet: BEzteichner oder geklammerter Ausdruck"

Jetzt bin ich wetwas am Ende, bin leider nicht so fit im VBA.

Danke und Gruß
MAC

Andorxor
14.08.2001, 12:04
Versuchs hiermit:
dim NameneueTabelle as string
dim NameMitarbeiter as string

NameneueTabelle = InputBox("Wie soll die Tabelle heißen","Eingabe Tabellenname")
NameMitarbeiter = InputBox("Wie heißt der Mitarbeiter","Eingabe Mitarbeitername")


docmd.runsql("SELECT [Tabellealt].* INTO " & NameneueTabelle & " FROM [Tabellealt]WHERE [Tabellealt].Name='"&[NameMitarbeiter]&"'")

mkiehl
15.08.2001, 10:39
Hallo Andorxor,

danke für die Info,
aber jetzt wird die gesamte Tabelle kopiert. Obwohl ich eine Selektion mache.

???????

Gruß
MAC

Mad
15.08.2001, 15:37
Hallo MAC,

ich habe in der Eile den Docmd vergessen. Mit

DoCmd.RunSQL "SELECT [Tabellealt].* INTO NameneueTabelle
FROM [Tabellealt]
WHERE ((([Tabellealt].Name)=[NameMitarbeiter]));"

alles in einer Zeile könnte es gehen.
Gruß, Dietmar

mkiehl
16.08.2001, 11:10
Hallo zusammen,

es klappt !!!!
Habe das ganze noch verfeinert.
Funkt so wie von euch beschrieben.

Jetzt noch eine Frage:
Würde gerne noch zusätzlich die neue Tabell, welche ich erstelle per VBA exportiere und zwar in eine Excel-Datei. Der Name für die zu erstellende Excel-Datei sollte variable sein.

Habe leider bisher noch nichts entsprechendes hier im Forum gefunden.

Vielen Dank nochmal und im voraus.
MAC

Andorxor
16.08.2001, 11:20
Versuchs hiermit:
DoCmd.OutputTo acOutputTable, NameneueTabelle, acFormatXLS

mkiehl
16.08.2001, 12:25
Hi Andorxor,

dank für die Info.

Funkt prima.

cu
MAC

mkiehl
16.08.2001, 13:35
Hallo zusammen,

wahrscheinlich werde ich hier im Forum Dauergast, weil hier die Antworten schnell kommen und vorallem funktionieren!!!!

Das oben beschriebene Problem ist ja inzwischen gelöst, aber aufgrund dessen, dass ichca 600 Mitarbeiterdateien erstellen muß, wäre mir eine automatische Belegung der Variable Mitarbeiternummer aus einer anderen Tabelle ganz recht.

Ich habe also die gesamten Mitarbeiternummern in einer anderen Tablelle stehen und möchte nun damit meine Variable Mitarbeiternummer (NameMitarbeiter) füttern.

Kennt ihr eine Lösung ?

Vielen Dank !!!!!

gruß
MAC

Andorxor
16.08.2001, 13:53
Versuchs so:
Dim db as database
dim r as recordset
dim NameneueTabelle as string
dim MitarbeiterNr as long
set db = currentdb
set r = db.openrecordset("Name der Tabelle mit den MitarbeiterNummern")
While r.eof = false
NameneueTabelle = InputBox("Wie soll die Tabelle heißen","Eingabe Tabellenname")
MitarbeiterNr = r![Name des Feldes mit der MitarbeiterNr]


DoCmd.RunSQL "SELECT [Tabellealt].* INTO" &NameneueTabelle&
"FROM [Tabellealt]
WHERE ((([Tabellealt].MitarbeiterNr)="& MitarbeiterNr &"));"


r.movenext
Wend
r.close
db.close