Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Parameterabfrage - Nach mehreren Selektionen filtern

Begonnen von Ltblue, Mai 26, 2011, 12:48:11

⏪ vorheriges - nächstes ⏩

Ltblue

Hallo!
Hätt da mal ne (hoffentlich einfache) Frage.

In meiner Datenbank gibt es Personen, denen man mehrere Selektionen zuweisen kann, zB:


Es ist ja kein Problem alle "LEHRER" herauszufiltern...


...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! :)


Ltblue

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.

DF6GL

#3
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

oma

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
nichts ist fertig!

Ltblue

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?

DF6GL

#6
Hallo,

cbln sollte heißen: CBool

(convert to boolean)

Ltblue

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? ^^

DF6GL

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 

Ltblue

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... :(

DF6GL

Hallo,
poste mal den Code....


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


Wie angedeutet, das Ganze ist nur ungetester Luft-Code..

Ltblue

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.


Ltblue

#13
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.