Hallo alle zusammen,
ich habe eine Datenbank die folgende Tabellen/Beziehungen hat:
Link:
http://www.pic-upload.de/view-223380...ellen.jpg.html
Mittlerweile habe ich es geschafft eine Art "Workflow" zur Eingabe von Daten per Formulare zu erstellen.
Ich möchte Dropdownfelder für Musikrichtung und Tonträgerart verwenden. Diese konnte ich auch problemlos einfügen und entsprechend verknüpfen.
Allerdings komme ich hier zu meinem Problem:
Ich möchte, dass der Benutzer in das Kombifeld durch direkte Eingabe eine neue Kategorie anlegen kann.
Also er soll z. B. 'Jazz' in das Kombifeld eingeben, diese Kategorie soll nun automatisch in der Tabelle angelegt werden und direkt im Kombifeld auswählbar sein.
Ich habe schon google bemüht, aber keine funktionierende Lösung (für mich) gefunden.
Leider habe ich überhaupt keine Ahnung wie die VBA-Programmierung funktioniert.
Kann mir hier jemand helfen??
1000 Dank im Voraus!!
Hallo,
warum verwendest du nicht die Forumsfunktion zum einfügen einer *.jpg - Datei?
Es ist wahrlich keiner interessiert den ganzen Datenmüll dieser leidigen Uploadseiten zu fressen und zu verdauen ;)
Nun, dein Problem löst sich mit dem Ereignis 'NotInList' ... also 'Bei Nicht In Liste' des Kombifeldes.
Die Eigenschaft 'Nur Listeneinträge' muss dazu aber auf 'Ja' eingestellt sein sonst wird das Ereignis 'NotInList' nicht ausgelöst!
Ich gehe davon aus, dass dein Kombifeld an ein Tabellen- oder Abfragefeld gebunden ist und als gebundene Spalte den Primärschlüssel der Datenherkunft aufweist.... ?
Dr. Google gibt auf die Frage 'Kombifeld Not In List' z.B. folgende Antwort:
Private Sub cboDeinKombi_NotInList(NewData As String, Response As Integer)
On Error GoTo Error_Handler
Dim intAnswer As Integer
intAnswer = MsgBox("""" & NewData & """ ist keine wählbare Kategorie. " & vbcrlf _
& "Möchten sie die neue Kategorie hinzufügen?" _ vbYesNo + vbQuestion, "Neue Kategorie")
Select Case intAnswer
Case vbYes
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO tblDeineTabelle (Kategorie) "
& _ "Select """ & NewData & """;"
DoCmd.SetWarnings True
Response = acDataErrAdded
Case vbNo
MsgBox "Wählen sie bitte einen Eintrag aus der Liste.", _
vbExclamation + vbOKOnly, "Falsche Eingabe"
Response = acDataErrContinue
End Select
Exit_Procedure:
DoCmd.SetWarnings True
Exit Sub
Error_Handler:
MsgBox Err.Number & ", " & Error Description
Resume Exit_Procedure
Resume
End Sub
Zwecks leichterer Verständlichkeit habe ich ein paar Änderungen angebracht, die sich deinen Gegebenheiten nähern dürften.
Code entstammt diesem Beitrag:
http://msdn.microsoft.com/en-us/library/office/ff845736.aspx (http://msdn.microsoft.com/en-us/library/office/ff845736.aspx)
Zu dem spuckt die Forumssuche eine Menge Beiträge aus, die dem Suchbegriff 'NotInList' entsprechen.
HTH
Vielen Dank für Deine Antwort.
Mittlerweile habe ich mein Problem über ein weiteres Formular gelöst.
Ich habe ein Startformular erstellt, über welches ich auswählen kann, ob ich den Workflow zur Musikeingabe starten oder zu einer Übersicht von Abfragen kommen kann.
Leider wirft es mir immer eine Fehlermeldung (siehe Anhang) aus, wenn ich vom Startformular durch Knopfdruck zum Workflow/Abfragen wechseln will.
Das untere Feld erscheint, wenn ich das obere mit "OK" bestätigt habe.
Des Weiteren habe ich eine Abfrage erstellt, die alle Lieder einer Band und deren Alben auflistet
SELECT tbl_band.bandname AS Bandname, tbl_song.songtitel AS Songtitel, tbl_album.albumname AS Albumname
FROM tbl_band, tbl_song, tbl_album;
Ich habe ein Formular erstellt (siehe Anhang "Listenfeld"), mit einem Listenfeld (zur Anzeige der Ergebnisse) und einem Kombifeld zur Eingabe des Bandnamen.
a) Im Kombifeld (basierend auf der Abfrage) erscheint der Bandname mehrmals. Wie kann ich dies ändern?
b) Wie schaffe ich es, dass das Listenfeld beim öffnen des Formulares leer ist?
c) Wie sperre ich das Kombifeld, dass keine Daten gespeichert werden, die der User eingibt (das Formular soll quasi nur Daten abrufen/anzeigen)?
Viele Dank für Deine Hilfe :-).
EDIT:
Leider ist die Foto-Datei zu groß deswegen:
(http://img5.fotos-hochladen.net/uploads/listenfeldegk210mzjs.png)
Hallo,
zu a:
Hier ist das Datenmodel nicht stimmig.
Bandnamen, Alben und Songtitel gehören in jeweils eigene Tabellen.
tblBand:
BandID (AutoWert)
Bandname (Text)
tblAlben
AlbumID (Autowert)
AlbumBezeichnung (Text)
BandID_F (Zahl, LongInteger)
tblSongs
SongID
SongNummer (Zahl, Integer)
Songtitel (Text)
SongLaenge (Datum/Uhrzeit)
AlbumID_F (Zahl, LongInteger)
Die Tabellen stehen über die Primärschlüssel und Fremdschlüssel 1:n in Beziehung
Das Kombifeld wird dann über die Abfrage:
SELECT tblBand.BandID, tblBand.Bandname FROM tblBand ORDER BY tblBandname
mit Daten versorgt.
Danach erstellst du ein zweites Kombifeld und weißt diesem keine Datenherkunft zu:
Das Befüllen dieses Kombifeldes regelst du im Ereignis 'Nach Aktualisierung' des ersten Kombifeldes indem du dort
Me.DeinZweitesKombi.Rowsource = "SELECT tblAlben.AlbumID, tblAlben.AlbenBezeichnung FROM tblAlben " & _
"WHERE tblAlben.BandID_F = Forms!frmBand/Song!cmbErstesKombi " & _
"ORDER BY tblAlben.AlbenBezeichnung"
Me.Kombifeld2.Requery
verwendest.
Wobei diese Befüllung durch das Ereignis 'Nach Aktualisierung' des zweiten Kombis mit
Me.DeinListenFeld.RowSource = "SELECT tblSongs.SongID, tblSongs.SongNummer, tblSongs.Songtitel, tblSongs.SongLaenge " & _
"FROM tblSongs WHERE tblSongs.AlbenID_F =" & Me.cmbZweitesKombi & _
" ORDER BY tblSongs.SongNummer"
Me.lstDeinListenfeld.Requery
veranlaßt wird.
zu b:
Um die Kombifelder und das Listenfeld beim Öffnen des Formulars leer darzustellen schreibst du ins Ereignis 'Beim Öffnen' des Formulars
Me.DeinErstesKombifeld = NULL
Me.DeinZweitesKombifeld.RowSource = ""
Me.DeinListenFeld.RowSource= ""
Die Spaltenanzahl und Spaltenbreiten der Kombis und des Listenfeldes stellst du im Eigenschaftsfenster der Steuerelemente vorher schon richtig ein
zu c:
Wenn die Eigenschaft 'Nur Listeneinträge' des Kombifeldes auf 'Ja' steht, sollte es so gehen:
Private Sub cboDeinKombi_NotInList(NewData As String, Response As Integer)
MsgBox "Wählen sie bitte einen Eintrag aus der Liste.", _
vbExclamation + vbOKOnly, "Falsche Eingabe"
Response = acDataErrContinue
Me.cboDeinKombi = Null
End Sub
HTH
Hallo Peter, vielen Dank für Deine Antwort. Wegen der Ergänzung des Fremdschlüssels in tbl_Album muss ich mal Rücksprache halten.
Ich stehe gerade davor ein Formular zu erstellen, in dem ich mir Lieder anzeigen lasse.
a) Ich möchte, dass der Benutzer die Zeit per Dropdown-Feld eingeben/auswählen kann.
In einem Listenfeld im selben Formular sollen dann die Lieder mit Band und Album angezeigt werden, welche der Eingabe entsprechen.
Daneben möchte ich per Optionsbutton auswählen können, ob die Eingabe im Listenfeld einem "Minimum (anzeige aller Songs die mindestens xx:xx lang sind)"
"Maximium (anzeige aller Songs die maximal xx:xx lang sind)"
"Genau (anzeige aller Lieder die genau die eingegebene Länge besitzen)"
Bis jetzt habe ich es geschafft, dass mir im Kombifeld die Laufzeiten angezeigt werden.
Dafür habe ich dem Kombifeld unter "Datenherkunft" folgende Abfrage zu gewiesen:
SELECT tbl_song.songtitel AS Songtitel, tbl_song.laufzeit AS Laufzeit, tbl_band.bandname, tbl_album.albumname
FROM tbl_song, tbl_album, tbl_band;
Allerdings weis ich nicht, wie ich dem Listenfeld sagen soll, dass es die Lieder gemäß dem Kombifeld anzeigen soll.
Wie lässt sich das realisieren?
1000 Dank für Deine super Hilfe, Du rettest mich gerade!!
EDIT:
Ich habe noch ein Problem mit meinem Startformular.
Dort habe ich zwei Buttons:
Musikworkflow
Abfrageübersicht
diesen habe ich beim erstellen mit dem Assistenten die Funtion "Formular öffnen" und das entsprechende Formular zugewiesen.
Allerdings kommt jedes mal der Hinweis:
"Sie haben als Einstellung der Ereigniseigenschaften den Ausruck Beim Kicken eingegeben. Dieser Ausruck hat einen Fehler verursacht: Es trat ein Problem auf, während Microsoft Office Access mit dem OLE-Server oder Active X Steuerelement kommunizierte."
Wie behebe ich das, hast Du da eine Idee?