Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Access berichte filter





Frage

Moin leutz folgende Grundlage: Ich muss in Access sowohl ein Formular erstellen, welches mir jeden Datensatz ausliest und mit dem ich neue erstellen kann. Zudem muss ich in einem Bericht die ganze Adressliste darstellen. Soweit so gut, alles kein Problem, jetzt selbiges: Ich muss diesen bericht so filtern, dass nur gewünschte Datensätze dargestellt werden. Das heisst der User kann in einem Formular eingeben, welche Datensätze er will, zum bsp alle aus Zürich. Diese Datensätze müssen nun alle in einem Bericht angezeigt werden, welcher zum drucken bereitgestellt wird. Kann mir da wer helfen?

Antwort 1 von Teddy7

Beim Aufruf eines Berichts kann man Selektionskriterien mitgeben. Man baut also ein Formular, auf dem man die Kriterien in ungebundenen Feldern erfassen kann und legt einen Befehlsbutton an mit diesem Code in Klick-Ereignis:

Dim suche As String
if not isnull(SOrt) and SOrt <> "" and SOrt <> " " then
suche = "Ort = ´" & SOrt & "´"
endif
DoCmd.OpenReport "repÜbersicht", acViewPreview, , suche

Dabei sei SOrt das ungebundene Selektionsfeld für den Ort und das entsprechende Feld in der Datenquelle des Berichts sei Ort.
Auf diese Art kann man mehrere Felder abfragen.
Die Selektionsvariable sieht zum Schluss aus wie eine where-Klausel (ohne where).
Achtung: Textfelder in Hochkommas setzen

Gruß
Teddy

Antwort 2 von Kjatar

Ist das auch so möglich, dass ich in einer dropdownliste einen Feldnamen auswählen könnte, und den zugehörigen Filterwert. Nach bestätigung könnte ich zudem weitere Filterkriterien auswählen, habe ich das richtig verstanden?

Antwort 3 von Teddy7

nein - das wäre zu umständlich.
Das ungebundene Feld kann natürlich ein Kombifeld sein.
Man kann auch 2 Felder machen und von/bis eingeben.
Oder man macht ein Listfeld mit Mehrfach-Auswahl - das muß man aber dann per VBA-Programmierung auch entsprechend abfragen und in das Selektionsfeld übertragen. Für Programmierer kein größeres Problem *g*.

Oder man stellt mehrere Auswahlfelder für das gleiche Datenfeld zur Verfügung (SOrt1 , SOrt2 , ..)

Gruß
Teddy

Antwort 4 von Kjatar

Sorry, bin noch recht neu in access, von daher versteh ich dich grad absolut net...
was das programmieren angeht, bin informatik lehrling, sollte das also verstehen

Kjatar

Antwort 5 von Teddy7

was genau verstehst Du denn nicht ?
Kombifeld und Listfeld müßten doch ein Begriff sein, oder ?

Antwort 6 von Kjatar

Das schon, ich versteh nicht, wie das ganze zu verknüpfen wäre...

allerdings wär ich noch auf ne andere idee gekommen, und zwar dass einfach alle gewünschte datensätze (im formular einzeln auswählbar) ausgewählt werden, und diese dann im bericht dargestellt... wäre glaub ich mal eifnacher, net?
wenn ja, wie wär das zu lösen? also das portieren in den berich?

Antwort 7 von Teddy7

Das ist nur dann einfacher, wenn es eine überschaubare Menge an klicks (zum auswählen) für den Anwender sind.
Die Übergabe an den Bericht erfolgt über die gleiche Technik. Du bräuchtest ein Endlosformular mit Mehrfachselektion und mußt dann bei auslösen des Berichts alle markierten Sätze des Formulars bestimmen, ODER Du machst die Markierung der Sätze so, das Du ein zusätzliches Feld im Datensatz hast, das bei Markierung auf true gesetzt wird. Dann kannst Du in der Abfrage, die die Datenquelle des Berichts ist, einfach als Kriterium "Markierungsfeld = true" festlegen.
Ich bin Profi-Programmierer und mache die Markierungslösung sehr selten und wenn dann mit der 2. Möglichkeit.
Flexibler ist die Lösung mit den mehreren Selektionsfeldern oder dem auslesen des Listfelds.
Beispiel:
////////////////////////
Listenfeld abarbeiten:

Dim i As Long, strListe As String, varFirst As Boolean, n As Long
´Überprüfung ob Auswahl in ListSerienbrief vorhanden ist
If Not IsNull(Me(Listenfeldname).Column(0)) Then
´Anzahl der ausgewählten Zeilen feststellen
n = Me(Listenfeldname).ListCount - 1
´Zeilen durchlaufen und Werte der ersten Spalte in kommagetrennte Zeichenfolge schreiben
For i = 0 To n
If Me(Listenfeldname).Selected(i) Then
If Not varFirst Then
strListe = strListe & Me(Listenfeldname).Column(0, i)
Else
strListe = strListe & "," & Me(Listenfeldname).Column(0, i)
End If
varFirst = True
End If
Next
If strListe <> "" Then
suche = "Ort in (" & strListe & ")"
End If
////////////
Bei Textfeldern um Hochkommas ergänzen !!!

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: