|
Kombifelder sollen Endlosformular (Liste) filtern
|
| Autor |
Nachricht |
obroa
Anfänger
Verfasst am: 21. Jan 2010, 10:42 Rufname:
|
|
| Version: Office 2003 |
|
Hallo und guten Morgen an alle,
ich bin Anfänger, was Access betrifft und neu hier im Forum. Bezüglich meines Problems google ich mich seit zwei Tagen durch dieses und andere Foren - leider bisher ohne Erfolg. Allerdings habe ich viele andere Anregungen erhalten...
Folgende Basis: ich habe eine Datenbank mit einer Haupttabelle [Adressen] und zwei Nebentabellen [BER_NUM] und [BL_LK]. Die Hauptabelle wird über ein Formular [Eingabe_Adressen] befüllt, wobei über Kombifelder aus den Untertabellen die Felder für "Berater" und "Bundesland"/"Landkreis" selektiv befüllt werden. Das klappt insoweit wie gewünscht.
Für die Auswertung gibt es ein Formular [Liste_nach_Auswahl], wo diverse Felder aller Datensätze als Endlosliste dargestellt werden. Diese Liste soll nun über die Auswahl in den Kombifeldern [cboBL] und [cboBER] nach "Bundesländer" und/oder "Berater" gefiltert werden.
Leider haben weder die Variante
| Code: | Private Sub cboBL_AfterUpdate()
Me.Filter = "Bundesland=" & Me!Kombi.Column(2) ' 2. Spalte!
Me.FilterOn = True
End Sub | noch die Anwendung von
| Code: | Private Sub cboBER_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[ID] = " & STR(Nz(Me![cboBER], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
' bzw einfach (edit by Willi Wipp)
' Me.Recordset.FindFirst "[ID] = " & Str(Nz(Me![cboBER], 0))
End Sub | zum Erfolg geführt.
Außerdem ist mir nicht so ganz klar, woher ich die Daten für die Kombifelder beziehen soll: aus der Haupttabelle [Adressen] oder aus den jeweiligen Untertabellen [BL_LK] und [BER_NUM] oder direkt aus dem Formular [Liste_nach_Auswahl]? Letzteres wahrscheinlich nicht, da sonst nach Filterung der Datensätze wahrscheinlich nicht mehr alle möglichen Begriffe im Kombifeld angezeigt werden.
Also wahrscheinlich am ehesten aus den Untertabellen. Dabei funktioniert jedoch die Gruppierung in der Auswahlabfrage für [cboBL] bei der Datensatzherkunft nicht und führt zum Fehler Mit ´*´ ausgewählte Felder können nicht gruppiert werden, dabei funktioniert es im Formular [Eingabe_Adressen] doch genau auf diese Weise.
Außerdem sollte es möglich sein, aus der (gefilterten) Liste heraus mittels Doppelklick auf einen der angezeigten Datensätze in den jeweiligen Datensatz im Formular [Eingabe_Adressen] zu springen, um ggf. Änderungen vornehmen zu können. Aber das wäre eigentlich erst der nächste Schritt...
Es wäre toll, wenn jemand eine Lösung für mein Problem hätte! Um es einfacher zu machen, lade ich die Datei anonymisiert hier mit hoch.
Vielen Dank schon mal im voraus und beste Grüße
obroa
| Beschreibung: |
|
 Download |
| Dateiname: |
Adr_Test.zip |
| Dateigröße: |
89.81 KB |
| Heruntergeladen: |
8 mal |
|
|
Marmeladenglas
komme zurecht
Verfasst am: 21. Jan 2010, 11:19 Rufname:
|
| |
| Version: Office 2003 |
|
Hi,
ganz kurz und knapp, da muß man erstmal das Tabellenkonzept richten, bevor man da überhaupt weitere Schritte geht.
Du mußt nicht die Tabelleninhalte aus deiner Berater bzw. PLZ Tabelle in der Haupttabelle wiederholen. HIer werden lediglich in Fremdschlüsseln die Primärschlüssel aus den Hilfstabellen erfasst. Über die Beziehung, kommst du über Abfragen jederzeit an die Daten ran.
Haupttabelle muß weiter normalisiert werden.
Die vielen YES/NO Felder sind sehr beliebt beim Anfänger, aber in einer DB eher unpraktisch.
Es ist bzgl. der Abfragen hier auch unnötig, für jeden Möglichkeit eine extra Abfrage zu bauen. Diese Abfrage hält man allgemeingültig und übergibt der Abfrage die gewünschten Kriterium (z.b. Bundesland Sachsen oder andere) oder man wendet auf Formularebene einen Filter an.
Üblicher Hinweis an dieser STelle -> Suchformular in 10 Minuten.
Bzgl. der Datensatzherkunft des Kombis (Bundesland) (da hab ich kurz draufgeschaut). du kannst nicht über "*" gruppieren, das gibt dir auch eine Fehlermeldung aus.
Wenn du das Formular "Bearbeiten zulassen" auf Nein stehen hast, wie im Beispiel, dann kannst du in den Kombis nichts auswählen.
Außerdem heißt dein KOmbinationsfeld nicht "Kombi" sondern cboBL
Das zweite Kombi, da stimmt auch eigentlich nix.
Erstens willst du hier filtern und nicht zu einem Datensatz springen:
also .FindFirst führt nicht zum Ziel.
Zudem vergleichst du Äpfel mit Birnen..
| Code: | | rs.FindFirst "[ID] = " & Str(Nz(Me![cboBER], 0)) | Du sagst mit dieser Zeile: Springe zum dem Datensatz wo Übereinstimmung besteht zwischen der Id (numerisch) und dem ausgewählten Beraternamen im KOmbinationsfeld
Das führt erstens zur Typunverträglichkeit zwischen Text und Zahl und desweiteren nie zu einem Ergebnis, da ein "Apfel" niemals eine "Birne" sein kann
So wäre es korrekt:
| Code: | | rs.FindFirst "Beratername = '" & Nz(Me.cboBL, "") & "'" | Wobei du hier über Primärschlüssel suchen solltest/mußt. Was ist wenn du 2 Berater mit dem gleichen Nachnamen hast ?
Somit schließt sich wieder der Kreis mit dem Eingangshinweis, dass hier dringend das Tabellenkonzept zu überarbeiten ist.
Hiermal exemplarisch der Code für dein Kombi.
1.)ändere die Datensatzherkunft deines Kombis auf diese (also copy and paste)
| Code: | SELECT Bundesland
FROM BL_LK
GROUP BY Bundesland
ORDER BY Bundesland DESC; | 2.) Code hinter dem AfterUpdate-Ereignis
| Code: | Private Sub cboBL_AfterUpdate()
Me.Filter = "Bundesland='" & Me.cboBL & "'" ' 1. Spalte!
Me.FilterOn = True
End Sub | 3.)Formular ´Bearbeiten zulassen ' auf "JA" stellen.
Zumindest funktioniert so die Filterung, unbenommen der Hinweise, die DB neu aufzubauen
|
|
obroa
Anfänger
Verfasst am: 21. Jan 2010, 14:55 Rufname:
|
|
| Version: Office 2003 |
|
Hallo Marmeladenglas,
herzlichen Dank für Deine schnelle Hilfe! Die Filter funktionieren für beide Kombifelder jetzt korrekt.
Kann ich die beiden Filter jetzt auch noch miteinander kombinieren, sprich dass wenn ich nach Bundesland gefiltert habe und auch noch den Berater auswähle wirklich nur dieser Berater bei diesem Bundeland angezeigt wird?
Bei Verwendung der Codes
| Code: | Private Sub cboBER_AfterUpdate()
Me.Filter = "Beratername='" & Me.cboBER & "'" ' 1. Spalte!
Me.FilterOn = True
End Sub
Private Sub cboBL_AfterUpdate()
Me.Filter = "Bundesland='" & Me.cboBL & "'" ' 1. Spalte!
Me.FilterOn = True
End Sub | löscht der eine Filter nämlich jeweils den anderen!
Natürlich hast Du Recht, die Struktur der DB ist nicht so toll und führt zu doppelter Datenhaltung. Ich habe anfänglich auch versucht, mit Beziehungen zwischen Haupt- und Nebentabellen zu arbeiten und die Zuordnung dann über Abfragen zu lösen, hatte jedoch leider nicht wirklich Erfolg damit...
Da die DB aber am Ende nicht mehr als ca. 300 Datensätze enthalten soll, habe ich die Redundanz in Kauf genommen. Wenn ich mit dem Studium von Access weiter fortgeschritten bin, kann ich es ja noch mal neu angehen - aber bis dahin wird es so gehen müssen...
Nochmals besten Dank und freundliche Grüße
obroa
|
|
Marmeladenglas
komme zurecht
Verfasst am: 22. Jan 2010, 10:17 Rufname:
|
|
| Version: Office 2003 |
|
Hi,
wie gesagt widme Dich dem Beitrag:
Suchformular in 10 Minuten
Hier wird eine Routine zur Verfügung gestellt über mehrere Kriterien einen Filter zu setzen.
ABER lese dich in Normalisierung ein, Beziehung (1:n, n:m, 1:1 (eher selten)), Primär- u. Fremdschlüssel und bringe das Tabellenkonzept in Ordnung. Das halte ich für viel wichtiger.
|
|
obroa
Anfänger
Verfasst am: 26. Jan 2010, 14:02 Rufname:
|
| |
| Version: Office 2003 |
|
... vielen Dank noch mal an Marmeladenglas für die Hilfe!
Ich habe jetzt eine Variante gefunden, mit der sich beide Kombifelder (oder auch mehr als zwei) gleichzeitig filtern lassen:
| Code: | Private Sub cboBL_AfterUpdate()
Dim sKrit As String
sKrit = ""
If Nz(Me![cboBL], "") <> "" Then
sKrit = sKrit & " AND Bundesland = '" & Me![cboBL] & "'"
End If
If Nz(Me![cboBER], "") <> "" Then
sKrit = sKrit & " AND Beratername = '" & Me![cboBER] & "'"
End If
If sKrit <> "" Then
sKrit = Mid(sKrit, 5)
End If
Me.Filter = sKrit
Me.FilterOn = True
End Sub |
Das gleiche dann noch mal für cboBER_AfterUpdate() eingegeben führt für beide Kombifelder zum gewünschten Ergebnis.
Beste Grüße
obroa
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
| |

|
|
| Verwandte Themen |
| Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Access Hilfe: Fließtext (Feld) nach mehreren Begriffen (Liste) durchsuchen |
7 |
spaboleo |
288 |
08. Jul 2010, 05:20 dropdown_2404  |
 |
Access Hilfe: Zwischen 2 Formularen Datumspanne und Suchbegriff filtern |
0 |
rosie2000 |
112 |
02. Jun 2009, 20:56 rosie2000  |
 |
Access Formulare: Sortieren und anschließendes Filtern verursacht Fehler |
4 |
Insanctus |
324 |
25. Feb 2009, 11:15 Insanctus  |
 |
Access Hilfe: Datenzugriffsseite als Endlosformular |
3 |
alexko65 |
726 |
31. Jul 2008, 09:39 alexko65  |
 |
Access Formulare: Filtern bricht ab - Datentypproblem? |
4 |
friedrichshain |
204 |
14. Apr 2008, 00:30 Willi Wipp  |
 |
Access Formulare: Durch Wert in Kombifeld neue Kombifelder einblenden |
22 |
jonnyb2006 |
935 |
24. Okt 2007, 23:28 jonnyb2006  |
 |
Access Formulare: Endlosformular, letzte Zeile! |
2 |
kaydin |
318 |
09. Aug 2007, 12:07 Gast  |
 |
Access Berichte: Daten aus Endlosformular in Bericht übernehmen |
32 |
Spirit -X- |
1939 |
12. März 2007, 15:55 Willi Wipp  |
 |
Access Formulare: Wie setze ich eine Liste auf Leer? |
2 |
Elldel |
305 |
30. Jan 2007, 15:52 Gast  |
 |
Access Formulare: Access Endlosformular |
4 |
Gast1 |
2983 |
27. Okt 2006, 14:09 Gast  |
 |
Access Formulare: Filtern erzeugt neuen Datensatz |
4 |
Holy Mentor |
1115 |
02. Okt 2006, 18:28 Nouba  |
 |
Access Formulare: Endlosformular: Zeilen zweifarbig |
1 |
EnTaroAdun |
3711 |
05. Jun 2006, 19:09 EnTaroAdun  |
| |
|