Hallo
Ich möchte folgendes machen: Ich habe ein HFo (Hotel) und ein UFo (Uebernachtszimmer pro Veranstaltung).
Es gibt eine Tabelle für die Hotels und eine Tabelle für die Veranstaltungen. Die Zimmer stehen in einer n:m Beziehung. Ich habe eine dritte Tabelle Veranstaltungszimmer pro Hotel. In dieser Tabelle sind zwei Fremdschlüssel 1. Schlüssel Hotel_ID; 2. Schlüssl Veranstaltungs_ID.
Das Formular ist wie folgt aufgebaut: Das HFo ist das Hotel; Die Uebernachtungszimmer sind als UFo (Einzelblatt) im HFo Hotel.
Was ich nun machen möchte: Im HFo habe ich einen Button der mir im UFo einen neuen Datensatz eröffnet. Nun möchte mit dem Code auch die Hotel_ID und die Veranstaltungs_ID in meine Tabelle Veranstaltungszimmer schreiben. Doch dies Funktioniert nicht.
Hier der Code:
HFo
Private Sub cmdNeuHotSes_Click()
Call Form_sfrHotelSessionZimmer.NeueSession
Me!sfrHotelSessionZimmer.txtHotSes_Hotel_IDF = Me.txtHotel_ID
Me!sfrHotelSessionZimmer.txtHotSes_Session_IDF = Me.cboSessionMenu
End Sub
UFo
Public Sub NeueSession()
DoCmd.GoToRecord , "", acNewRec
End Sub
Es wird ein neuer Datensatz eröffnet. Für das schreiben in das UFo kommt folgende Fehlermeldung: Objekt unterstützt diese Eigenschaft oder Methode nicht.
Wer kann mir helfen?
Gruss Daniel
Hallo,
ZitatDie Uebernachtungszimmer sind als UFo (Einzelblatt) im HFo Hotel.
das ist falsch. In das Ufo muss die Zwischentabelle (die 3.Tabelle).
Wenn Hafo und Ufo über die Schlüsselfelder (Hotel_ID) verknüpft werden, wird die HotelID schon mal automatisch übertragen. Die Veranstaltung wählt man dann per Kombifeld aus. Das Kombifeld wird an das Fremdschlüsselfeld Veranstaltungs_ID gebunden.
Für die ganze Aktion bedarf es keinerlei Programmierung.
Hallo
Im UFo ist bereits die 3.Tabelle angehängt und die Hotelnr wird auch schon eingetragen. Doch mir ist nicht klar wie ich das Kombifeld Veranstaltung an den Fremdschlüssel binden kann.
Gruss Daniel
HAllo,
das passiert einfach daurch, als dass in den Steuerelementinhalt des Kombis der Name des Tabellenfeldes, das den Fremdschlüssel enthält, geschrieben wird (im Beispiel: "Veranstaltungs_ID" in Tabelle "Veranstaltungszimmer")
Hallo
Das funktioniert bei mir nur, wenn ich das Kombifeld und den Neu Button in meinem UFo habe. Ich möchte aber das Kombifeld und den Neu Button in meinem HFo haben.
Wenn das Kombifeld im HFo habe ich das Feld Veranstaltungs_ID nicht zur Verfügung. Hole ich das Feld über den Ausdrucksgenerator, so kann ich nachher im Kombifeld nichts mehr auswählen, da es blockiert ist.
Das Gleiche mit dem Neu Button. Ist er im UFo so wird die Nr des Hotels in die ID eingetragen. Ist der Neu Button im HFo wird im Unterformular ein neuer Datensatz eröffnet, aber die Nr wird nicht ins Hotel_ID Feld geschrieben, obwohl es eine Verknüpfung zwischen dem HFo und dem UFo mit der Hotel_ID gibt.
So wie ich den Aufbau meiner Masken gemacht habe, möchte ich alle Manipulationen (alle Button) vom HFo aus machen können und es wäre sehr unschön, wenn ich in diesem Fall auf das UFo ausweichen müsste.
Gruss Daniel
Hallo,
das ist die grundsätzlich falsche Arbeitsweise und wird nie richtig funktionieren.
Oder baust Du in Deiner Kellerwerkstatt den defekten Autoreifen ab, um ihn dann anschliessend im Wohnzimmer zu flicken? ;) :D ;D
Lad die DB mal hier hoch.... (komprimiert/repariert und gezippt)
Hallo
Hier ist meine DB.
Im Menuregister Session möchte ich die Session auswählen und mit dem Button neue Session im UFo Session Zimmer einen neuen Datensatz eröffnen der die Fremdschlüssel hotel_ID und Session_ID erhält. Dabei sollen auch die Anzahl Zimmer aus dem Register Infrastruktur in diesen Datensatz kopiert werden.
Das gleiche Verfahren möchte ich nachher auch für die Preise nehmen.
Gruss Daniel
[Anhang gelöscht durch Administrator]
Hallo,
wenn eine neue "Session" registriert werden soll, dann muss diese Session zunächst in tblSession erfasst werden, d. h. mit einem "Neue Session"-Button im HF muss ein Formular mit Basis zur Tabelle tblSession im Eingabemodus geöffnet werden und die neue Session eben erfasst werden. Die Sessions allgemein müssen im UFO über ein Kombifeld , das seine Daten aus tblSession bezieht und an hotSes_Session_IDF gebunden ist, ausgewählt werden.
Natürlich könnte man (per Programmierung) auch den ID-Wert der neu erzeugten Session(oder einer anderen) in einem Kombifeld im HFO anzeigen, auswählen und in einen neuen DS (oder einen anderen, eben in den akt. angezeigten) im UFO schreiben, aber das halte ich für logistischen und handwerklichen Murks. (Und ich hoffe, dass ich da Deine Anforderung falsch verstanden habe..)
Eine Beziehung zwischen diesen Tabellen/Feldern macht allein keine Auswahl.
Hallo
Die Sessionen werden in einem anderen Formular erfasst und bearbeitet. Natürlich ist mir klar, wenn ich das Kombifeld Session in das UFo einfüge, dass ich so eine neue Hotel-Session für dieses Hotel eröffnen kann. Aber mein Ziel ist es, alle Funktionen, Befehle und Button vom Menuregister aus zu steuern. Diese Menuregister ziehen sich durch die ganze DB und sind in jedem Formular gleich.
Meine Frage nun wie, kann ich aus dem HFo sprich aus diesem Menuregister in meinem UFo Hotel-Session einen Datensatz eröffnen? Die Vorgabe, welches die aktuelle Session ist, wird in einem Admin Formluar hinterlegt.
Da ich in all meinen DB's immer mit dem gleichen Prinzip der Menuregister arbeite, interessiert es mich sehr wie ich dies programmieren muss, auch für andere Fälle. Mir ist es bewusst, dass diese Art vielleicht nicht ganz logisch ist und umständlicher zum Programmieren, doch habe ich gute Erfahrungen gemacht mit dieser Gestaltung von meinen Masken.
Gruss Daniel
Hallo,
nun gut, ich seh schon, man kann Dich nicht zu Deinem Glück zwingen ;)
Klären wir die Aufgabe:
Mit deinem Formular frmHotel werden die Datensätze aus tblHotel angezeigt/gepflegt. Die einzelnen Felder sind auf verschiedenen Registerseiten verteilt. Eine Registerseite enthält ein UFO, das die zugehörigen Daten aus tblHotelSession anzeigt.
Im Formularkopf gibt es ein weiteres Register, das verschiedene Ablauffunktionalitäten beinhaltet. In Registerseite "Session" befinden sich ein Kombifeld mit Datensatzherkunft aus tblSession und eine Schaltfläche "Neue Session".
Fragen:
"Die Vorgabe, welches die aktuelle Session ist, wird in einem Admin Formular hinterlegt." ??
Was genau(!) soll mit dieser Schaltfläche erreicht werden? (neuer Eintrag/Datensatz in tblSession; neuer Datensatz im UFO, der zum akt. Hotel-Datensatz zugeordnet werden soll; ....)
Was genau(!) soll mit dem Kombiwert geschehen, nachdem der ausgewählt wurde?
Hallo
Meine DB ist erst am Entstehen, daher fehlt noch vieles was erst in meinem Konzept vorhanden ist.
1. tblAdmin und frmAdmin; dies ist ein Formular wo ich grundsätzliche Parameter für die DB hinterlege. Die Tabelle besteht aus einem Datensatz. So wird in dieser Tabelle tblAdmin die aktuelle Session mit einem Kombifeld hinterlegt, mit der man arbeitet.
Bei der Neueröffnung einer Session für ein Hotel wird dieser Wert mit einem Dlookup Befehl geholt und dient für das Feld hotSes_Session_IDF.
2. Die Schaltfläche bewirkt, dass im UFo HotelSession ein neuer Datensatz eröffnet wird der im Feld hotSes_Hotel_IDF die Nr des entsprechenden Hotels hat und im Feld hotSes_Session_IDF den Wert der aktuellen Session hat. Bei dieser Aktion werden dann auch alle Zimmer und Preise die sich auf dem HFo Hotel befinden in die Session geschrieben und können nachher für die Session gegebenenfalls angepasst werden.
3. Mit dem Kombifeld werde ich nachher die verschiedenen Sessionen die für dieses Hotel existieren anzeigen. Doch dies weiss ich noch nicht ganz genau wie ich es Umsetzen werde.
Für den Teil des Eröffnen eines Datensatzes im UFo bitte ich um deine Hilfe.
Danach werde ich die Funktion erweitern und vor dem Eröffnen eine Kontrolle durchführen, ob die Session für dieses Hotel schon eröffnet ist, sowie die Möglichkeit, zu wählen, ob die Daten vom Hotelstamm oder von der letzten Session in die neue Session kopiert werden.
Ich hoffe ich habe für dich verständlich beschrieben, wie das ganze funktionieren soll.
Vielen Dank für deine Hilfe.
Gruss Daniel
Hallo,
na denn:
Private Sub cmdNeuHotSes_Click()
Me!sfrHotelSessionZimmer.SetFocus
Me!sfrHotelSessionZimmer!hotSes_Session_IDF.DefaultValue = Me!cboSessionMenu 'wenn die Session-ID aus dem Kombi ausgewählt wurde
'Me!sfrHotelSessionZimmer!hotSes_Session_IDF.DefaultValue = DLookup("session_ID", "tblAdmin") 'wenn die Session-ID aus der tblAdmin stammen soll
DoCmd.GoToRecord , , acNewRec
End SubHier ist noch kein Check eingebaut, um mehrfache Datensätze für dieselbe Session zu verhindern. Das könnte z. B. über geeignete Indizierung der Schlüsselfelder in der Tabelle geschehen und/oder über geeignete "Nachfragen" (z. B. mit Dcount) in VBA-Code.
Zitatdaher fehlt noch vieles was erst in meinem Konzept vorhanden ist.
Ich hacke hier nochmal rein: Überleg Dir das Konzept nochmal (sehr) gründlich..
Zudem ist die Tabellenstruktur noch nicht normalisiert, was erledigt werden sollte, wenn Du Dir nicht noch weitere Bumerangs zwischen die Beine werfen willst...
Hallo
Vielen Dank :)
Du sagst meine Tabelle seien noch nicht normalisiert worden. Ich dachte sie seien OK. Kannst du mir sagen, wo ich etwas übersehen habe?
Gruss
Daniel
Hallo,
die "Zimmer X" Felder sind fragwürdig.
Solche Auflistungen in einem DS (Zimmer1, Zimmer2, Zimmer3,.....) widersprechen den Normalisierungsegeln.
Hallo
Da gibt es eine einfache Erklärung Zimmer 1 ist ein Zimmer mit einem Bett, Zimmer 2 ist ein Zimmer mit 2 Betten usw.
Gruss Daniel
Hallo,
ZitatZimmer 1 ist ein Zimmer mit einem Bett, Zimmer 2 ist ein Zimmer mit 2 Betten usw.
dann ist es erst recht falsch. Du benötigst eine extra Tabelle für die Zimmer mit einem Feld für die Bettenzahl.
Dein Beispiel konnte ich mir aber nicht ansehen, habe zur Zeit kein Access2010.