Hallo zusammen,
ich arbeite mit Access 2010 und erstelle eine Übungsdatenbank.
Die Datenbank enthält unter anderem die Teilnehmer von Fortbildungskursen. (Zu Übungszwecken sind es natürlich wenige Teilnehmer, aber theoretisch wären es in der Praxis sehr viele.)
Was ich umsetzen möchte:
Grundsätzlich möchte in einem Formular einen Teilnehmer auswählen können (und einem Kurs zuordnen).
Im Moment funktioniert die Auswahl mit einem Kombifeld (Dropdown) noch recht gut, da es wenige Teilnehmer sind. Das wird aber mit einer größeren Zahl von Teilnehmern nicht mehr praktisch sein.
Was ich mir wünsche:
Ich habe mir nun überlegt im Formular ein Textfeld (oder mehrere) einzurichten, in das man den auszuwählenden Teilnehmer eingeben kann und anschließend eine Suche (=eine Abfrage?) gestartet wird, die alle Teilnehmer in einer Liste zur Auswahl bietet, die diesen Namen haben.
Was ich nach langer Suche mit Google probiert habe:
1. Im Moment schaffe ich es nur, eine Abfrage zu starten, die alle Teilnehmer der Tabelle Teilnehmer anzeigt.
2. Ich habe einen Button (Schaltfläche) eingefügt, Datensatznavigation und Datensatz suchen ausgewählt. Damit lässt sich zwar ein Teilnehmer suchen, allerdings nur, wenn er exakt diesen Namen hat. Und was passiert, wenn zwei Teilnehmer Müller heißen; ich vermute die Auswahl funktioniert nicht. In der Wunsch-Abfrage sollen aber auch Teilnehmer auftauchen, die ähnlich heißen. (Also dass beispielsweise bei einem Tippfehler: "Mülle" trotzdem alle auftauchen, die so ähnlich heißen.)
(Weiteres Problem beim jetzigen Suche-Button: Ich schaffe es nur einen Such-Button für die Teilnehmer einrichten, aber nicht für die Kurse, die ebenfalls im gleichen Formular ausgewählt werden sollen.)
Beide meiner bisherigen Suche-Möglichkeiten entsprechen nicht meinen Vorstellungen. Deshalb bin ich auf der Suche nach einer Möglichkeit es so umzusetzen, wie ich es unter "Was ich mir wünsche" beschrieben habe.
Vielen Dank für Eure Hilfe im Voraus und Grüße
Life
Hallo,
ZitatIm Moment funktioniert die Auswahl mit einem Kombifeld (Dropdown) noch recht gut
Das muss in Zukunft ja nicht unbedingt schlechter werden.
Wenn du beim Kombi die Funktion 'Automatisch ergänzen' aktiviert hast, erhältst du während des Eingebens (also nicht aufklappen und auswählen sondern den Namen reinschreiben) eines Namens immer die Entsprechungen angezeigt.
Führst du eine weitere sichtbare Spalte mit einem eindeutigen Unterscheidungskennzeichen mit, funktioniert das auch bei Namensgleichheiten, wenn das Dropdown bei vollständiger Anzeige aufgeklappt wird.
Die Namen im Dropdown müssen dazu natürlich sortiert sein.
Hallo,
das Formular muss zunächst auf der Tabelle "tblKursTeilnehmer" basieren.
Weitere Tabellen, die vorhanden sein müssen: tblKurse und tblTeilnehmer.
Erstelle ein ungebundenes Textfeld ("txtTNsuchen") und ein Listenfeld ("lstTeilnehmer") im Formular.
In der Ereignisprozedur "Bei Änderung" des Textfeldes setzt Du eine SQL-String (Abfrage) mit entspr. Kriterium für die Datensatzherkunft des Listenfeldes zusammen.
Sub txtTNsuchen_Change()
Me!lstTeilnehmer.Rowsource = "Select TNID, TN_Name from tblTeilnehmer where TN_Name like '*" & Me!txtTNsuchen.Text & "*'"
End Sub
Damit werden alle Datensätze im Listenfeld angezeigt , bei denen im Feld TN_Name der im Such-Textfeld akt. eingegebene Text an irgendeiner Stelle vorkommt.
Um einem Teilnehmer nun einem Kurs zuzuordnen , wird mit der Klick- (oder Doppelklick-) Ereignisprozedur des Listenfeldes der Primärschlüsselwert an das entspr. gebundene Formular-Textfeld übergeben:
Sub lstTeilnehmer_DblClick()
Me!TNID = Me!lstTeilnehmer.Column(0)
End Sub
Für die Kurse geht das prinzipiell gleichermaßen.
Vielen Dank für eure Antworten.
Es ist nicht möglich meine Datenbank hier im Forum hochzuladen. Ich habe es deshalb auf der Dropbox freigegeben. https://www.dropbox.com/sh/ioho2nuvg7a8x9t/190akYgQls/Datenbank
Ich habe mich vorerst dazu entschieden dem Tipp von Database zu folgen. Problem ist allerdings, dass im Dropdown eine Nummer ausgewählt wird. Das heißt, tippt man jetzt einen Namen ein, um zu suchen, dann kommt nichts dabei heraus. Nummern direkt eintippen geht aber. Einfach den Namen im Textfeld einzutippen in dem der Name nach der Auswahl im Dropdown auftauchen würde, funktioniert auch nicht.
Außerdem wurde einmal ein neuer Teilnehmer in der Tabelle "Teilnehmer" angelegt als ich einmal per eintippen im Dropdown einen Teilnehmer gesucht habe. Das sollte eigentlich auch gar nicht passieren.
Ich habe allerdings ein schlimmeres Problem, für das ich es im Moment noch nicht schaffe eine Lösung zu finden.
Wenn ich das Formular "Teilnehmer nimmt an Kurs teil" schließen will, kommt die Meldung: "Das Access-Datenbankmodul kann in der Tabelle 'Kurs' keinen Datensatz mit passenden Schlüsselfeldern 'VerbKursNr' finden." Das lässt mich darauf schließen, dass die VerbKursNr in der Tabelle "Kontovorgang Verbindlichkeit" gar nicht angelegt wird. Die VerbKursNr soll eigentlich durch Auswahl der Kurs-Nr im Dropdown dort angelegt werden.
Das Formular soll eigentlich die Kurs-Nr in VerbKursNr eintragen und in der Tabelle "Kontovorgang Verbindlichkeit" anlegen.
Dazu jedenfalls habe ich das Kombinationsfeld35 angelegt in welchem man einen Kurs (bzw. die Kurs-Nr) per Dropdown auswählt.
Außerdem: Wenn ich im Formular "Teilnehmer nimmt an Kurs teil" zuerst einen Teilnehmer auswähle und danach einen Kurs auswählen will, werden die Kurse im Dropdown zwar angezeigt, lassen sich aber nicht auswählen.
Habe gerade aber herausgefunden: Wähle ich im Formular zuerst einen Kurs aus und erst danach einen Teilnehmer, dann speichert das Formular alle Daten wie gewünscht in der Tabelle "Teilnahme". Warum funktioniert es aber nicht auch anders herum?
Und: Wenn ich z.B. im Dropdown "Kurs-Nr auswählen" Kurs-Nr 1 ausgewählt und danch auf Kurs-Nr 2 ändern will, geht das seltsamerweise auch nicht.
Außerdem: Die Kursgebühr wird automatisch ins Feld geladen, wenn eine Kurs-Nr ausgewählt wird. Eigentlich soll automatisch mit der Aktualisierung vom Feld Kursgebühr auch das Feld Verbindlichkeit aktuallisiert werden und der Wert von Kursgebühr als Verbindlichkeit übernommen werden. Das hat zeitweise wunderbar funktioniert. Jetzt geht es plötzlich nicht mehr.
Vielen Dank im Voraus für eure Hilfe. Ich bin ziemlich überfordert und hier ganz schön am verzweifeln.
Hallo,
komprimiere/reparier die Db. Das reduziert die Größe erst mal auf ein Fünftel. Danach zippen und das Ding hat eine Größe von 25 kB...
Zu den Problemen: Überprüf die Beziehungen und korrigiere, bzw. passe sie an.
Vermeide Sonder- (und Leer-) Zeichen in Namen.
Danach sind die Formulare an der Reihe.
Erstelle für jede Tabelle ein eigenes Formular. Für 1-Tabellen als Einzel- , für n-Tabellen als Endlosform. Zur Darstellung von 1-n-Tabellendaten benutze eine HFo/UFo-Konstruktion.
Vermeide (zumindest am Anfang) verknüpfende Abfragen für ein bestimmtes Form zur Darstellung von verknüpften Daten.
Wen o. g. Vorschläge umgesetzt sind, sehen wir weiter....
Hallo,
ZitatProblem ist allerdings, dass im Dropdown eine Nummer ausgewählt wird
Das ist normal, da die gebunden Spalte an das gebundene Feld weitergereicht wird.
Zitattippt man jetzt einen Namen ein, um zu suchen, dann kommt nichts dabei heraus
Das passiert deswegen, weil du die gebundene Spalte im Kombi anzeigst.
Wenn die Spaltenbreite für die erste Spalte auf 0 gesetzt wird funktioniert das schon.
Des Weiteren bekommst du Probleme, weil dein Formular auf einer Abfrage basiert, die mehrere Tabellen beinhaltet und in deinem Fall eine nicht aktualisierbare Datenherkunft darstellt
Bereinige, aktualisiere und normalisiere dein Datenmodell entsprechend der Vorschläge von DF6GL und gehe danach erst an die Formulare.
Zu den Benamsungen der Tabellenfelder - tausche Bindestriche gegen Unterstriche aus - du musst sonst jeden davon betroffenen Feldnamen immer in [ ] einschließen um nicht in grobe Fehler zu laufen.
Empfehlung dazu ... nimm als Worttrennzeichen Großbuchstaben (TVorname, TeilnNr, ...)
Benenne die Tabellen mit einem Präfix .. z.B. tbl also tblTeilnehmer, tblTeilnahme, ... das vermeidet Verwechslungsfehler
Schau dir zu diesem Thema den Link #3 in meiner Signatur an.
Dieses Mal hat das Komprimieren scheinbar besser geklappt. Jedenfalls konnte ich die vollständige Datenbank direkt hier im Forum hochladen. Das heißt ich habe nicht versucht durch löschen von (für die Probleme überflüssige) Tabellen und Formulare Speicherplatz einzusparen.
Folgende Tipps habe ich umgesetzt:
-Tabellenspaltennamen sind nun ohne Leer- und Sonderzeichen
-Tabellennamen beginnen nun alle mit tbl
ZitatDas passiert deswegen, weil du die gebundene Spalte im Kombi anzeigst.
-Wenn die Spaltenbreite für die erste Spalte auf 0 gesetzt wird funktioniert das schon.
Ich würde aber eigentlich gerne die gebundene Nummer (= der Primärschlüssel?) sehen können. Es könnte ja beispielsweise zweimal einen Andreas Müller geben (zwei Personen mit exakt gleichem Namen). Man könnte die beiden also nur anhand des Primärschlüssel eindeutig auseinander halten. Habe es vorerst aber trotzdem mal umgesetzt.
Für folgende Tabellen gibt es ein Formular zum Erstellen eines neuen Datensatzes:
-tblTeilnehmer
-tblDozent
-tblKurs
-tblBereich
Für folgende Tabellen gibt es kein Formular zum Erstellen eines neuen Datensatzes:
a) tblTeilnahme
b) tblKonto
Grund:
a) tblTeilnahme soll die Beziehung zwischen dem Teilnehmer und dem Kurs abbilden. Teilnahme soll darstellen, welcher Teilnehmer an welchen Kursen teilnimmt und welche Teilnehmer an einem Kurs teilnehmen. Benutzt man das "Formular: Teilnehmer nimmt an Kurs teil" soll automatisch diese Verbindung in tblTeilnahme geschaffen werden und ein Datensatz erstellt werden.
b) Über tblKonto soll allgemein die Bezahlung der Kurse durch die Teilnehmer überwacht werden können. Das heißt: Meldet sich ein Teilnehmer für einen Kurs an, wird das "Formular: Teilnehmer nimmt an Kurs teil" benutzt. Dieses Formular soll über die Kursgebühr (aus der tblKurs) automatisch in tblKonto einen Datensatz erstellen und die Gebühr eintragen. Bezahlt der Teilnehmer später den Kurs, soll über das Setzen eines Häkchens im "Formular: Teilnehmer bezahlt Kurs" dann bestätigt werden, dass der Kurs bezahlt wurde. Das heißt tblKonto soll nach meiner jetzigen Sicht über zwei Formulare gesteuert werden.
Außerdem:
1. Die folgende Beziehung sollte so aussehen: tblTeilnehmer 1 zu n tblTeilnahme n zu 1 tblKurs
Im Moment ist es jeweils eine 1 zu 1 Beziehung. Daher kommt wie ihr beschreibt wohl auch das Problem, dass im "Formular: Teilnehmer nimmt an Kurs teil" sich kein Kurs auswählen lässt, wenn zuvor ein Teilnehmer ausgewählt wurde.
2. Ebenfalls im "Formular: Teilnehmer nimmt an Kurs teil" bekomme ich durch meinen VBA-Code folgende Fehlermeldung, wenn ich über das Kombinationsfeld einen Kurs auswähle:
"Laufzeitfehler - Datensätze in der Tabelle "tblKurs" hätten keinen Datensatz auf der '1'-Seite."
Ich kann mit der Fehlermeldung nichts anfangen. Wenn ich mich richtig erinnere hat mein VBA-Code eine ganze Zeit lang funktioniert und das gemacht was er sollte. Es soll ein Wert aus dem Kombinationsfeld auf das Feld TeilnahmeKursNr übertragen werden. Hier der Code:
Private Sub Kombinationsfeld35_AfterUpdate()
Me.TeilnahmeKursNr = Me.Kombinationsfeld35.Column(0)
End Sub3. Ebenfalls bei der gleichen Auswahl im Kombifeld wird das Feld Kursgebühr befüllt. Wenn sich dieses Feld ändert, soll über VBA-Code der gleiche Wert auf das Feld Gebühr (aus der tblKonto) übertragen werden. Das hat auf jeden Fall eine Zeit lang funktioniert und geht jetzt nicht mehr. Code:
Private Sub Kursgebühr_AfterUpdate()
Me.Verbindlichkeit = Me.Kursgebühr
End SubSo, ich habe soweit es mir möglich war versucht all eure Tipps umzusetzen. Vielen Dank für eure Tipps. Über weitere Hilfe würde ich mich selbstverständlich sehr freuen. :)
[Anhang gelöscht durch Administrator]