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! :)
Hallo,
nimm mal den "OR"-Operator....
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.
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
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
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?
Hallo,
cbln sollte heißen: CBool
(convert to boolean)
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? ^^
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
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... :(
Hallo,
poste mal den Code....
und: versuch auch mal, das "= true" wegzulassen.
Wie angedeutet, das Ganze ist nur ungetester Luft-Code..
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.
Hallo,
mhmm, kann nicht mehr dazu jetzt sagen..
Lad mal Deine DB hier hoch...
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.
so.. jetzt nur mehr mit testdaten: http://uploading.com/files/52d653f3/Adressdatenbank.rar/
Hallo,
die DB ist bei mir mit A2007 nicht zu öffnen...
hey
mdb:
http://uploading.com/files/4c413955/Adressdatenbank.mdb/
Hallo,
es liegt nicht am DB-Format , diese mdb ist genau so wenig mit irgendeiner Access-Version zu öffnen...
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
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.
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/
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.
;)
hey
höö, stimmt.. danke! ::)
[Anhang gelöscht durch Administrator]
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"
jap, das funktiniert. aber wieder nur beim oder und nicht beim und. :D
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]