Hallo zusammen,
ich hab ein Formular mit einer Art Register: Man kann zuerst das Land auswählen, dann die Stadt, usw.
Mit einem Klick auf einen Button über den Städten, öffnet sich ein Unterformular. Hier kann man neue Städte eingeben.
Mein Problem besteht darin, dass ich gerne eine neue Stadt zu dem Land eingeben möchte, welches ich vorher im Hauptformular angeklickt habe.
Momentaner Stand der Dinge:
Private Sub Cities_Click()
On Error GoTo Err_Cities_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "frmCity"
stLinkCriteria = "[CountryID] = " & Int(Me![Country])
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Cities_Click:
Exit Sub
Err_Cities_Click:
MsgBox Err.Description
Resume Exit_Cities_Click
End Sub
Hier ist das Problem, dass alles übernommen wird. Also zum Beispiel, wenn ich Germany auswähle und auf den Button für eine neue Stadt klicke wird auch die oberste bereits eingegebene Stadt angezeigt und ich kann diese nur ändern.
Hoffe ich konnte mein Problem einigermaßen klar erläutern.
Vielen Dank!
Grüße Basti
Hallo,
wenn ich das richtig interpretiere, hast Du ein Formular-Aufbau und -Ablaufproblem....
Du öffnest kein Unterformular (ein Formular, das innerhalb eines anderen(Haupt-) Formulares angezeigt wird) , sondern lediglich ein weiteres separates Formular.
Bei Aufruf des Form ist die Int-Funktion überflüssig, besser wäre an dieser Stelle die NZ()-Funktion, die das Formular-Textfeld auf "leeren" Inhalt (NULL) testen kann, um Laufzeitfehler zu vermeiden. Mit der Übergabe dieser "Where-Condition" wird der Datensatz angezeigt, dessen CountryID-Wert dem Wert aus dem Form-Textfeld entspricht , falls es diesen überhaupt gibt. Das ist aber kein neuer Datensatz.
Die eigentliche Frage ist aber, woher das Land ("LandID") genommen werden kann, das "vorher im Hauptformular angeklickt" wurde. Wenn das Hauptform ein Endlosform ist, das die Länder anzeigt, könnte das so gehen:
Private Sub Cities_Click() 'besser wäre vermutlich auch DblClick()
DoCmd.OpenForm "frmCity", , , "[CountryID] = " & nz(Me![Country],0), acFormAdd, , Me!LandID
End Sub
und im Form "frmCity":
Sub Form_Load()
If Not IsNull(Me.Openargs) Then Me!LandID.Defaultvalue=Me.Openargs
End Sub
hm ok also damit funktioniert nicht das was ich erreichen möchte..
also ich habe ein Formular mit Listenfeldern (Country, City, ....); Darüber gibt es jeweils einen Button, mit dem ein neues Formular geöffnet wird. Wenn ich einen Listeneintrag bei Country anklicke und anschließend über City auf den Button klicke öffnet sich das Formular, mit dem man eine neue Stadt zu einem Land eingeben kann. Hier möchte ich aber eine Stadt zu dem Land eingeben, das ich vorher ausgewählt hatte im Listenfeld. Quasi soll dieser Eintrag übernommen werden. Es soll allerdings kein Eintrag bei der Stadt stehen, auch wenn bereits welche vorhanden sind.
Komm da irgendwie nicht weiter. Entweder gibt er mir das Formular komplett leer oder komplett ausgefüllt aus.
Gruß
Basti
Hallo,
" eine neue Stadt zu einem Land eingeben "
heißt, Du hast die Stadt zu diesem Land noch nicht.
"möchte ich aber eine Stadt zu dem Land eingeben, das ich vorher ausgewählt hatte im Listenfeld"
das ist doch Deine Verantwortung, dass die eingegebene Stadt in das vorgebenene Land gehört....
Wenn das "Land" aus einem Listenfeld stammt, dann muß der Openargs-Parameter eben das Listenfeld mit derjenigen Spalte sein, in der die LandID oder der Landname drinsteht, je nachdem, was da verarbeitet werden muss. Die Where-Condition braucht es in diesem Fall nicht.:
DoCmd.OpenForm "frmCity", , , , acFormAdd, , Me!lstLand.Column(0)
Weiterhin, wenn statt einer ID der Name des Landes übergeben werden soll, dann lautet der Code beim Laden-Ereigniss:
Sub Form_Load()
If Not IsNull(Me.Openargs) Then Me!LandName.Defaultvalue= """" & Me.Openargs & """"
End Sub