Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Ltblue am Mai 26, 2011, 12:48:11

Titel: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am Mai 26, 2011, 12:48:11
Hallo!
Hätt da mal ne (hoffentlich einfache) Frage.

In meiner Datenbank gibt es Personen, denen man mehrere Selektionen zuweisen kann, zB:
(http://i570.photobucket.com/albums/ss142/freakyLtblue/Access/AdressDB%2026%20Mai/PersMitSel.jpg?t=1306396681)

Es ist ja kein Problem alle "LEHRER" herauszufiltern...
(http://i570.photobucket.com/albums/ss142/freakyLtblue/Access/AdressDB%2026%20Mai/Abfrage.jpg?t=1306396931)

...jedoch möchte ich alle Personen haben, die die Selektionen "LEHRER", "SPÖ" und "EDV" haben. Also es müssen alle drei Selektionen zutreffen um den Datensatz anzuzeigen.

Wie muss denn da meine Parameterabfrage aussehen? Ich checks irgendwie nicht ganz. ::) Bei mir zeigts dann immer nen leeren Bericht an, wenn ich die Abfragen mit nem Und-Operator verknüpfe..

Bitte, danke! :)
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am Mai 26, 2011, 15:06:20
Hallo,

nimm mal den "OR"-Operator....
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am Mai 26, 2011, 15:42:57
Naja, mit nem "OR"-Opterator funktionierts ansich schon, nur werden mir halt alle Datensätze angezeigt, die "LEHRER", "SPÖ" oder "EDV" als Selektierung haben. Ich will aber, dass es mir nur diejenigen anzeigt, die "LEHRER", "SPÖ" und "EDV" haben..  :-\ Das sind natürlich ne Menge weniger Datensätze.
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am Mai 26, 2011, 16:57:10
Hallo,


Luft-SQl:

Select * from tblPerson where
CBool(Select Count(*)  from tblSelektionen as tmp Where  Selektion = [Bitte Selektion 1 eingeben]    and  tmp.[Personen ID] = tblPerson.[Personen ID] )  and
CBool(Select Count(*)  from tblSelektionen as tmp1 Where  Selektion = [Bitte Selektion 2 eingeben]    and  tmp1.[Personen ID] = tblPerson.[Personen ID] )  and
CBool(Select Count(*)  from tblSelektionen as tmp2 Where  Selektion = [Bitte Selektion 3 eingeben]    and  tmp2.[Personen ID] = tblPerson.[Personen ID] ) =true
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: oma am Mai 26, 2011, 17:18:16
Hallo,

ich würde solche benutzerunfreundliche Parameterabfragen gar nicht erst verwenden, sondern ein Formular benutzen, in dem du die gesuchten Selektionen einträgst u. ein SQL-Statement dynamisch mit diesen zusammensetzt.

SELECT PersonenID, Nachname, Vorname...
FROM DeineAbfrage
WHERE Selektion In ("Lehrer","SPÖ", "EDV")
GROUP BY PersonenID
HAVING Count(Selektion)=3


Gruß Oma
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am Juni 06, 2011, 10:03:00
Zitat von: oma am Mai 26, 2011, 17:18:16
ich würde solche benutzerunfreundliche Parameterabfragen gar nicht erst verwenden, sondern ein Formular benutzen, in dem du die gesuchten Selektionen einträgst u. ein SQL-Statement dynamisch mit diesen zusammensetzt.
stimmt, wär wahrscheinlich schöner, aber hab jetzt alles mit parameterabfragen gemacht, jetzt mach ichs bei dem auch so. will nicht mehr alles ändern...

@DF6GL: funktioniert ich auch ned ganz.. :/ was ist denn dieses cbln?
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am Juni 06, 2011, 10:10:30
Hallo,

cbln sollte heißen: CBool

(convert to boolean)
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am Juni 06, 2011, 10:45:30
hey

ok... aber leider: "Microsoft Access funktioniert nicht mehr."

ist sowiso komisch, wenn ich meine abfrage dann in der sql anischt öffne sieht der code so aus:

SELECT tbPerson.[Personen ID], tbPerson.Anrede, tbPerson.Vorname, tbPerson.Zuname, tbPerson.Firma, tbSelektionen.Selektion
FROM tbPerson INNER JOIN tbSelektionen ON tbPerson.[Personen ID] = tbSelektionen.[Personen ID]
WHERE (((CBool())<>False) AND (((Select Count(*)  from tbSelektionen as tmp2 Where  Selektion = [Bitte Selektion 3 eingeben] and  tmp2.[Personen ID] = tblPerson.[Personen ID] ))=True));


ist das normal, dass access das umschreibt? ^^
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am Juni 06, 2011, 12:41:09
Hallo,

noch'n Versuch:



SELECT tbPerson.[Personen ID], tbPerson.Anrede, tbPerson.Vorname, tbPerson.Zuname, tbPerson.Firma, tbSelektionen.Selektion
FROM tbPerson INNER JOIN tbSelektionen ON tbPerson.[Personen ID] = tbSelektionen.[Personen ID]
WHERE
(
CBool(Select Count(*)  from tblSelektionen as tmp Where  Selektion = [Bitte Selektion 1 eingeben]    and  tmp.[Personen ID] = tblPerson.[Personen ID] )  and
CBool(Select Count(*)  from tblSelektionen as tmp1 Where  Selektion = [Bitte Selektion 2 eingeben]    and  tmp1.[Personen ID] = tblPerson.[Personen ID] )  and
CBool(Select Count(*)  from tblSelektionen as tmp2 Where  Selektion = [Bitte Selektion 3 eingeben]    and  tmp2.[Personen ID] = tblPerson.[Personen ID] )   
) =true
Datum/Zeit: Mai 26, 2011, 15:42:57Autor: Ltblue 
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am Juni 06, 2011, 13:10:12
hallo

hmm... jedes mal wenn ich den button drück, der die abfrage ausführt, stürzt mir das komplette access ab!? keine ahnung warum oder wieso... :(
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am Juni 06, 2011, 13:32:18
Hallo,
poste mal den Code....


und:  versuch auch mal, das "= true" wegzulassen.


Wie angedeutet, das Ganze ist nur ungetester Luft-Code..
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am Juni 06, 2011, 14:06:42
hi

SELECT tbPerson.[Personen ID], tbPerson.Anrede, tbPerson.Vorname, tbPerson.Zuname, tbPerson.Firma, tbSelektionen.Selektion
FROM tbPerson INNER JOIN tbSelektionen ON tbPerson.[Personen ID] = tbSelektionen.[Personen ID]
WHERE (
CBool(Select Count(*)  from tbSelektionen as tmp Where  Selektion = [Bitte Selektion 1 eingeben]    and  tmp.[Personen ID] = tblPerson.[Personen ID] )  and
CBool(Select Count(*)  from tbSelektionen as tmp1 Where  Selektion = [Bitte Selektion 2 eingeben]    and  tmp1.[Personen ID] = tblPerson.[Personen ID] )  and
CBool(Select Count(*)  from tbSelektionen as tmp2 Where  Selektion = [Bitte Selektion 3 eingeben]    and  tmp2.[Personen ID] = tblPerson.[Personen ID] )   
)=true;


ich kenn mich leider noch nicht so gut aus bei access.. sql hab ich mir nur mal son paar grundbegriffe angesehen usw. deswegen tu ich mir da auch noch n bissl schwer fehler zu finden usw. aber ich hab mir schon mal das handbuch bestellt, hoffentlich klappts dann besser.. ;D

das "=true" hab ich auch versucht wegzulassen, gleicher fehler.
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am Juni 06, 2011, 14:20:07
Hallo,

mhmm,  kann nicht mehr dazu jetzt sagen..

Lad mal Deine DB hier hoch...
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am Juni 06, 2011, 14:31:50
jup... :)
is nämlich die wichtigste funktion der datenbank und das einzige was nicht hinhaut.  ::)

hab den link rausgegeben und per pm geschickt.. muss nicht jeder die daten sehen.
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am Juni 08, 2011, 11:14:31
so.. jetzt nur mehr mit testdaten: http://uploading.com/files/52d653f3/Adressdatenbank.rar/
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am Juni 08, 2011, 13:54:03
Hallo,

die DB ist bei mir mit A2007 nicht zu öffnen...
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am Juni 08, 2011, 16:21:03
hey

mdb:
http://uploading.com/files/4c413955/Adressdatenbank.mdb/
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am Juni 08, 2011, 21:07:52
Hallo,

es liegt nicht am DB-Format , diese mdb ist genau so wenig mit irgendeiner Access-Version zu öffnen...
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am Juli 27, 2011, 12:06:08
Hallo!
Tut mir leid, dass ich mich jetzt Ewigkeiten nicht gemeldet hab. Aber mir ist n anders Projekt und n Urlaub dazwischengekommen.
Ich hab da jetzt mal ne abgespeckte Version nachgebastelt. Allerding funktioniert da jetzt nicht mal mehr die Oder-Abfrage, obwohl sie genau gleich wie in der accdb ist.  ???

http://www.filefactory.com/file/cc92687/n/Adressdatenbank.mdb
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am Juli 27, 2011, 12:52:48
Hallo,

was funktioniert nicht?

was gibst Du als "Selektion" ein?

Vermutlich sitzt den unglückseligen Nachschlagefeldern (Kombifeldern in Tabellen) auf. Wirf die mal überall(!) heraus und bau danach die Abfragen nochmal neu auf.
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am August 16, 2011, 14:44:30
Hi!
Naja, in der Datenbank kann man Personen quasi in Kategorien einteilen. Zum Beispiel kann man Person A die Kategorien (Selektionen) "AHS", "SPÖ" und auch mehr zuweisen.

Ich will jetzt abfragen, welche Personen die Kategorien "AHS", "SPÖ" oder "BFI" haben. (oder "AK LEITER", das waren jetzt nur Beispiele)
Weiters will ich auch wissen, welche Personen die Kategorien "AHS" und "SPÖ" haben.

Mit nem "Und" und nem "Oder" Button wollte ich dann einfach zB 3 Parameterabfragen erstellen, wo man dann nacheinander die Selektionen eingibt. Also die Abkürzungen > zb "AHS", "SPÖ" usw

Glaubst das man da gar nicht suchen kann danach, wenn das Kombi Felder sind?

http://uploading.com/files/3a625f6a/Adressdatenbank.mdb/
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: database am August 16, 2011, 15:45:44
Hallo,

@Ltblue
Wenn du deine DB komprimierst und reparierst und sie danach zippst, kannst du sie ohne Probleme hier direkt hochladen.
Das Zip-File hat dann die gigantische Größe von 47KB.

Du erparst uns damit die leidige Wartezeit auf diesen seltsamen Up- und Downloadservern.

;)
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am August 18, 2011, 09:40:45
hey
höö, stimmt.. danke!  ::)

[Anhang gelöscht durch Administrator]
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am August 18, 2011, 11:33:26
Hallo,


Zitat
Vermutlich sitzt den unglückseligen Nachschlagefeldern (Kombifeldern in Tabellen) auf. Wirf die mal überall(!) heraus und bau danach die Abfragen nochmal neu auf.

wirf die Nachschlagefelder aus der/den Tabelle/n heraus.

Ändere in tbl_Selektionen  den Datentyp von Feld "Selektion" auf Zahl/Long.  Stelle eine Beziehung her zwischen tbl_Selektionen und Selektionen.

Erweitere die Abfragen um Tabelle "Selektionen" und setz die Kriterienparameter für Spalte "Selektionsliste"
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: Ltblue am August 25, 2011, 14:40:33
jap, das funktiniert. aber wieder nur beim oder und nicht beim und. :D
Titel: Re: Parameterabfrage - Nach mehreren Selektionen filtern
Beitrag von: DF6GL am August 25, 2011, 15:11:12
HAllo,


hier ein Beispiel:







SELECT tblPersonen.PName, Count(tblPersonen.PName) AS AnzahlvonPName
FROM tblPersonen INNER JOIN tblSelektionen ON tblPersonen.PID = tblSelektionen.S_PID
WHERE (((tblSelektionen.SBez)="AOK")) OR (((tblSelektionen.SBez)="SED"))
GROUP BY tblPersonen.PName
HAVING (((Count(tblPersonen.PName))=2));


[Anhang gelöscht durch Administrator]