Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Daten in Kombinationsfeld eingeben und übernehmen

Begonnen von Grünerpunkt, Februar 21, 2014, 16:54:52

⏪ vorheriges - nächstes ⏩

Grünerpunkt

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!!

database

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

Zu dem spuckt die Forumssuche eine Menge Beiträge aus, die dem Suchbegriff 'NotInList' entsprechen.

HTH


Grünerpunkt

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:



database

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

Grünerpunkt

#4
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?