5.4k Aufrufe
Gefragt in Datenbanken von tinka2307 Einsteiger_in (39 Punkte)
Hallo zusammen,
ich habe eine Frage bzgl Suchfunktionen in Access ...

Ich habe ein Formula, in dem ich unterschiedliche Kriterien angeben kann und dann
per Knopfdruck in einem Unterformula eine Liste aller Ergebnisse bekomme die den
Kriterien entsprechen (Liste/Unterformula stammt aus einer Abfrage)

Wie bekomme ich es hin, dass per Knopfdruck die Kriterienauswahlen in die Query
übernommen werden???

Tausend Dank für eure Hilfe

15 Antworten

0 Punkte
Beantwortet von marie Experte (2k Punkte)
www.access-tutorial.de/abfragen/kriterien.htm schau mal hier, ich denke das hilft Dir weiter

Gruß marie
0 Punkte
Beantwortet von tinka2307 Einsteiger_in (39 Punkte)
Danke Marie,

leider hilft mir das allerdings nicht weiter, bzw. dieses Abfrage-Filter
Funktion kenn ich ...

1) Ich habe 12 unterschiedliche Abfragen, z.B. *Adresse*, *Postleitzahl*,
*Stadt*, *kundennamen*
Ich hätte gerne all diese unterschiedlichen Abfragen auf EINEM
Formular, also nicht mit aufeinander folgende Fragen-Fenster

2) sobald ich deine Variante anwende, bekomme ich bei mehr als 4
Filtern kein Ergebnis mehr .....


Hat noch jemand eine Idee`???

Lieben Dank für die Hilfe!
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
hallo tinka,

sollen die Kriterien per "oder" oder per "und" verknüpft werden? Willst du die Datenbasis für das Uf setzen oder nur ein Filter einstellen?

Gruß Ralf
0 Punkte
Beantwortet von tinka2307 Einsteiger_in (39 Punkte)
Hallo Ralf,
es soll eine UND-Verknüpfung sein!

Danke für deine Hilfe
0 Punkte
Beantwortet von tinka2307 Einsteiger_in (39 Punkte)
Ralf, vielleicht um es noch mal deutlicher zu erklären :

Ich hab ein Hauptfenster, indem meine Kriterien angegeben werden
können
- *straße*
- *investorenname*
- Gebäudegröße zwischen x und y Quadratmeter
- Investitionsgröße zwischen a und b Millionen €
- etc.

Außerdem einen Button "Suche alle Gebäude, die den angegebenen
Kriterien entsprechen (UND-Verknüpfung, d.h. ALLE Kriterien
müssen übereinstimmen)

Auf dem gleichen Formula habe ich ein Unterformula (subform),
indem eine Liste ausgegeben wird mit den Ergebnissen.

ich habe einen Code geschrieben um die unterschiedlichen
Kriterien zu überprüfen.
Diesen Filter-Code wollte ich nun an den Button knüpfen, meine Idee
war:
Me.T4_SearchSubform = "Select * from T4_SearchForm" &
BuildFilter

mit
T4_SearchSubform => Ergebnisliste (Unterformula)
T4_SearchForm => Kriterienauswahlformula (Hauptformula)
BuildFilter => Code für Filter

Ist mein Code vollkommen falsch oder hast du ne Idee wie ich es
einfach gestalten kann?


TAUSEND DANK FÜR DEINE HILFE!!!! Muss diese komische
Datenbank bis nächste Woche fertig haben und verzweifel gerade
ziemlich :)

Lieben Dank!
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Tinka,

dein Hauptformular ist ungebunden, also keine Datensatzquelle hinterlegt (hoffe ich). Du hast also ungebundene Felder, nennen wir sie

- straße
- investorenname
- min_qm und max_qm für das Feld Gebäudegröße
- EuroVon und EuroBis für das Feld Investitionsgröße

Falls du mit den Sternchen "*" ein Ähnlichkeit andeuten willst, benötige ich die Info. Ich nehme mal für den Namen des Unterformulars (im Hauptformular, also nicht der Name des Formualrs selbst) "uf" an, dann würde ich im Klick-Ereignis des Buttons folgenden Code einfügen:

Dim s As String
Dim krit As String

krit = ""
If Not IsNull(Me!Straße) Then
krit = krit & IIf(krit = "", "", " AND ") & "Straße = '" & Me!Straße & "'"
End If
If Not IsNull(Me!investorenname) Then
krit = krit & IIf(krit = "", "", " AND ") & "investorenname = '" & Me!investorenname & "'"
End If
If Not IsNull(Me!EuroVon_qm) And Not IsNull(Me!EuroBis) Then
krit = krit & IIf(krit = "", "", " AND ") & "Gebäudegröße between " & me!min_qm & " AND " & me!max_qm
End If
If Not IsNull(Me!min_qm) And Not IsNull(Me!max_qm) Then
krit = krit & IIf(krit = "", "", " AND ") & "Investitionsgröße between " & me!EuroVon & " AND " & me!EuroBis
End If
Me!uf.Form.Filter = krit
Me!uf.Form.FilterOn = Len(krit) > 0

Die qm und die Euro sollten ganze Zahlen sein, sonst word es komplizierter. Falls du Datumsangaben drin hast ,uss man ebenfalls umformatieren. Ich habe die in dieser Form schon oft verwendet und das klappt prima.
Probiere es aus und melde dich.

Gruß
Ralf
0 Punkte
Beantwortet von tinka2307 Einsteiger_in (39 Punkte)
Super Ralf, das klappt ganz wunderbar!!!!! Könnte gerade Luftsprünge vor Freude machen :)

Um es aber doch noch ein bisschen komplizierter zu machen: wie kann ich die Formel umschreiben damit es bei
manchen Kriterien wie z.B. bei dem Straßennamen "Ähnlichkeitssternchen" mit berücksichtigt, d.h. also die
Schreibweise nur teilweise stimmen muss?

Außerdem habe ich noch Combo-Boxen und Check-Boxen - reicht es auch wenn ich deine Formel folgend umschreibe:

If Not IsNull(Me!ComboNutzung) Then
krit = krit & IIf(krit = "", "", " AND ") & "Gebäudenutzung = '" & Me!ComboNutzung & "'"
End If

If Not IsNull(Me!CheckZumVerkauf) Then
krit = krit & IIf(krit = "", "", " AND ") & "ZumVerkauf = '" & Me!CheckZumVerkauf & "'"
End If

Tausend Dank für deine super Hilfe!!!
0 Punkte
Beantwortet von tinka2307 Einsteiger_in (39 Punkte)
... dass es nicht mit einem "einfachen" Umschreiben möglich ist hab ich ürbigens gemerkt :) :) :)

Kannst du mir sagen bzw. erklären was ich ändern muss?

Lieben Dank!
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Tinka,

schön, dass der Ansatz deine Wünsche getroffen hat. Hier noch ein paar Tipps zu deine weiteren Fragen. (Ich habe die zwei Kriterien in den letzten beiden If-Staements vertauscht, sorry.)

Ähnlichkeitssuche:
Da gibt es zwei Wege:
1. Der Anwender gibt z.B. "*straße" in das Suchfeld ein, dann brauchst du in dem betreffenden Krit-String das "=" nur durch ein "like" ersetzen. So kann der Anwender differenziert mit "*" und "?" nach beliebigen Zeichenkette suchen.
2. Für den Anwender ist das zu kopliziert, dann kannst du das im Krit-String selbst nachbilden mit : "...."Straße like '*" & Me!Straße & "*'"

Combobox und Checkbox:
Da hier nur eine Wertauswahl erlaubt ist, ist das kein Problem. Solltest du eine ListBox haben mit Mehrfachauswahl, geht das auch, wird nur ein wenig komplizierter.

Datumsangaben (falls du das mal brauchst)
Beim Datum gibt es ein Spezialfall, da musst du den krit-String folgendermaßen aufbauen:
krit = krit & IIf(krit = "", "", " AND ") & "Datumsfeld= #" & format(Me!Datum, "mm\/dd\/yyyy") & "#"
Das geht auch mit der between-Konstruktion für von-bis-Werte.

von-bis-Werte:
Falls der Anwender nicht beide Werte eingeben möchte, weil er nur einen kennt, kannst du das auch erschlagen mit einer folgenden Konstruktion:

If Not IsNull(Me!min_qm) And Not IsNull(Me!max_qm) Then
krit = krit & IIf(krit = "", "", " AND ") & "Gebäudegröße between " & me!min_qm & " AND " & me!max_qm
else
if Not IsNull(Me!min_qm) then
krit = krit & IIf(krit = "", "", " AND ") & "Gebäudegröße >= " & me!min_qm
end if
if Not IsNull(Me!max_qm) then
krit = krit & IIf(krit = "", "", " AND ") & "Gebäudegröße <= " & me!max_qm
end if
end if


Gruß
Ralf
0 Punkte
Beantwortet von tinka2307 Einsteiger_in (39 Punkte)
Perfekt - meine Abfragen mit *Sternchen* funktionieren, meine Comboboxen auch!!! Und das ganze löst wirklich
Begeisterung bei mir aus :) :)

Allerdings habe ich immer noch Probleme mit meinen "von-bis" Werten und Check-Boxen und ich versteh nicht
warum. Bei beiden wird der Run-time Error 2448 ausgegeben "You can't assign a value to this object." Und beim
Debuggen wird als Fehler ganz am Ende von meinem Code die folgende Zeile angegeben:
Me!uf.Form.Filter = krit


Vielleicht erkennst du ja was in meinem Code falsch ist:

Dim s As String
Dim krit As String


'Check if Asset For Sale
If Not IsNull(Me.CheckForSale) Then
krit = krit & IIf(krit = "", "", " AND ") & "[Asset for Sale] = '" & Me!CheckForSale & "'"
End If


'Check for Investment Volume
If Not IsNull(Me!TextInvestmentMini) And Not IsNull(Me!TextInvestmentMax) Then
krit = krit & IIf(krit = "", "", " AND ") & "[Valuation Price] " & Me!TextInvestmentMini & " AND " & Me!TextInvestmentMax
Else

If Not IsNull(Me!TextInvestmentMini) Then
krit = krit & IIf(krit = "", "", " AND ") & "[Valuation Price] >= " & Me!TextInvestmentMini
End If

If Not IsNull(Me!TextInvestmentMax) Then
krit = krit & IIf(krit = "", "", " AND ") & "[Valuation Price] <= " & Me!TextInvestmentMax
End If

End If

Me!T4_SearchSubform.Form.Filter = krit
Me!T4_SearchSubform.Form.FilterOn = Len(krit) > 0

End Sub


Danke dass du mir nocheinmal hilfst!!! Mittlerweile macht es wirklich total Spaß so eine Datenbank zu schreiben,
aber ohne deine Hilfe wäre es längst nicht so toll!!!!
...