Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Unterformular ausblenden

Begonnen von Tally, Mai 04, 2014, 23:41:13

⏪ vorheriges - nächstes ⏩

Tally

Hallo
Ist es in Access 2007 möglich, ein Unterformular in Abhängigkeit vom Inhalt eines Steuerelementes ein- oder auszublenden (z.B. wenn im Hauptformular im Anredefeld "Firma" steht, dass dann das Unterformular "Ansprechspartner" eingeblendet wird und sonst nicht sichtbar ist?
Vielen Dank für Eure Hilfe; Gruss René

MzKlMu

Hallo,
im Ereignis "Beim Anzeigen" des Hafos:

Forms!HafoName!UfoName.Form.Visible = Me.Anrede = "Firma"

UfoName ist der Name des Ufosteuerlements, nicht der Name im Datenbankfenster. Die können gleich sein, müssen aber nicht.

Hast Du für die Anrede keine Tabelle, wie es sein sollte?
Oder hast Du gar ein Nachschlagefeld mit Werteliste in der Tabelle direkt?

Gruß Klaus

Tally

Hallo
Ich habe die Standardtabelle "Kundenadressen" mit Anrede, Name, Vorname etc. Den Teil Anrede beziehe ich aus einer Auswahl-Hilfstabelle. Die Adresse erfasse ich in einem Registersteuerelement, auf welchem ich das Unterformular "Ansprechpartner" mit Name, Vorname, Telefon-Nr. etc. abgelegt habe. Da zu 95% Privatadressen erfasst werden, braucht es den Ansprechspartner in der Regel nicht, da dieser der Kundenadresse entspricht. Handelt es sich aber um eine "ANREDE" - Firma, kann diese verschiedene Ansprechspartner, abweichend von der Kundenadresse haben, welche ich so hinterlegen kann. Es wäre deshalb rein optisch schöner, das Unterformular Ansprechspartner nur dann sichtbar zu machen, wenn auch ein solcher erfasst ist bzw. wird. Gruss René

MzKlMu

Hallo,
und wie sieht diese  Auswahl-Hilfstabelle aus? (Felder?).
Die Frage ist wichtig, denn je nach Aufbau der Tabelle könnte da eine Zahl gespeichert sein und nicht der Text.
Und hast Du die Auswahl direkt in der Tabelle gemacht?

Eine Lösungsvorschlag habe ich Dir oben schon gepostet, schon probiert?
Gruß Klaus

Tally

oh sorry, habe ich überlesen. Werde es testen und mich dann nochmals melden. Besten Dank bereits jetzt; Gruss René

Tally

Hallo
Funktionert soweit mit Hinterlegung der Codezeile. Habe Sie zusätzlich im Steuerelement "Anrede" bei Fokusverlust nochmals hinterlegt, damit das Formular bei Wechsel der Anrede sofort sichtbar wird. Folgendes Problem besteht noch: Bei Neuerfassung erhalte ich
Laufzeitfehler '13':
Typen unverträglich
debuggen / beenden
durch wegklicken auf beenden komme ich dann in die Neueingabe. Wie kriege ich jetzt noch diese Fehlermeldung weg? Danke und Gruss; René

MzKlMu

#6
Hallo,
bei Fokusverlust ist ungeeignet. Verwende das Ereignis "Nach Aktualisierung" des Anredefeldes.
Und verwende noch eine Prüfung auf einen neuen Datensatz:
If Me.NewRecord = True Then
    Forms!HafoName!UfoName.Form.Visible = False
Else
    Forms!HafoName!UfoName.Form.Visible = Me.Anrede = "Firma"
End If

Für  "Nach Aktualisierung" reicht aber die eine Zeile nach Else.

PS:
Ich hätte Dir ja noch einige Verbesserungsvorschläge unterbreitet, aber Du ignorierst ja hartnäckig die Fragen nach dem Aufbau der Hilfstabelle. Ebenso die Frage, ob Du ein Nachschlagefeld in der Tabelle verwendest.
Gruß Klaus

Tally

Hallo
War keine bewusste, hartnäckige Ignorierung sondern wohl eher die Freude darüber, eine brauchbare Lösung in Sichtweite zu haben  ;). Also ich verwende die TblKundenadressen mit KAAnrede (Txt), KAName (Txt) etc sowie die HilfsTbl HTAnrede mit HTZähler, HTAnrede (Txt). In der Tbl Kundenadressen wähle ich die KAAnrede aus der HT Anrede mittels Kombinationsfeld   Select [HTAnrede], Anrede, *FROM [HTAnrede].. Ich hoffe, dass diese Antwort die benötigten Infos enthält; Vielen Dank für die Unterstützung; Gruss René

MzKlMu

Hallo,
Du sollte nicht den Klartext der Anrede speichern sondern dessen ID (HTZähler).
Eine ID benennt man auch immer im Zusammenhang mit der Tabelle. Also hier IDAnrede. In die Anredetabelle bringt man auch gleichzeitig die Briefanrede unter (Sehr geehrter Herr, Sehr geehrte Frau, Sehr gehrte Damen und Herren).

Das hat den Vorteil, dass Du über eine Abfrage mit den beiden Tabellen und der Beziehung über die ID alle Infos aus beiden Tabelle zur Verfügung hast.
In einer Datenbank wird in abhängigen Tabellen ohnehin immer die ID (die Zahl) gespeichert und nie der Klartext. Das solltest Du ändern.

Und in einer Tabelle niemals Nachschlagefelder (Kombinationsfelder) verwenden, die sind von Übel und verhindern den sauberen Aufbau einer DB. Diese sind nur in Formularen sinnvoll.

PS:
Du hast jetzt kein Wort gesagt, ob obiger Vorschlag (mit dem NewRecord) zum Ziel geführt hat, was mich ja durchaus auch interessieren könnte.  ;D
Gruß Klaus

Tally

Hallo
Ich muss meine Tabellen und Formulare nochmals kurz modifizieren, bevor ich den Vorschlag testen kann. Brauche dazu etwas Zeit, werde mich wieder melden; Gruss René

Tally

Hallo
Mit der Variante (New Record) wird das Resultat erst erreicht, wenn ich den Datensatz schliesse und wieder öffne (vor- und zurück). Mit der Variante
Private Sub Anrede_AfterUpdate()
    Forms!Adressen!Ansprechpartner.Form.Visible = Me.Anrede = "Firma"
End Sub
funktioniert es direkt nach der Eingabe. Was in beiden Fällen geblieben ist ist die Laufzeit-Fehlermeldung '13', bei der Neuerfassung, welche mit Klick auf beenden geschlossen werden kann und dann die Eingabe des nächsten neuen Datensatzes möglich macht.
Was ich nicht verstanden habe ist die Aussage
Und in einer Tabelle niemals Nachschlagefelder (Kombinationsfelder) verwenden, die sind von Übel und verhindern den sauberen Aufbau einer DB. Diese sind nur in Formularen sinnvoll. Weshalb wird dann diese Möglichkeit in Access geschaffen? Wenn ich einfache Hilfstabellen wie ANREDE, LAND, SPRACHE o.ä. habe, haben sich diese Kombinationsfelder sehr gut geeignet, da ja seit AC07 auch die Möglichkeit besteht, direkt ein Bearbeitungsformular für Listenelemente zu definieren. Und noch eine Zusatzfrage: Kann das Ausblendeprozedere auch auf Registerseiten angewendet werden? Vielen Dank; Gruss René

MzKlMu

#11
Hallo,
Du sollst die Nachschlagefelder nur in den Tabellen nicht verwenden. Auf Formularen kannst gibt es diese Einschränkung nicht.
ZitatWeshalb wird dann diese Möglichkeit in Access geschaffen?
weil Microsoft dem Anfänger etwas bieten will, das Access scheinbar einfacher macht. Aber in Wirklichkeit eine Sackgasse ist.
Wie gesagt, in Formularen kein Problem und dort auch sinnvoll.

Die Sichtbar Steuerung waren keine 2 Varianten oder Alternativen, Du benötigst beides, sowohl das mit NewRecord und das mit AfterUpdate.

Und das Du die Zahl speichern sollt und nicht den Klartext ist glaube ich auch noch nicht angekommen. Statt auf "Firma" musst Du dann natürlich auf die entsprechende Schlüsselzahl prüfen.

Das geht auch mit Registerseiten. Du musst nur den Namen der Registerseite verwenden

Zu den Nachschlagefeldern in den Tabellen:
Die_Nachteile_von_Nachschlagefeldern


Gruß Klaus

Tally

Danke für die Tip's, werde es in meiner DB einbauen und mich nochmals betreffend Erledigungsvollzug melden; Gruss René

Tally

Hallo
Nochmals besten Dank für die Tipps, es funktioniert. Eine Sache passt (für meine Verhältnisse) nicht, weshalb ich bei meiner altbewährten Methode bleibe: ich werde weiterhin Hilfstabellen verwenden, um Felder zu füllen und zwar mit den effektiven Bezeichnungen und nicht mit der ID. Ich hatte damit bisher weder Probleme beim filtern und sortieren, noch wurden falsche Felder angezeigt oder gar überschrieben, wie dies im Wiki DB-Bericht aufgeführt wird, und ich werkle doch auch schon, eben als Amateur, seit rund 15 Jahren mit Access rum. Und das ist ja das Schöne an Access: viele Wege führen nach Rom und machen es somit auch einem weniger geübten Anwender möglich, praktikable Lösungen zu erstellen. und für die kniffligeren Sachen, die den Amateurstatus übersteigen, bin ich wirklich ausserordentlich froh, dass es dieses Forum gibt; Gruss René