MS Access Unterformular alleine bedingt öffnen

Hallo,

ich hab eine Access-Tabelle (Kunden) mit 1:n verknüpfter Untertabelle (Geräte). Ich möchte aus dem Formular der Haupttabelle per Befehlsschaltfläche ein EIGENES Formular der Untertabelle bedingt (d.h. gefiltert für die aktuelle KdNR) öffnen und zum Anlegen neuer Datensätze sortieren. Die KdNr soll in der Untertabelle wenn überhaupt inaktiv erscheinen, damit sie vom User nicht falsch belegt werden kann. Alles also genauso, wie wenn Access ein Unterformular bedingt öffnet, außer dass es sich a) um ein eigenes Formular handelt und b) die Darstellung engspaltig und nicht tabellarisch erfolgen soll und das deshalb c) zum Anlegen neuer Datensätze absteigend sortiert werden sollt.
Ich hab versucht das in VBA über Filter oder Sortierungen zu regeln, aber wenn ich das Feld KdNr im Formular der Untertabelle inaktiv stelle gehen die Filter oder Sortierung (die bei aktivem Feld funktioniert haben) hops und die Datensätze werden unsortiert und ungefiltert dargestellt. Ich hab mir auch mit einer sortierten Abfrage zu helfen versucht, aber auch kein Erfolg.
Wie kann ich die Bedingung für getrennte Formulare realisieren, die Access beim Öffnen von Unterformularen so entspannt durchführt?

Danke im Voraus!

Benjamin

Hallo,

genau versteh ich nicht, wleches Problem Du hast…

Wenn Du ein separates Form öffnen und das genau so wie ein in einem HF befindlichen UFO verwenden willst, dann mußt Du dafür Sorge tragen, daß beim Öffnen eine Where-Condition (…Openform…, „KdNR=“ & ME!KdNR ) mit übergeben wird und der Fremdschlüsselfeld-Defaultwert mit dem KDNR-Wert besetzt wird (z. B. im Load-Ereignis und mittels Übergabe per Openargs). Dabei kann das KDNR-Textfeld durchaus auf unsichbar oder auf gesperrt gesetzt sein.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo,

danke erstmal für die Hilfe!

Du hast das Problem genau richtig erfasst und dank Deiner Hilfe bin bin jetzt schon einen Schritt weiter, aber noch nicht am Ziel.

Mein Code sieht jetzt folgendermaßen aus (nicht erschrecken!):

Private Sub btnNeuesGeraet_Click()

'Aktuelle liKdNr als Variable erfassen
Dim liKd As Long
liKd = liKdNr

'Datenbank oeffnen
Dim db As DAO.Database
Set db = CurrentDb

'tblGeraete oeffnen
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset(„tblGeraete“, dbOpenDynaset)

'Neuen Datensatz anlegen und markieren
rs.AddNew
rs.Update
rs.Bookmark = rs.LastModified

'Aktuelle KdNr in neuen Datensatz schreiben
rs.Edit
rs!liKdNr = liKd
rs.Update

'Variablen freigeben
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing

'Formular frmGeraetNeu oeffnen
DoCmd.OpenForm „frmGeraetNeu“, , , „liKdNR=“ & Me!liKdNr

Das geöffnete Formular ist jetzt auf die aktuelle liKdNr gefiltert, obwohl das Feld inaktiv ist. So weit, so gut. Besitzt der Kunde aber schon Geräte, erscheint in frmGeraeteNeu als erster Datensatz das älteste und nicht das neue. Wenn ich das zu sortieren versuche, schlägt wieder das alte Problem mit dem inaktiven Feld zu.
Ich tippe mal, das der Hase bei den openargs im Pfeffer liegt, das meine ganze Recorset-Fummelei mit den richtigen openargs obsolet ist und das sich so auch der sequenzielle Eintrag mehrerer neuer Geräte für den aktuellen Kunde realisieren lassen, aber ich hab auch nach der Lektüre der Windows-Hilfe keine Ahnung wie das zu formulieren ist und wäre daher dankbar für weitere Hilfe.

LG

Benjamin

Hallo Benjamin,

Mein Code sieht jetzt folgendermaßen aus (nicht erschrecken!):

*ohschreck* umständlicher geht es wohl nicht?
Wo hast du Access gelernt? Lass dir das Geld wiedergeben :smile:

Ich fasse mal zusammen:

  • Du hast ein Hauptformular „Kunden“
  • du möchtest ein Formular „frmGeraetNeu“ öffnen
  • in diesem Formular sollen nur NEUE Geräte hinzugefügt werden!?

Lösung:

  • Button im Form „Kunden“ nur diesen Code eintragen:

  • DoCmd.OpenForm „frmGeraetNeu“

  • (Filtern ist nicht nötig, da ja nur neue Datensätze erfasst werden)

  • Form „frmGeraetNeu“ die Eigenschaften öffnen

  • Daten eingeben: JA (es können nur noch NEUE Datensätze hinzugefügt werden)

  • Eigenschaften des Feldes „liKdNr“ öffnen

  • Standardwert = Form!Kunden.liKdNr

Fertig, „kein“ Code und sonstiger Aufwand

Nun kannst du mit diesem Formular nur für diesen Kunden im Hauptformular neue Geräte hinzufügen.

aber ich hab auch nach der Lektüre der Windows-Hilfe
keine Ahnung wie das zu formulieren ist und wäre daher dankbar
für weitere Hilfe.

Tipp: Lese die Hilfe von Access und nicht von Windows! :smile:

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Netwolf,

jaja, ich weiss schon, meine Access- und VBA-Kenntniss sind grausam. Ich versuch gar nicht mich zu rechtfertigen und sag einfach: prima, danke, so geht’s (und ich hab wieder mal was gelernt).

LG

Benjamin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Benjamin,

glaube mir, trotz 20 Jahren arbeiten/Programmierung mit Datenbanken, lerne ich noch täglich dazu und das wird wohl nie aufhören.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)