Announcement

Collapse
No announcement yet.

Kombinierte, gefilterte ComboBoxen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kombinierte, gefilterte ComboBoxen

    Hallo
    Ich habe ein riesiges Problem mit der Auswahl über verknüpfte Komboboxen.
    Folgendes Szenario: Möbelaufnahme - Inizes sind Gebäude, Bauteil, Geschoß, Raumnummer.

    Ich habe ein Formular, in dem ich über 4 Comboboxen den Index auswähle.
    1. Auswahl Gebäude (aus abfGebäudeHer)
    2. Auswahl Bauteil (aus abfBauteilHer = beinhaltet die Gebäude und Bauteile je Gebäude)
    Gefiltert habe ich via VBA-code:
    Me.[xgebäude] = Forms![fMöbelaufnahme]![geb].Column(0)
    'Zuweisung der Suchzeile für BT lt. Geb
    Me!bt.RowSource = "SELECT * " & _
    "FROM abfBauteilHer " & _
    "WHERE Gebäude = '" & Me![xgebäude] & "'"
    Durch diesen Code zeigt er mir ja nur jene Bauteile an, die in dem zuvor ausgewählten Gebäude vorhanden sind.
    3. Auswahl Geschoss (aus abfGeschossHer = beinhaltet die Gebäude und Bauteile und geschosse je Geb. und Baut.)
    und hier soll er mir nur jene Geschoße anzeigen, die in dem ausgewählten Gebäude mit in dem ausgewählten Bauteil vorhanden sind.
    ich habe das schon über RowSource versucht, klappt aber nicht, da mir im ComboBox keine Werte angezeigt werden.
    jetzt habe ich es über INNER Join versucht siehe nachstehend:
    Dim strSQL As String
    Dim strSQL1 As String

    strSQL = "SELECT Gebäude " & _
    "FROM abfGeschossHer " & _
    "WHERE Gebäude = '" & Me![xgebäude] & "'"

    strSQL1 = "SELECT Gebäude, Bauteil " & _
    "FROM abfGeschossHer " & _
    "INNER JOIN Me!strSQL " & _
    "ON Bauteil = ' & Me![xbauteil] &" '"

    Me!gesch.RowSource = strSQL1

    hier bekomm ich aber nur Syntax....

    kann mir wer helfen????

    Dringend....
    ich bin schon ein bisschen am Verzweifeln!
    danke

  • #2
    Hallo m.sandler,

    wenn das wirklich Dein Code ist, hast Du schlicht einen Tippfehler drin:
    Das hier

    INNER JOIN Me!strSQL " & _
    "ON Bauteil = ' & Me![xbauteil] &" '"

    muss natürlich so aussehen:

    INNER JOIN " & Me!strSQL " " & _
    "ON Bauteil = ' & Me![xbauteil] &" '"
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo Olaf

      danke für die schnelle Hilfe, das war aber scheinbar nicht die Lösung des Problems. Jetzt bekomm ich zu mindest keine Fehlermeldung mehr.... aber, in der CBox werden trotzdem keine Werte angezeigt.

      Vielleicht zur Hilfe bzw. besseren Verständnis ein Screen-Shot von der
      abfGeschossHer Shot_abfGeschossHer.jpg
      abfGebäudeHer Shot_abfGebäudeHer.jpg
      abfBauteilHer shot_abfBauteilHer.jpg

      Ich bin mir nicht sicher, ob dies auch der richtige Weg ist mit INNER JOIN, oder ob ich das mit einem Sub-Select versuchen sollten, jedoch habe ich mit den () so meine Probleme....bin ja erst am Anfang meiner VBA-Programmier-Karriere/Wissen.
      Wenn sonst noch infos benötigt werden, einfach bescheid geben.

      Danke schon mal für deine Hilfe.

      Dann hätte ich noch eine kleine Frage, meine ComboBox verliert nach der Aktualisierung des Formulars die Werte, kann man das unterdrücken bzw. verhindern?
      Zuletzt editiert von m.sandler; 13.02.2009, 12:12.

      Comment


      • #4
        Mir ist sind die Abfragen noch etwas zu undurchsichtig, aber auf die Schnelle überflogen, müsste das schon reichen:
        [highlight=vb]strSQL1 = "SELECT Gebäude, Bauteil " & _
        "FROM abfGeschossHer " & _
        "WHERE Gebäude = '" & Me![xgebäude] & "' " & _
        "AND Bauteil = '" & Me![xbauteil] & "'"
        Me!gesch.RowSource = strSQL1 [/highlight]

        meine ComboBox verliert nach der Aktualisierung des Formulars die Werte
        Was meinst Du damit genau?
        Nach welchem Aktualisieren und welche Werte?
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Hallo....

          diese abfragen sind wie eine Pivot-Tabelle zu verstehen um mehr oder weniger einzelwerte zu erhalten. ich weiß nicht ob man das effizienter gestalten kann. am liebsten wär es mir natürlich, wenn ich die abfragen irgendwie zusammenlegen könnte. Mein Ziel ist es, dass wenn ich das Gebäude auswähle, dass mir dann nur die im gebäude vorhandenen Bauteile, im ausgewählten Bauteil die Geschosse und dann im endeffekt natürlich die im Geschoss vorhandenen Räume auswählen kann, natürlich ohne duplikate.

          ich habs versucht in den Abfragen direkt unter kategorie mit [Form]![fMöbelaufnahme]![x....] zu arbeiten, jedoch zeigt mir access das Formular erst dann an, wenn ich vorher die einzelnen Attribute quasi eingebe, das bringt mir aber nichts, denn ich will die ja über die ComboBoxen definierten.

          Vielleicht hast du einen vorschlag....

          bezüglich "ComboBoxen verlieren Werte": ich möchte, nach Auswahl Geb. und BT und ev. Geschoss zwischen den Räumen des Geschosses hin und her switchen können oder auch zw. den Geschossen usw. aber sobald ich den Raum ausgewählt habe, und dann zb. das geschoss ändern will zeigt er mir wieder alle geschosse an, die in der Datenbank vorhanden sind oder die ComboBoxen haben keine Werte zum auswählen.....

          mfg
          und danke schon mal

          Comment


          • #6
            Ich kenne ja nun nicht einmal einen Bruchteil Deines Codes, deswegen kann ich so aus der "Ferne" schwer sagen, woran es hapert.

            Lässt Du im "AfterUpdate" Event der ComboBox die anderen ComboBoxen aktualisieren, sprich den RowSource neu setzen, da dieser ja statisch ist (und ggf. eine Requery)?
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              ich denke, es ist am besten, ich schick dir mal den ausschnitt aus meiner DB.... siehe anhang.
              vielleicht kommst so drauf...
              Attached Files

              Comment


              • #8
                Ok, habe ich mir mal angesehen, aber so ganz passt es mit Deiner Problembeschreibung nicht voreinander.
                Es werden doch Datensätze in der ComboBox für "Geschoss" angezeigt.

                Oder meinst Du, das Du in der Spalte für "Geschoss" der ComboBox nichts siehst? Das liegt daran, das nur Daten angezeigt werden, die auch mitselektiert werden => es fehlt das Feld "Geschoss"

                [highlight=VB]Private Sub bt_Click()
                Me.[xbauteil] = Forms![fMöbelaufnahme]![bt].Column(1)
                'Zuweisung der Suchzeile für Gesch lt. Geb&BT

                Me!gesch.RowSource = "SELECT Gebäude, Bauteil, Geschoss " & _
                "FROM abfGeschossHer " & _
                "WHERE Gebäude = '" & Me![xgebäude] & "' " & _
                "AND Bauteil = '" & Me![xbauteil] & "'"
                'if not in list funktion einbauen!
                End Sub[/highlight]



                P.S.: Der Bundescomputerminister warnt: Zu bunte Farben verursachen Augenkrebs.
                Halte eine GUI immer schlicht und vor allem übersichtlich.
                Olaf Helper

                <Blog> <Xing>
                * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                Comment


                • #9
                  Es Hat geklappt!

                  Danke dir, das hat wunderbar geklappt!!!!

                  Perfekt jetzt funktioniert das ganze schon fast so wie ich mir das vorstelle.
                  Noch ne kurze frage, funktioniert die NotInList anweisung nur bei Listeneinträgen oder kann man dich auch in meinem Fall anwenden? d.h. kann ich in meiner tabelle suchen ob dieser Raum in den zuvor ausgewählten Gebäude, Bauteil und Geschoss vorhanden ist und wenn nicht, dass er mir das mitteilt und mich auffordert den anzulegen bzw. selbst nach bestätigung anlegt?

                  Danke schon mal!

                  Comment


                  • #10
                    "NotInList" ist etwas anderes, als Du meinst.
                    Das ist dann der Fall, wenn man in der ComboBox von Hand einen Wert eingibt, der in der Auswahlliste nicht vorhanden ist; z.B. kann ich bei Dir in "Bauteil" einfach X eingeben, das es nicht gibt (in der Liste).

                    Man kann natürlich in den Daten suchen
                    Einfacher für den speziellen Fall ist zu Prüfen, ob nach Aktualisieren in der ComboBox mind. ein Wert steht; das geht mit dem Property "ListCount":
                    [highlight=vb]Private Sub bt_Click()
                    Me.[xbauteil] = Forms![fMöbelaufnahme]![bt].Column(1)
                    'Zuweisung der Suchzeile für Gesch lt. Geb&BT

                    Me!gesch.RowSource = "SELECT Gebäude, Bauteil, Geschoss " & _
                    "FROM abfGeschossHer " & _
                    "WHERE Gebäude = '" & Me![xgebäude] & "' " & _
                    "AND Bauteil = '" & Me![xbauteil] & "'"
                    'Liste leer?
                    If Me.gesch.ListCount <= 0 Then
                    MsgBox "Es gibt kein passendes Geschoß; bitte anlegen", vbInformation
                    End If
                    End Sub[/highlight]
                    Olaf Helper

                    <Blog> <Xing>
                    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                    Comment

                    Working...
                    X