Neuigkeiten:

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

Mobiles Hauptmenü

Listenfeld Mehrfachselektion wird ungewollt zurückgesetzt

Begonnen von Kaffeebart, Oktober 31, 2024, 14:20:03

⏪ vorheriges - nächstes ⏩

Kaffeebart

Hallo zusammen

bei Access bin ich absoluter Neuling. Sorry wenn ich da möglicherweise sogar grundlegendste Dinge nicht weiss.

Mein Problem:
Ich habe ein Listenfeld mit Mehrfachselektion. Wenn ich diese Selektion nehme und als Filter in einem Bericht einsetze wird nicht nur der Bericht aktualisiert, sondern auch das Listenfeld selber auf den Ursprungszustand zurück gesetzt. Dadurch ist keine Mehrfachselektion möglich.

Der Aufbau bei mir:
Ich habe ein Formular (frm_UebersichtParameter) dort gibt es ein Listenfeld mit Mehrfachauswahl und darunter ein engebetteter Bericht.

Das Listenfeld greift auf die Tabelle tbl_Geschosse zu.
Dem Bericht liegt eine Abfrage zugrunde, welche auf die Tabelle tbl_Raueme zugreift.
Die beiden Tabellen stehen in einer Beziehung zueinander.

Ich habe ein kleines VBA bei Klick des Listenfeldes, welches mir die selektierten Werte ausliest und als Filter in den Bericht einfügt. Funktioniert soweit auch alles.
Nur wenn ich im VBA dann FilterOn = True setze wird eben nicht nur der Bericht aktualisiert sondern es scheint dass das ganze Formular neu geladen wird und das Listenfeld dann im ursprünglichen Zustand (also ohne selektion) steht.

Gibt es irgendwo eine Einstellung die das bewirkt?
Liegt es am VBA?
Was kann ich prüfen und ändern?

Hier noch der VBA Schnipsel. Mehr VBA gibt es im Projekt noch nicht.

Private Sub SEL_Geschoss_Click()
    Dim var As Variant
    Dim Geschoss, strSQL As String
       
    Geschoss = "0"
   
    For Each var In Me!SEL_Geschoss.ItemsSelected
        Geschoss = Geschoss & "," & var + 1 & ""
    Next var
   
    strSQL = "[Geschoss] In (" & Geschoss & ")"

    Me.ctl_rpt_Uebersicht_Parameter.Report.Filter = strSQL
    Me.ctl_rpt_Uebersicht_Parameter.Report.FilterOn = True

   
End Sub

Vielen Dank für eure Ideen
Lieben Gruss
Stefan

Knobbi38

Hallo,

möglicherweise wird durch die Zuweisung für das Formular auch ein Requery ausgelöst. Das ließe sich erstmal nicht verhindern.

Warum wird überhaupt im Formular ein SubReport verwendet? Reports werden normalerweise zum Ausdrucken verwendet und nur ganz selten als Formularersatz.

Wahrscheinlich noch ein Fehler im Code:
Dim Geschoss, strSQL As String
Hierbei wird Geschoss als Variant definiert und nicht wie vielleicht angenommen als String!
Ist das eigentlich richtig, daß immer Geschoss "0" mit ausgewählt wird?



Kaffeebart

Hallo knobbi

vielen Dank für den Input.

Eigentlich wollte ich nur einen Bericht haben, den der Kunde nach Wunsch auch drucken könnte.
Ich finde er sieht schöner aus und bietet mir mehr Möglichkeiten bei Gruppierungen.
Da ich es gar nicht geschafft habe im Bericht selber ein Selektionsfeld einzubinden habe ich diese Variante mit Formular und Bericht als Unterform gewählt.

Das mit der 0 ist eigentlich nicht richtig ;) Aber es hat keine grosse Auswirkung. Einen Index 0 gbt es in der Tabelle nicht. Also bekomme ich einen leeren Wert zurück, wenn nichts selektiert ist.
Das war einfach schnell daher geschrieben um nicht gross abfragen zu müssen ob ich jetzt im SQL statement das IN benutzen kann oder nicht. IN ohne Wert gibt ja einen Fehler ;)
Lieben Gruss
Stefan

Kaffeebart

Ich habe nun eine Lösung.

Ich versuche nicht mehr den Filter zu definieren, sondern übergebe ein komplettes SQL statement in die Datenherkunft.
Scheint im Moment genau das Verhalten an den Tag zu legen, das ich erwarte.

Danke und Gruss
Lieben Gruss
Stefan

MzKlMu

Hallo,
ich kann nicht verstehen, wozu Du hier einen Bericht als UF einbindest.

Du kannst im Formular einen Druckbefehl (Button) anlegen, in dem als Parameter der Filter angegeben wird. Man kann auch eine Where Klausel erzeugen, die genau den einen gewünschten Bericht druckt. Das ist auch für den Kunden ganz einfach.
Gruß Klaus

Kaffeebart

Hallo Klaus
wie gesagt ich bin komplett neu auf Access unterwegs und weiss ganz sicher nicht was man alles mit Formularen / Berichten anstellen kann.

Im Bericht finde ich sehr schön, dass ich dort gruppieren kann ohne bereits in der Abfrage gruppiert zu haben.

Bei mir ist es eine Raumverwaltung.
Ich habe die Abfrage über alle Räume erstellt und will diese nun pro Raumkategorie mit Anzahl Räume und Summe der Fläche pro Kategorie ausgeben.

Bsp (mit frei erfundenen Daten)
RaumNr Raumbezeichnung Fläche
Nasszellen 3 Räume 47
101 Dusche Herren 21
110 WC Herren 12
111 WC Frauen 14

Bewirtschfatungsraum 2 Räume 34
102 Putzkammer 8
122 Werkstatt 26

Der Filter mit dem ich oben Probleme hatte filtert nun noch welche Etage ich ausgewertet haben möchte.
Vergleichbares habe ich in einem Formular mit Endlosdaten nicht gefunden und habe mich deswegen für den Bericht entschieden.
Davon abgesehen hatte ich den Filter auch in einem Formular nicht so hinbekommen wie gewünscht. - Versucht hatte ich es gestern auf jeden Fall  ;)
Lieben Gruss
Stefan

MzKlMu

Hallo,
ich verstehe nicht, was Du da genau vorhast.
Du kannst doch einen Bericht direkt drucken. Mit einem Button der im Druckbefehl auch den Filter (alternativ eine Where Klausel) übergibt.
Den Bericht in ein Formular einzubetten ist doch völlig überflüssig.

Kannst Du bitte mal ein Bild des Beziehungsfensters hier zeigen ?
Gruß Klaus

Kaffeebart

Hi

im Bericht habe ich es nicht geschafft das Listenfeld mit Mehrfachselektion unterzubringen.
Da ich jetzt fast alles über VBA mache könnte das auch wieder anders aussehen, hab ich nicht mehr versucht.

Wie gewünscht der Auszug von den Beziehungen. Zusätzlich noch 2 Bilder vom aktuellen Stand
Gruppe eingeklappt und einmal Gruppe offen.

Da ich jetzt eine funktionerende Lösung habe passt das für mich. Du musst dir da keinen grossen Aufwand machen, ausser du willst unbedingt ;)
Lieben Gruss
Stefan

Knobbi38

@klaus:

Ein Report ist nicht notwendiger weise nur zum Drucken gedacht, sondern kann wie in diesem Fall, als gestalterisches Element in eine Formular eingebaut werden, quasi als "besonderes" Steuerelement. Wird selten so genutzt, hat aber durchaus seine Berechtigung. Ähnliches könnte man auch mit einem Webbrowser-Steuerelement erreichen, wird dann aber aufwendiger.

Gruß
Ulrich

MzKlMu

#9
Hallo,
@Ulrich
ZitatEin Report ist nicht notwendiger weise nur zum Drucken gedacht,

Das ist mir durchaus klar, aber er will ja explizit den Bericht auch drucken können.
ZitatEigentlich wollte ich nur einen Bericht haben, den der Kunde nach Wunsch auch drucken könnte.

@Stefan
Zitatim Bericht habe ich es nicht geschafft das Listenfeld mit Mehrfachselektion unterzubringen.
Das Listenfeld soll ja nicht in den Bericht. Du sollst ja nur den im Formular mit dem Listenfeld erzeugten Filter an den Druckbefehl für den Bericht weitergeben.

Noch einige Anmerkungen:
- Nenne die ID nicht einfach ID, sondern mit Bezug zur Tabelle also GeschossID und dan den Fremdschlüssel hängst Du ein _F an: GeschossID_F. Es ist zweckmäßig, wenn es in einer Datenbank keine Felder gibt mit gleichem Namen.

- Du solltest auch referentielle Integrität einstellen

- Die Beziehungen zwischen Raum und Gebäude und Geschoß solltest Du überdenken. So wie das jetzt ist, kannst Du ein Geschoß zuordnen das das Gebäude gar nicht hat.
Du brauchst demnach eine n:m Beziehung (mit weiterer Tabelle) das nur die Geschoße einem Gebäude zuordnet das dieses Gebäude auch hat. Es genügt dann in der Raumtabelle nur das Geschoß auszuwählen, das Gebäude ergibt sich dann automatisch über die n:m Zuordnungstabelle.
Gruß Klaus

Knobbi38

Zitat von: MzKlMu am November 01, 2024, 16:46:39@Ulrich
ZitatEin Report ist nicht notwendiger weise nur zum Drucken gedacht,
Das ist mir durchaus klar, aber er will ja explizit den Bericht auch drucken können.

Der Report kann doch trotzdem noch gedruckt werden, auch wenn er als Subreport eingebunden ist. Nur die Kriterien müssen dann ausgelesen und an den Report übergeben werden.

Grüße
Ulrich