collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 59
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13700
  • stats Beiträge insgesamt: 62191
  • stats Themen insgesamt: 8474
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Kombifeld soll nach Aktualisierung Listenfeld aktualisieren, geht aber nicht  (Gelesen 568 mal)

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Ich meine es so, wie es da steht. Was ist daran unklar?
Grüße von der (⌒▽⌒)
 

Offline derilzemer

  • Access-Meister
  • ***
  • Beiträge: 506
    • Quartettportal
Hi,
Verwende Debug.Print Me.lstKarten.RowSource und kopiere die Ausgabe zum Prüfen in die SQL-Ansicht einer leeren Abfrage.Ich habe das so eingetragen im VBA
Private Sub cboSpielkarte_AfterUpdate()
    Me.ufKarten.Form.Filter = "False"
    Debug.Print Me.lstKarten.RowSource = "SELECT tblQuartette.SpielID_F, tblQuKarten.QuKartenID, tblSpiele.SpielNr, tblSpiele.Ausgabejahr, [QuartettKz] & [KartenNr] AS Karte tblQuKarten.Kartenbezeichnung " _
        & " FROM tblSpiele INNER JOIN (tblQuartette INNER JOIN tblQuKarten ON tblQuartette.QuartettID = tblQuKarten.QuartettID_F) ON tblSpiele.SpielID = tblQuartette.SpielID_F " _
        & " WHERE Kartenbezeichnung ='" & Nz(Me.cboSpielkarte) & "'"
End Sub
Hab im Formular ein Datensatz ausgewählt und habe folgendes erhalten (bild1, so ist es eindeutig als Bild, beschreiben wäre eventuell missverständlich). Aber wo ich jetzt im lokalen Fenster suchen soll, wo fang ich an zu suchen?! Es weißt laut Bild auf einen Fehler in der letzten Zeile hin wenn ich es richtig deute (Me.cboSpielkarte?). 
Gruß Andreas


Grüße und Dank im voraus
Andreas
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Jetzt hast Du aber den Rückwärtsgang eingelegt. Dass "False" falsch ist, hatten wir doch schon geklärt. Und dann, zuerst die RowSource wie bisher zuweisen und danach mit Debug.Print auslesen.
Private Sub cboSpielkarte_AfterUpdate()
   If IsNull(Me.cboSpielkarte) Then Exit Sub

   Me.ufKarten.Form.Filter = False
   Me.lstKarten.RowSource = _
      "SELECT q.spielid_f," & vbCrLf & _
      "       qk.qukartenid," & vbCrLf & _
      "       s.spielnr," & vbCrLf & _
      "       s.ausgabejahr," & vbCrLf & _
      "       q.quartettkz & qk.kartennr AS karte," & vbCrLf & _
      "       qk.kartenbezeichnung" & vbCrLf & _
      "FROM   TBLSPIELE s" & vbCrLf & _
      "       INNER JOIN (TBLQUARTETTE q" & vbCrLf & _
      "                   INNER JOIN TBLQUKARTEN qk" & vbCrLf & _
      "                           ON q.quartettid = qk.quartettid_f)" & vbCrLf & _
      "               ON s.spielid = q.spielid_f" & vbCrLf & _
      "WHERE  qk.kartenbezeichnung = '" & Replace(Me.cboSpielkarte, "'", "''") & "'"
   Debug.Print Me.lstKarten.RowSource
   'im VBA-Editor das Direktfenster einblenden und generierte Abfrage in der SQL-Ansicht testen.
End Sub
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: derilzemer

Offline derilzemer

  • Access-Meister
  • ***
  • Beiträge: 506
    • Quartettportal
Hi,
Jetzt hast Du aber den Rückwärtsgang eingelegt. Dass "False" falsch ist, hatten wir doch schon geklärt.
Ich weiss, hab das aber nicht gemacht um andere zu ärgern, sondern, wenn ich im Listenfeld was markiere und dann wieder demarkiere, dann kommt wieder Parameterwert eingeben. Breche ich das ab, dann geht der Debug auf die Zeile  Me.ufKarten.Form.Filter = False Setze ich die "False", dann ist der Fehler weg und es funktioniert :-( Sprich ich kann auch einen Datensatz auch wieder demarkieren. Sprich, das ist erzwungen dass ich das wieder in "" setze. In dem ganzen Prozess kommt ja 2x vor.
Private Sub cboSpielkarte_AfterUpdate()
   If IsNull(Me.cboSpielkarte) Then Exit Sub

   Me.ufKarten.Form.Filter = False
   Me.lstKarten.RowSource = _
und in
Private Sub lstKarten_AfterUpdate()
    Dim strKarten As String
    Dim itm As Variant
    If Me.lstKarten.ItemsSelected.count > 0 Then
        ' ausgewählte Karten anzeigen
        For Each itm In lstKarten.ItemsSelected
            strKarten = strKarten & "," & Me.lstKarten.ItemData(itm)
        Next
        Me.ufKarten.Form.Filter = "QuKartenID in (" & Mid(strKarten, 2) & ")"
        Me.ufKarten.Form.FilterOn = True
    Else
        ' leeres Ufo anzeigen
        Me.ufKarten.Form.Filter = False
        Me.ufKarten.Form.FilterOn = True
    End If
Ich mach das eben nur, weil es mit den "" geht :(. Muss ich etwas in den Formulareigenschaften unter Daten --> Filter wegmachen? Da steht False, aber das steht da ja nur, weil ich nicht will, dass er schon Datensätze vorab anzeigt.
Das mit deiner Prüfroutine funktioniert.
Das Debug Ergebnis aus dem Direktbereich
SELECT q.spielid_f,
       qk.qukartenid,
       s.spielnr,
       s.ausgabejahr,
       q.quartettkz & qk.kartennr AS karte,
       qk.kartenbezeichnung
FROM   TBLSPIELE s
       INNER JOIN (TBLQUARTETTE q
                   INNER JOIN TBLQUKARTEN qk
                           ON q.quartettid = qk.quartettid_f)
               ON s.spielid = q.spielid_f
WHERE  qk.kartenbezeichnung = 'Opel Diplomat V8'
Ich habe ja gesehen, dass du den Code etwas vereinfacht (gekürzt) und "modifiziert" hast.
WHERE  qk.kartenbezeichnung = '" & Replace(Me.cboSpielkarte,Da ist eine Änderung, replace. Bewirkt was, dass er das aktuell angezeigte Query Ergebnis des LF entfernt bzw. ersetzt mit der Auswahl?
Er übergibt jetzt den ausgewählten Datensatz auch an das Listenfeld. Ich kann Datensätze markieren und demarkieren (wenn ich False in "" setze), genauso wie es sein sollte, das ist erst mal echt super  :). Das Gänsefußthema weiss ich nicht was ich da falsch habe in den Einstellungen.
Jetzt funktioniert nur noch die Übergabe an das Ufo nicht ganz korrekt. Aktuell steht im QuKartenID Feld die Spiel-ID statt der QuKartenID und als Spiel-ID wird im UFO eine ganz andere ID angezeigt (bild1). Ergo zeigt er noch die falsche Karte an.
Das liegt dann wohl an der von euch als Mnsterabfrage bezeichneten Abfrage, oder? Die Felder im Ufo sind im Steuerelementinhalt alle korrekt zugewiesen. Die Datensatzquelle des Ufo ufKarten ist:
SELECT DLookUp("Bilderpfad","tblBildPfad") AS BilderPfad,
       tblVerlag.BilderOrdner,
       tblBilderZuSpiel.Bilddateiname,
       tblBilderZuSpiel.BildmotivID_F,
       tblQuKarten.QuKartenID,
       tblQuKarten.Kartenbezeichnung,
       [QuartettKz] & [KartenNr] AS Karte,
       tblSpiele.SpielID,
       tblSpiele.SpielNr,
       tblSpiele.Ausgabejahr,
       tblSpiele.Verzeichnisname,
       tblSpiele.SerieID_F
FROM tblVerlag
INNER JOIN ((tblSpiele
             INNER JOIN tblBilderZuSpiel ON tblSpiele.SpielID = tblBilderZuSpiel.SpielID_F)
            INNER JOIN (tblQuartette
                        INNER JOIN tblQuKarten ON tblQuartette.QuartettID = tblQuKarten.QuartettID_F) ON tblSpiele.SpielID = tblQuartette.SpielID_F) ON tblVerlag.VerlagID = tblSpiele.VerlagID_F;
Warum zeigt er im Feld QuKartenID die SpielID an??

Gruß Andreas



Grüße und Dank im voraus
Andreas
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1492
Hallo Andreas,
Bezügl.Debug.Print:
keine Zuweisung (Variable = irgendwas) möglich
also entweder
Debug.Print Me.lstKarten.RowSourceoder
Debug.Print "SELECT ... "Das Ergebnis dieses Befehls siehst du, wenn du im VB-Editor "Strg-G" drückst.
Aus dem aufscheinenden Direktfenster kannst du den String kopieren, in eine
leere Abfrage einfügen (SQL-Ansicht), und testen.
gruss ekkehard


P.S. Ich bastele gerade an einem kleinen Tool um diesen Vorgang zu erleichtern; -
ist aber noch nicht "rund".
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 
Folgende Mitglieder bedankten sich: derilzemer

Offline derilzemer

  • Access-Meister
  • ***
  • Beiträge: 506
    • Quartettportal
Hi Ekkehard,
Hallo Andreas,
Bezügl.Debug.Print:
keine Zuweisung (Variable = irgendwas) möglich
also entweder
Debug.Print Me.lstKarten.RowSourceoder
Debug.Print "SELECT ... "Das Ergebnis dieses Befehls siehst du, wenn du im VB-Editor "Strg-G" drückst.
Aus dem aufscheinenden Direktfenster kannst du den String kopieren, in eine
leere Abfrage einfügen (SQL-Ansicht), und testen.

Ich hab ein wenig gebraucht, bis ich gesehen habe, dass ich auf der Leitung stehe :(. Aber dann hat das auch mit Hilfe von Lachtaube auch funktioniert was das anwenden des Debug.print angeht.
Zitat
P.S. Ich bastele gerade an einem kleinen Tool um diesen Vorgang zu erleichtern; - ist aber noch nicht "rund".
Das hört sich doch gut an. Solche Hilfstools sind für solche "Schwerbegreifer" wie mich Gold wert. Dann bin ich mal gespannt, ob du es dann mal final hast und man es dann nutzen kann.

Gruß Andreas
Grüße und Dank im voraus
Andreas