![]() |
MS Access Abfrage
Hallo!
Habe folgendes Problem: Ich möchte in einer Videofilm - Datenbank eine Abfrage nach Schauspielern erstellen (nach Titel, Regisseur, etc. klappt es bereits)! Das Problem: ich habe bis zu 15 Spalten mit Schauspielern - möchte aber nur einmal den Schauspielernamen eingeben und dann in allen Spalten suchen lassen! Ich verwende bei der Entwrufsansicht des Abfrageassistenten immer folgenden Eintrag in der Kriterienzeile: [Filme]![Schauspieler:] Die Datenbank heißt Filme, die Spalten heißen Schauspieler1, Schauspieler2, usw. Leider bekomme ich bei dieser Art der Abfrage immer nur die Schauspieler, welche auch in der ersten Spalte sind - von der 2., 3. od. einer weiteren Spalte bekomme ich kein Ergebniss zurück! Kann mir da jemand von euch weiterhelfen? Ich bin mir sicher, dass das funktionieren muss, aber wie?? Vielen Dank! mr_sax |
wieso machst ned eine einzige spalte mit schauspieler und suchst dann mit LIKE?
|
Hi!
Die Konstruktion der DB solltest du vielleich überdenken. Im aktuellen Fall versuch folgendes. Öffne die Abfrage in der SQL-Ansicht. Da sollte etwas in der Art stehen WHERE Schauspieler1 = Schauspieler Erweitere den Abschnitt mit OR Schauspieler2 = Schauspieler OR ... Falls es nicht funktioniert, poste das SQL-Statement. mfg WB |
wbendl
sei mir bitte ned böse aber des ja ja keine abfrage mehr des is ein zustand wenn er alle schauspieler in ein feld reinschreibt und dann mit like abfragt is er sicher besser dran oder? PS: kann jetzt auch sein das ich mich irgentwo irre da ich ja noch rest alk in mir hab lol |
@ Nightman
Achte auf die 1. Zeile: Die Konstruktion der DB solltest du vielleich überdenken. Der Rest zählt nur, wenn das nicht zu ändern ist. Die Verwendung des Assistenen läßt mich auf einen Einsteiger schließen. Da kann man kein optimales DB-Design erwarten. mfg WB |
ok erlaubnis erteilt :)
|
OK - vielen Dank für die vielen Antworten!
Ich werde gleich einmal die Sache mit der LIKE Funktion probieren! (d.h. alle Schauspieler in eine Zelle schreiben) Melde mich dann wieder mit dem Ergebnis! mr_sax |
Sorry, aber es ist meine "erste Datenbank" und irgendwie krieg ich das nicht hin!
1. Frage: wie sollen die Schauspieler in der jeweiligen Zelle von einander getrennt sein, z.B. mit ","? 2. Frage: hier ist die SQL Zeile: SELECT Filme.[Deutscher Titel], Filme.[Original Titel], Filme.Regie, Filme.Format, Filme.Sprache, Filme.Schauspieler1, Filme.Schauspieler2, Filme.Schauspieler3, Filme.Schauspieler4, Filme.Schauspieler5, Filme.Schauspieler6, Filme.Schauspieler7, Filme.Schauspieler8, Filme.Schauspieler9, Filme.Schauspieler10, Filme.Schauspieler11, Filme.Schauspieler12, Filme.Schauspieler13, Filme.Schauspieler14, Filme.Schauspieler15 FROM Filme WHERE (((Filme.Schauspieler1)=[Filme]![Schauspieler1]![Schauspieler:])); Könnt ihr damit etwas anfangen, bzw. mir einen Tipp geben, was mir "zu meinem Glück" fehlt? Vielen Dank! mr_sax |
Hi!
Ich weiß zwar nicht, wie der Suchbegriff in die Abfrage kommt. Ich nehme an, daß [Filme]![Schauspieler1]![Schauspieler:] aus einem Formular, oder aus einer Parameterabfrage stammt. Wenn das SQL-Statement so funktioniert, sollte die Erweiterung so aussehen: WHERE (((Filme.Schauspieler1)=[Filme]![Schauspieler1]![Schauspieler:])OR ((Filme.Schauspieler2)=[Filme]![Schauspieler1]![Schauspieler:])) Einfacher zu Handhaben ist die Lösung mit allen Schauspielern in einem Feld. Die "professionelle" Lösung würde ungefähr so aussehen: Tabelle Filme ID Titel OriginalTitel ....... Tabelle Schauspieler ID Name ........ Tabelle FilmDetails ID FilmeID SchauspielerID Die Tabelle FilmDetails enthält eine Zeile für jeden Schauspieler pro Film. Das ist zwar am Anfang mehr Arbeit, lohnt sich aber später. Die Pflege und Auswertung der Daten wird erleichtert. Redundante Einträge werden vermieden. Außerdem läßt sich die DB leichter erweitern (z. B. zusätzliche Daten zu den Schauspielern). Wenn man diese "Normalisierung" weiter betreibt, könnte man auch Regie und Formate in eigenen Tabellen auslagern. Das rentiert sich ab eine gewissen Größe der DB. mfg WB |
Vielen Dank für diese detailierte Antwort!
Ich werde das morgen ausprobieren und hoffe, dass ich das auch so hinkriege! mr_sax |
Hallo nochmals!
Leider reicht mein Verständnis nicht aus, um dieses Problem zu lösen! Ich habe jetzt zwei Tabellen gemacht - eine mit ID, Titel, Original Titel, Format und Sprache und eine zweite mit ID und Schauspieler (alle pro Film in einem Feld). Die SQL - Ansicht sieht folgendermaßen aus: SELECT Filme.ID, Filme.Titel, Filme.Originaltitel, Filme.Regie, Filme.Format, Schauspieler.Schauspieler FROM Filme INNER JOIN Schauspieler ON Filme.ID = Schauspieler.ID WHERE ((([Filme].[Schauspieler]) Like [Schauspieler])); Und es funktioniert immer noch nicht! Ein weiterer verzweifelter Hilferuf: kann mir da jemand weiterhelfen? Vielen Dank im voraus! mr_sax |
Hi!
Da ist anscheinend einiges schief gelaufen. Wenn du mein System verwendest, sind mindestens 3 Tabellen notwendig. Die Aufteilung, die du jetzt hast bringt garnichts. Da wäre alles in einer Tabelle besser. Außerdem verknüpfst du die Tabellen über Felder, die keinen Bezug zueinander haben. Mir ist auch nicht wirklich klar, welches Ergebnis du von deiner Abfrage erwartest, und wie ein Suchbegriff oder Filterkriterium an die Abfrage übergeben wird. Vorstellen könnte ich mir 2 Abfragen: 1. Alle Schauspieler zu einem Film 2. Alle Filme, in denen ein bestimmter Schauspieler mitspielt Mit 3 Tabellen sollte sich das ohne VBA machen lassen mfg WB |
Ich würde das folgendermaßen lösen:
Tabelle Filme - FilmID - Titel - ... Tabelle Schauspieler - ActorID - Name - ... Tabelle FilmSchauspieler - FilmID - ActorID Damit kannst du ganz einfach für jeden Film beliebig viele Schauspieler einfügen. Mit folgender Abfrage kannst du diese dann selektieren: SELECT Filme.Titel, Schauspieler.Name FROM Schauspieler INNER JOIN (Filme INNER JOIN FilmSchauspieler ON Filme.FilmID = FilmSchauspieler.FilmID) ON Schauspieler.ActorID = FilmSchauspieler.ActorID; Vielleicht hilfts weiter! Grüße, Hussl |
Danke vorerst für die geduldige Hilfe!
Leider habe ich erneut ein kleines Problem: in der Tabelle FilmSchauspieler steht FilmID und ActorID. Was soll dann da genau stehen? Die Zahlen 1, 2, 3 etc. oder die richtigen Titel? Und was soll bei ActorID stehen? Ebenfalls die Zahlen, oder die Namen der Schauspieler? Ich habe beide Varianten versucht, jedesmal bekomme ich bei der Abfrage die Fehlermeldung: Im Ausdruck stimmt ein Datentyp nicht überein! Wie gesagt, danke für eure Unterstützung! lg mr_sax |
Hi!
In den meisten Fällen ist ID eine Zahl. Am einfachsten verwendest du den als Typ Autowert. Dann vergibt Access automatisch eine ID. Bei Feldern, die mit dieser ID korrespondieren, muß der Typ Long Integer sein. Hier mußt du den entsprechenden Wert händisch eintragen. Ich schick dir ein kleines Beispiel. Damit ist es leichter zu verstehen, wie die Tabellen aussehen. Der Komfort liegt erst in den entsprechenden Ein- und Ausgabe-Formularen und Berichten. mfg WB |
Alle Zeitangaben in WEZ +2. Es ist jetzt 02:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag