PDA

Vollständige Version anzeigen : Tabelle ersetzen!


wildeagle
21.10.2003, 14:38
hi,

ich habe da folgendes problem,

ich habe für jede Kalenderwoche eine tabelle in der Daten gesammelt werden, die Namen der Tabellen sehen so aus:

kw1
kw2
kw3
kw4
....
kw52

ich möchte jetzt ein Formular erstellen bei dem, sobald ich es starte, eine Abfrage kommt "welche Kalenderwoche" die dann eingegeben werden soll und dadurch in dem formular die ensprechende kw tabelle angezeigt wird.

hat jemand eine idee wie ich das anstellen kann?

stpimi
21.10.2003, 14:46
Wenn Du für jede Woche eine eigene Tabelle hast, entspricht Dein Datenmodell nicht den Anforderungen von Access als relationale Datenbank. Ich würde das zuerst bereinigen. Um Dir dafür Vorschläge machen zu können, solltest Du hier Deine ANforderungen hereinstellen bzw. deine DB herausladen (komprimiert und gezippt).

Mfg, Michael

wildeagle
21.10.2003, 15:16
ich kann die datenpank leider nicht on stellen.

das die datenbank nicht relational ist, ist mir bewusst, aber es geht leider nicht anders, da ich in den einzelnen kw auch daten aus anderen kw habe. das ergiebt sich aus zeitlichen überschneidungen. wenn das nicht der fall währe hätte ich eine tabelle daraus gemacht und durch einen datumsfilter hätte ich mein problem gelösst.

ich habe mal versucht es folgendermaßen zu lösen:

ich habe mir eine tabelle rmstat erstell und und eine abfrage die aus der tabelle rmstat die daten ausliest. dies abfrage öffne ich in einem formular. ich habe mir ein makro zusammen gebastelt das in vb so aussieht:

Function Mdaten()
On Error GoTo Mdaten_Err

' speicherhinweis
Beep
MsgBox "Als Dateinamen unbedingt rmstat eingeben!@@ Als Tabelle Speichern!", vbCritical, "Speicherhinweis"
' Tabelle rmstat löschen
DoCmd.DeleteObject acTable, "rmstat"
' kw+woche datei öffnen
DoCmd.SelectObject acTable, "kw41", True
DoCmd.RunCommand acCmdSaveAs
DoCmd.OpenForm "ARMSTATDATEN", acNormal, "", "", , acNormal


Mdaten_Exit:
Exit Function

Mdaten_Err:
MsgBox Error$
Resume Mdaten_Exit

End Function

was mir jetzt helfen würde ist für kw41 einen platzhalter zu bekommen der durch die eingabe der kw gefüllt wird und automatisch als rmstat gespeichert wird, so das rmstat nich mehr als speichername eingetippt werden muss.

stpimi
21.10.2003, 16:14
Wäre der folgende Vorschlag brauchbar?

DoCmd.DeleteObject acTable, "rmstat"
' kw+woche datei öffnen
strTabelle = MsgBox("Bitte geben sie die gewünschte Kalenderwoche ein!")
strTabelle = "KW" & strTabelle
DoCmd.SelectObject acTable, strTabelle, True
DoCmd.RunCommand acCmdSaveAs
DoCmd.OpenForm "ARMSTATDATEN", acNormal, "", "", , acNormal

Ist ungetestet einfach mal so aus dem Bauch hingeschrieben. Zumindest einen Versuch ist es wert.

Mfg, Michael

wildeagle
22.10.2003, 09:43
sieht schon ganz gut aus, aber wie bekommen ich ein eingabefeld für die eingabe der kw hin?

stpimi
22.10.2003, 10:03
Die Funktion MsgBox beinhaltet ein Eingabefeld. Wenn der Benutzer dort die Woche eingibt, wird diese in die Variable strTabelle übernommen und auf diese Art weiterverarbeitet.

Mfg, Michael

wildeagle
22.10.2003, 10:08
wenn ich es so mach wie oben beschrieben, bekomme ich den hinweis "Bitte geben sie die gewünschte Kalenderwoche ein!" und da drunter ist eine schaltfläche mit "ok". eingeben kann ich da leider nichts.


sorry wenn ich so kompliziert bin, aber ich bin access anfänger

wildeagle
22.10.2003, 11:10
anstat MsgBox habe ich jetzt mal InputBox eingesetzt, damit geht es :)

jetzt habe ich nur noch das problem der automatischen speicherung als tabelle rmstat. wenn ich es hiermit mach:

DoCmd.RunCommand acCmdSaveAs

öffnet sich das fenster speichern unter, kann man das irgendwie umgehen?

stpimi
22.10.2003, 11:16
anstat MsgBox habe ich jetzt mal InputBox eingesetzt

InputBox ist natürlich richtig - ich glaube, ich sollte mich mal ernsthaft mit Prof. Alzheimer unterhalten ... :stupid:


Zur zweiten Frage: Gib mal einen Dateinamen nach SaveAs an, sonst weiss er ja nicht unter welchem Namen. (Ist aber ins Blaue geschossen ...)

Mfg, Michael

wildeagle
22.10.2003, 11:21
habe ich schon versucht, bekomme dann immer die meldung "Die Aktion RunCommand wurde abgebrochen"

wildeagle
22.10.2003, 11:28
habe das mal so versucht:

DoCmd.RunCommand acCmdSaveAs = "rmstat"

jetzt bekomme ich die meldung "Typen unverträglich" :(

stpimi
22.10.2003, 12:23
Ich habe hier im Büro blöderweise kein Access, daher kann ich nur auf gut Glück meine Tipps schreiben ... . Laut einem Referenzhandbuch gibt es zu acCmdSaveAs keinen Parameter. Es wird offenbar standardmässig der "Speichern unter"-Dialog aufgerufen.

Anderer Ansatz daher:
ev. vorhandene Sätze aus rmstat löschen:

Set dbs = currentdb()
dbs.Execute "DELETE * FROM rmstat"


Sätze aus der ausgewählten Tabelle in rmstat schreiben:

DoCmd.RunSQL "SELECT .... INTO ... " (genaue Syntax bitte in der VBA-Online-Hilfe nachschauen)

Mfg, Michael

wildeagle
22.10.2003, 12:26
danke, ich werds versuchen

wildeagle
23.10.2003, 13:10
hi michael,

hoffe das du on bist, ich brauche nochmal deine hilfe.

so sieht mein code jetzt aus, es funktioniert soweit auch alles, aber was muss ich für einen namen in der letzen zeile bei den ????? eingeben damit er mir die werte in rmstat einträgt?

DoCmd.DeleteObject acTable, "rmstat"
Set dbs = CurrentDb()
dbs.Execute "DELETE * FROM rmstat"
strTabelle = InputBox("Bitte geben sie die gewünschte Kalenderwoche (z.B 41_03) ein!")
strTabelle = "KW" & strTabelle
DoCmd.SelectObject acTable, strTabelle, True
DoCmd.RunSQL "Select * into rmstat from ?????;"

stpimi
23.10.2003, 16:23
Hinter FROM müßte die Tabelle stehen, aus der Du die Daten nimmst, das wäre eben die Variable strTabelle.

Was mit noch auffällt:

Mit
DoCmd.DeleteObject acTable, "rmstat"

löschst Du die Tabelle, danach wird das

dbs.Execute "DELETE * FROM rmstat"

wohl einen Laufzeitfehler bringen. Die Tabelle rmstat kann meines Erachtens immer physisch bestehen bleiben, das DELETE * ... löscht alle Datensätze daraus. (Falls das SELECT INTO ... die Tabelle neu erstellen will (weiss ich jetzt nicht auswendig), kann (muss) das DELETE * ... weggelassen werden.

Mfg, Michael

PS: Tut mir leid, ich war jetzt länger ausser Haus ....

wildeagle
24.10.2003, 07:46
ich habe das jetzt so geändert wie du es gesagt hast. allerdings hatte ich das mit strTabelle auch schon versucht, sorry das ich das nicht geschrieben habe, aber das geht anscheinend nicht, bekomme immer die fehlermeldung:

"Das Microsoft Jet-Datenbankmodul findet die Eingangstabelle oder Abftage 'strTabelle' nicht. Stellen Sie Sicher, dass sie existiert und der Name richtig eingegeben wurde."

benutze ich eine tabelle die es giebt, z.b. kw43_03 dann gehts. kann man irgendwie aus strTabelle eine existierende tabelle machen?

ich danke dir für deine unermütlich hilfe.

gruss udo

stpimi
24.10.2003, 07:59
Ich hoffe, ich krieg jetzt bald mein Access installiert - beantragt habe ich es schon länger ...

Ich kann ohne Objektkatalog wieder mal nur herumraten:

Definiere Dir eine Objektvariable

Dim objMyTable as Table
(hoffentlich ist dieser Objekttyp richtig, ev. im Objektkatalog nachschauen)

[...]
strTabelle = .....
Set objMyTable = strTabelle
[....]
DoCmd.RunSQL "Select * into rmstat from objMyTable


Falls das nichts hilft, kümmere ich mich am Wochenende darum und versuche es direkt in Access zu lösen.


Mfg, Michael

wildeagle
24.10.2003, 08:50
leider funktioniert das nicht, der benutzerdefinierte typ kann nicht kompilierte werden, ich denke mal das table nicht stimmt.

stpimi
24.10.2003, 08:58
Ich probier mal am Wochenende herum und melde mich am Montag wieder!

Mfg, Michael

wildeagle
24.10.2003, 09:06
danke!

ein schönes wochenende wünsche ich dir.


ich hatte es gestern übrigends noch ein wenig anders versucht, ich habe die rmstat komplett gelöscht und die kw datei kopiert und nach rmstat umbenannt, das geht auch, allerdings nur wenn ich die kw datei direkt anspreche und das sollte ja automatisch gehen (strTabelle).

stpimi
26.10.2003, 04:08
Hallo Udo!

Ich habe Dir eine kleine Beispiel-DB angehängt.

Die ganze Herumdoktorei mit DELETE und INSERT etc. kannst Du vergessen - es geht viel einfacher. Es wird einfach die Recordsource des Formulares geändert und die Datenherkunft neu eingelesen. Die temporäre Tabelle brauchst Du dabei gar nicht unbedingt bzw. nur als "Standard-RecordSource".

Der Code steht im Formular frmTmpStr im Ereignis "beimÖffnen". Je nach dem, wann Du die Eingabeaufforderung haben willst, musst Du das Ereignis noch wechseln.


lg

Michael

wildeagle
27.10.2003, 10:22
hi michael

genau so wollte ichs haben, super, ich danke dir. ich werde garantiert auf dich zurückkommen, da ich noch einiges basteln muss. hoffe ich kann mich mal revangieren.

gruss udo