Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: NB-Andy am November 11, 2010, 12:34:03

Titel: Filterschreibweise für Abfragekriterium
Beitrag von: NB-Andy am November 11, 2010, 12:34:03
Hallo Zusammen,

habe ein kleines Problem mit Filter-Schreibweise.
Aufgabenstellung:
Um unterschiedliche Filter bei Aktualisierungen bequem anpassen zu können, habe ein Formular erstellt. Dort beschreibe ich eine Tabelle in der Spalte Filter mit dem entsprechenden Text. Schränke diese Tabelle dann auf diesen Datensatz ein und führe anschließend eine Datenaktualisierung durch. Dabei wende ich diese Filter in der ,,Standardaktualisierung" an, indem er unter Kriterium folgendermaßen eingetragen ist:
Wie [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filter]
Hintergedanke ist dabei, den Filter bequem und relativ übersichtlich anzupassen und diesen Text dann 1:1 in der Abfrage zu verwenden. Ursprünglich dachte ich, ist einfach: Text vorgeben, so wie ich ihn eintragen würde und alles schick, aber siehe Bsp. Unten:
Funktionieren tut es, solange es sich um nur einen Parameter handelt. Sprich:
Zu filternde Abfragespalte enthält ausschließlich den Wert: test
Spalte Vorgabe-Filter : test
Dann werden mir die Datensätze angezeigt.

Ich möchte aber auch folgenden Vorgabe-Filter: test*
um Datensätze zu filtern, welche: test oder test1 oder test2 enthalten, um sie zur Anzeige/Aktualisierung zu bekommen.
Ich glaube dann wäre ich schon ein Stück weiter, wenn ich die richtige Schreibweise wüsste. Habe schon ausprobiert: test* / test% / ,,test*" / ,test*' -> alles ohne Erfolg.
Weiterführend möchte ich dann halt noch Filter realisieren wie:
Wie "*test*" oder Wie "*typ*"
Nicht Wie "*Funktion*" Und Nicht Wie "*Mess*"

Jemand eine Idee? Danke Andy

per VBA wollte ich nicht so viel machen (wenn möglich)
Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: Jonny am November 11, 2010, 12:51:25
Hallo Andy,
der Filter ist schon richtig aber mit den * versuch mal folgendes:
Wie & "*" [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filter] & "*"
Das sollte bei der Eingabe Test als Ergebnis aTestb, TestA, ATest usw. finden.

Gruß

Johann
Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: NB-Andy am November 11, 2010, 13:13:27
Hallo Jonny,

leider kommt mit deiner Variante: " Dieser Ausdruck wurde falsche eingegeben, oder er ist zu komplex, um ausgewertet zu werden....Vereinfachen sie den Ausdruck, indem Sie Teile des Ausdruck Variablen zuweisen."

Außerdem würde er dann ja nur bezogen auf *test* gefiltert werden. Ich wollte ja den eigentlichen Filtertext schön in Tabelle schreiben, klicken und der Filter aktualisiert sich immer schön...

Gibt es vielleicht einen Zusatz, welcher mein:
[Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filter]
1:1 in das Kriterium übernimmt?
(Dann hätte man ja keine Probleme, da der Filter dann komplett abgebildet wird.)
Parallel dazu habe ich mal den Filter als Wert geschrieben und da hat er den gleichen Inhalt als Daten geschrieben.

Gruß Andy
Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: DF6GL am November 11, 2010, 13:50:23
Hallo,

der &-Operator steht falsch:


Wie "*" &  [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filter] & "*"


Und btw:  Reservierte Wörter (--->"Filter") als Objektnamen DRINGEND vermeiden!!



Aber so ganz genau verstanden habe ich nicht,  wo die Filter-Ausdrücke (Where-Conditions) stehen und wie und wo diese Ausdrücke nun als Kriteriums-Ausdrücke verwendet werden.


Wenn die Kriteriumsausdrücke in einer Tabellespalte hinterlegt sind, dann sind (in dieser Konstellation) dort keine eingebetteten Vergleichs/Verknüpfungs-Operatoren (And, =, Or, Is)  möglich .


Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: Jonny am November 11, 2010, 13:58:55
Hallo
sorry für den Schreibfehler mit dem &

Ich habe das so verstanden das in ein Formular ein Feld für die Filtereingabe vorhanden ist.
Der Filter selber steht in eine Abfrage die dann ausgeführt wird.

Gruß

Johann
Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: DF6GL am November 11, 2010, 14:03:19
Hallo,

ok, soll heißen, Du verweist im Abfrage-Kriteriumsfeld auf ein Formular-Textfeld.


Es gilt nach wie vor mein Hinweis auf die Operator-Problematik.

(was mittels VBA leicht zu lösen wäre  ;)  )
Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: NB-Andy am November 11, 2010, 14:21:42
Hallo Franz,

werde das ganze gleich umarbeiten und "Filter" als Begrifflichkeit ändern.

Deiner letzter Satz baut mich nicht unbedingt auf...
Ich muss wiederkehrend neue und geänderte Daten in eine Mastertabelle anfügen oder aktualisieren. Das unter bestimmten Kriterien.
Dazu wollte ich mir die Arbeit erleichtern und habe ein Formular erstellt. Dieses ist mit der Tabelle Filterwerte und entsprechenden Button für Anfüge-und Aktualisierungsabfragen.
In der Tabelle Filterwerte habe ich mehrere Datensätze in dne Spalten ID // Filterwert:
ID:1 // Filterwert:test*
ID:2 // Filterwert:wie "test*" oder wie "*typ*"
ID:3 // Filterwert:test
....
in den Abfragen (ganz normal, nicht vba), trage ich dann als Where-Conditions:
[Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filterwert]
ein und hatte gehofft, das demensprechend:
wie "Funk*" oder wie "*typ*"
angeben wird und mir die Abfrage entsprechend meine Daten filtert.

Das Beispiel ID:3 // Filterwert:test -> zeigt auch alle Datensätze mit Test an.
Das Beispiel ID:2 // Filterwert:wie "test*" oder wie "*typ*" -> zeigt keine Datensätze an.

ALso scheint er die Kriteriumausdrück bzw. schon Platzhalterzeichen wie * nicht mit zu übernehmen? Was ändern um das mir die Filterwerte von der Tabelle in die Where-Conditions der Abfragen richtig übernommen werden?

Gruß Andy
Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: Jonny am November 11, 2010, 14:45:39
Hallo Andy
jetzt verstehe ich besser.
wenn das WIE mit im Feld steht ist es so als wenn du manuell im Kriterium die Eingabe machst:
"Wie Test*"
da kann nichts rumkommen da es keinen DS gibt in dem der Feldinhalt gleich Wie Test* ist.
Kriterien ohne Vergleichsoperant vergleichen immer mit =
Schreib bei Kriterien zuerst das Wort wie dann dein Feldname mit form usw. dadurch ersetzt du das
nicht sichbare = durch wie.

Gruß
Johann
Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: DF6GL am November 11, 2010, 14:50:56
Hallo,

tja, kann da nichts machen, weil access der "Abbauer" ist...


Der Kriteriumsausdruck [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filterwert] verweist auf ein Textfeld "Filterwert" im UFO "_Filtervorgaben_Datenbl"
Damit wir der Inhalt von "Filterwert" als reiner Text an das Abfrage-Kriteriumsfeld übergeben
Enthält dieser Text "Operatoren" (WIE, ODER, UND, =) , so werden die nicht als solche erkannt, sondern sind für Access halt irgendwelche Zeichen, irgendwelcher Text)


Den Text

wie "test*" oder wie "*typ*"  


sieht Access genau so unverändert ,d. h. als String:

"   wie "test*" oder wie "*typ*"    "

(Achtung: Syntaktisch falsch, das erste und letzte Gänsefüßchen soll nur andeuten, daß es sich insgesamt um einen String (Text) und nicht um SQL-Sprachelemente handelt.

obwohl der aber so lauten müßte:

wie "test*"  oder wie  "*typ*"



Einzig das Sternchen wird als Bestandteil des Textes als Platzhalter erkannt.  Wenn das Kriterium aufgedröselt direkt im Kriteriumsfeld eingetragen wird, ist es ja auch als Text in Gänsefüße eingeschlossen.

Sowas geht:

Inhalt im Textfeld "Filterwert":

*test*

Kriteriumsfeld:

Wie [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filterwert]


Infolgedessen könnte man zwei Kriterien aber mit zwei Textfeldern erledigen:

Wie [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filterwert1] Oder Wie  [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filterwert2]  



um evtl. Fehelr bei Nullwerten in den Filterwert-Feldern zu umgehen, kann man die Sternchen auch fest im Kriteriumsfeld angeben:

Wie   [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filterwert1] & "*"   Oder Wie  [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filterwert2] & "*"  


Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: NB-Andy am November 11, 2010, 14:55:25
ihr seid ja schon wieder schneller...
trotzdem erstmal:

An Johann:

Wenn ich dich richtig verstanden haben...habe ich schon probiert. Geht leider auch nicht.
Filterwert: test*
Where Condition:
Wie [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filterwert]
-> keine Werte... leider


An Franz,

ja "VBA" habe ich auch schon probiert.
Schaue mit Kombifeld auf die Tabelle Filtervorgaben Spalte ID und aktualisiere ein Listenfeld [Filtervorgabe].[Filterwert] mittels

Private Sub ID_Change()

       Me!Filterwert.Requery
       
     
End Sub

und unter Datenherkunftsatz des Listenfeldes:
SELECT [Filtervorgaben].[Filterwert] FROM Filtervorgaben WHERE ([Filtervorgaben].ID=forms!Bedienen_Aktualisierungen!ID);

Dann bekomme ich im Formular die richtigen Werte angezeigt und auch immer aktualisiert. Dieses Listenfeld habe ich dann ebenfalls in die Where Conditions der Abfrage eingetragen.
Funktionierte leider auch nicht, hatte aber scheinbar auch die Ursache, das der Werte nicht fest in dem Listenfeld eingetragen wird. Zumindest haben das Test ergeben, wo ich einfach die das Listenfeld in eine Abfrage reischreibe...und dieses Feld dann leer blieb. Im Netz habe das dann auch so gelesen...

Mit Recordsets bin ich leider nicht so klar gekommen. Bin relativ neu in diesem Thema, nutzte viel Beispiele und passe sie dann an, aber da stoße ich dann leider an Grenzen...

Gruß Andy
Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: DF6GL am November 11, 2010, 15:01:15
Hallo,

was Du unter VBA hier verstehst, ist noch nicht viel VBA, bzw. der VBA-Code elimiert nicht die Tatsache, dass Du Dich im Kriterium auf ein Form-Textfeld beziehst, dessen Inhalt eben neben dem Vergleichstest auch Operatoren beinhaltet.

Insofern gilt das eben Gesagte...


Es muß der gesamte SQL-String dynamisch mit VBA zusammengesetzt werden, so dass in ihm gleich die VergleichsWERTE enthalten sind und nicht mehr die Textfeld-Verweise...
Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: NB-Andy am November 11, 2010, 15:09:00
Hallo Franz,

ja, ich weiß...Recordset ging noch mehr in Richtung VBA-Fragmente und dann kommt langsam das "nicht mehr nachvollziebar" und da muss ich mich halt erst mal rantasten.
Somit bin ich damit wohl in der Sackgasse gelandet. Werde die Tabelle nur noch als "Kopiervorlage" und den Text direkt in die Where Conditions eintragen. Hatte gehofft das es einen Befehl:

TrageNichtAlsTextSondernAlsConditionsein: [Formulare]![Bedienen_Aktualisierungen]![_Filtervorgaben_Datenbl].[Form]![Filterwert]

und alles ist schick.

Natürlich trotzdem vielen Dank, weil man lernt ja trotzdem, auch wenn ich viel Zeit verwendet habe, weil man ja doch erst im Web sucht...

Gruß Andreas
Titel: Re: Filterschreibweise für Abfragekriterium
Beitrag von: NB-Andy am November 11, 2010, 18:51:44
Hallo Franz,

ich habe noch mal drüber nachgedacht. Würde es etwas ändern, wenn ich in einer kleinen Sub-function den Inhalte in Abhänigkeit der Auswahl (Filter per Kombifeld oder aus eingebundener Tabelle) per VBA auslese, dort Quasi den Text ausbereite und zurückschreibe?

Wie könnte ich dann zurückschreiben. Auf ein bestimmtes Feld im Formular oder direkt in die WhereConditions der Abfrage?

Oder ist es dazu notwendig die gesamte Aktualisierung in VBA durchzuführen? Das wird ungleich komplizierter, weil noch andere kleine Filter ebenfalls  gesetzt und geändert werden müssen und ich mit meinen "Übernahme und Anpassen" von Beispielen dann wahrscheinlich am Ende bin.

Kann sein, das es jetzt länger dauert, bis ich mich melde. Danke.
Gruß Andreas