Neuigkeiten:

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

Mobiles Hauptmenü

Thumbnail in Suche mit anzeigen lassen ....

Begonnen von derilzemer, Oktober 25, 2015, 10:10:00

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo,
vorab, ich nutze Access 2013 64 Bit, accdb Format.
Ich habe mit wirklich freundlicher Unterstützung von 2 Forenmitglieder ab Q2 hier eine wirklich sehr funktionale Sammlungs-DB erstellen können.
Jetzt habe ich wieder mal eine Anforderung, welche mir in den Kopf gekommen ist. Es geht dabei um eine Erweiterung meines Suchformulars. Grundsätzlich konnte ich das in der Vergangenheit auch selbstständig durchführen. Nun habe ich aber aufgrund des DB-Konstruktes eine Eigenheit, welche ich nicht händeln kann. Grob formuliert ist es so, dass ich mit beim Anzeigen der gefundenen Datensätze ein Thumbnail mit anzeigen lassen will, da es für mich hilfreich ist beim schnelleren erkennen des Gegenstandes (sofern es viele Datensätze gibt im Suchergebnis).
Die DB Beziehungen sehen so aus http://quartettportal.de/bilder/db-Bez_25102015.png
Das Suchformular ist wie folgt aufgebaut:
http://quartettportal.de/bilder/suche-Bez_25102015.png
Die SQL Anweisung im Formular dazu ist
SELECT tblSpiele.SpielID, tblVerlag.Verlag, tblSpiele.SpielNr, tblSpiele.SpTitel, tblSerien.Serie, tblKategorie.Kategorie, tblSpiele.Ausgabejahr, tblSpiele.Preis, tblHaendler.VerkNn
FROM tblVerlag RIGHT JOIN (tblSerien RIGHT JOIN (tblKategorie RIGHT JOIN (tblHaendler RIGHT JOIN tblSpiele ON tblHaendler.HaendlerID = tblSpiele.HaendlerID_F) ON tblKategorie.KategorieID = tblSpiele.KategorieID_F) ON tblSerien.SerieID = tblSpiele.SerieID_F) ON tblVerlag.VerlagID = tblSpiele.VerlagID_F
WHERE (((Nz([tblVerlag].[Verlag])) Like "*" & [Formulare]![frmQuartettSuche]![cboVerlagSuche] & "*") AND ((Nz([tblSpiele].[SpielNr])) Like "*" & [Formulare]![frmQuartettSuche]![txtSpieleNr] & "*") AND ((Nz([tblSpiele].[SpTitel])) Like "*" & [Formulare]![frmQuartettSuche]![txtSpielTitel] & "*") AND ((Nz([tblSerien].[Serie])) Like "*" & [Formulare]![frmQuartettSuche]![cboSerienSuche] & "*") AND ((Nz([tblKategorie].[Kategorie])) Like "*" & [Formulare]![frmQuartettSuche]![cboKategorieSuche] & "*") AND ((Nz([tblSpiele].[Ausgabejahr])) Like "*" & [Formulare]![frmQuartettSuche]![txtAusgabejahr] & "*") AND ((Nz([tblSpiele].[Preis])) Like "*" & [Formulare]![frmQuartettSuche]![txtPreisFilter] & "*") AND ((Nz([tblHaendler].[VerkNn])) Like "*" & [Formulare]![frmQuartettSuche]![txtHaendler] & "*"))
ORDER BY tblSpiele.SpielNr;

Wenn ich nun die Tabelle tblBilderZuSpiel zum Suchformular hinzufüge,
http://quartettportal.de/bilder/suche-Bez_Bild_25102015.png
dann habe ich adhoc 1589 Datensätze mehr im Suchergebnis. Ich denke mal das hängt mit der Beziehung zur Spiel-ID zusammen. Wie kann/muss ich so etwas händeln.
Für einen Hinweis wäre ich dankbar.

Gruß Andreas
Grüße und Dank im voraus
Andreas

el_gomero

Hallo Andreas,

hab deinen Beitrag nur kurz überflogen und mir die Bilder der Abfragen angesehen. Danach hast du referentielle Integrität eingestellt. Gut so. Warum dann aber Left, bzw Right-Joins? Und wenn müssten die andersherum sein. Damit zB alle DS aus tblSpiele angezeigt werden, auch wenn keine Referenz zu tblVerlag besteht. Vllt hilft der Hinweis dein Problem zu lösen, kann mich heute nicht länger damit befassen.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

derilzemer

Hi,
also Vorgeschichte muss sich noch sagen, dass die Suche erst einmal ohne das hinzufügen der tblBilderZuSpiel korrekt funktioniert, alles Datensätze gefunden werden, wenn kein Kriterium festgelegt wird. Left und right join waren nötig, weil ich Tabellenfelder in der tblspiele ohne Befüllung habe. Daraufhin wurden Datensätze mit diesem Thema nicht gefunden und so wurde das gelöst. Ich hoffe die Aussage stimmt so, ist schon ein paar Tage her. Aber ist das left oder right join der Auslöser, dass 1589 Datensätze mehr gefunden werden?
Gruß
Andreas
Grüße und Dank im voraus
Andreas

MaggieMay

Hi Andreas,
ZitatLeft und right join waren nötig, weil ich Tabellenfelder in der tblspiele ohne Befüllung habe.
welche sind das genau, betrifft das alle Felder? Gibt es ein Spiel ohne Verlag, Kategorie, etc.?

Zeig doch bitte auch noch den SQL-Code mit der tblSpiele.

Wenn das eine 1:n-Beziehung ist, bekommst du natürlich alle Spiele so oft wie es Bilder dazu gibt, das ist dir klar?
Freundliche Grüße
MaggieMay

derilzemer

Hi,
es ist mir nicht klar gewesen, aber jetzt schon :(.
Umstand ist ja, dass die Suche ohne Kriterien erst einmal alle Datensätze auflistet, 2290 Stück.
Jetzt will ich einfach in der Suche auch ein Feld hinten anstellen, welches mir das Bild als Thumb (das Deckblatt des Spieles) mit anzeigt. In der Tat hat ein Spiel unter Umständen n Bilder hinterlegt. Ich benötige nur das Bild mit der Kennung _db.png oder _db.jpg, das ist das Deckblatt. Und ja, es gibt natürlich Spiele ohne Verlag. Das war ja der Hintergrund für die joins und NZ in der qryQuartettSuche, welche du mir ja dankenswerter weise optimiert hast.
Eine SQL-Code zur tblSpiele wie zur Suche kann ich nicht liefern, weil das keiner ist :(. Wenn du dich erinnerst, hast du damals auf diverse querys umgestellt. Von daher weiß ich nicht, welche du sehen willst was den SQL Code angeht :(.
Ich habe dir mal ein Bild der Querys eingestellt http://quartettportal.de/bilder/querys.png. Es gibt zumindest keine was die tblSpiele angeht, sorry.
Gruß Andreas
Grüße und Dank im voraus
Andreas

el_gomero

Hallo,

Zitat
Jetzt will ich einfach in der Suche auch ein Feld hinten anstellen, welches mir das Bild als Thumb (das Deckblatt des Spieles) mit anzeigt. In der Tat hat ein Spiel unter Umständen n Bilder hinterlegt.

Dann schreib unter Kriterium beim Feld mit dem Bild


like "*_db.*"

damit filterst du nur die Deckblätter.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

MaggieMay

Hi,
Zitat von: derilzemer am Oktober 26, 2015, 18:54:02SQL-Code zur tblSpiele wie zur Suche kann ich nicht liefern, weil das keiner ist
meine Frage bezog sich auf diese Aussage:
ZitatWenn ich nun die Tabelle tblBilderZuSpiel zum Suchformular hinzufüge, [...] dann habe ich adhoc 1589 Datensätze mehr im Suchergebnis.
also muss es doch eine Abfrage geben, welche diese Datensätze ausspuckt.

Und bei dieser Abfrage kannst du dann das von "el_gomero" vorgeschlagene Kriterium einsetzen.
Freundliche Grüße
MaggieMay

derilzemer

Hi,
erst einmal waren die Hinweise für mich Zielführend gewesen. Wegen dem SQL Code hatte ich schon bei der Threaderöffnung angehängt, was die Suche angeht:
SQL Code qryQuartettSuche:
SELECT tblSpiele.SpielID, tblVerlag.Verlag, tblSpiele.SpielNr, tblSpiele.SpTitel, tblSerien.Serie, tblKategorie.Kategorie, tblSpiele.Ausgabejahr, tblSpiele.Preis, tblHaendler.VerkNn
FROM tblVerlag RIGHT JOIN (tblSerien RIGHT JOIN (tblKategorie RIGHT JOIN (tblHaendler RIGHT JOIN tblSpiele ON tblHaendler.HaendlerID = tblSpiele.HaendlerID_F) ON tblKategorie.KategorieID = tblSpiele.KategorieID_F) ON tblSerien.SerieID = tblSpiele.SerieID_F) ON tblVerlag.VerlagID = tblSpiele.VerlagID_F
WHERE (((Nz([tblVerlag].[Verlag])) Like "*" & [Formulare]![frmQuartettSuche]![cboVerlagSuche] & "*") AND ((Nz([tblSpiele].[SpielNr])) Like "*" & [Formulare]![frmQuartettSuche]![txtSpieleNr] & "*") AND ((Nz([tblSpiele].[SpTitel])) Like "*" & [Formulare]![frmQuartettSuche]![txtSpielTitel] & "*") AND ((Nz([tblSerien].[Serie])) Like "*" & [Formulare]![frmQuartettSuche]![cboSerienSuche] & "*") AND ((Nz([tblKategorie].[Kategorie])) Like "*" & [Formulare]![frmQuartettSuche]![cboKategorieSuche] & "*") AND ((Nz([tblSpiele].[Ausgabejahr])) Like "*" & [Formulare]![frmQuartettSuche]![txtAusgabejahr] & "*") AND ((Nz([tblSpiele].[Preis])) Like "*" & [Formulare]![frmQuartettSuche]![txtPreisFilter] & "*") AND ((Nz([tblHaendler].[VerkNn])) Like "*" & [Formulare]![frmQuartettSuche]![txtHaendler] & "*"))
ORDER BY tblSpiele.SpielNr;


Aktuell sieht der so aus:
SELECT tblSpiele.SpielID, tblVerlag.Verlag, tblSpiele.SpielNr, tblSpiele.SpTitel, tblSerien.Serie, tblKategorie.Kategorie, tblSpiele.Ausgabejahr, tblSpiele.Preis, tblHaendler.VerkNn, tblBilderZuSpiel.BildDateiName
FROM tblVerlag RIGHT JOIN ((tblSerien RIGHT JOIN (tblKategorie RIGHT JOIN (tblHaendler RIGHT JOIN tblSpiele ON tblHaendler.HaendlerID = tblSpiele.HaendlerID_F) ON tblKategorie.KategorieID = tblSpiele.KategorieID_F) ON tblSerien.SerieID = tblSpiele.SerieID_F) [b]INNER JOIN tblBilderZuSpiel ON tblSpiele.SpielID = tblBilderZuSpiel.SpielID_F) [/b] ON tblVerlag.VerlagID = tblSpiele.VerlagID_F
[b]WHERE (((tblBilderZuSpiel.BildDateiName) Like "*_db.png")[/b] AND ((Nz([tblVerlag].[Verlag])) Like "*" & [Formulare]![frmQuartettSuche]![cboVerlagSuche] & "*") AND ((Nz([tblSpiele].[SpielNr])) Like "*" & [Formulare]![frmQuartettSuche]![txtSpieleNr] & "*") AND ((Nz([tblSpiele].[SpTitel])) Like "*" & [Formulare]![frmQuartettSuche]![txtSpielTitel] & "*") AND ((Nz([tblSerien].[Serie])) Like "*" & [Formulare]![frmQuartettSuche]![cboSerienSuche] & "*") AND ((Nz([tblKategorie].[Kategorie])) Like "*" & [Formulare]![frmQuartettSuche]![cboKategorieSuche] & "*") AND ((Nz([tblSpiele].[Ausgabejahr])) Like "*" & [Formulare]![frmQuartettSuche]![txtAusgabejahr] & "*") AND ((Nz([tblSpiele].[Preis])) Like "*" & [Formulare]![frmQuartettSuche]![txtPreisFilter] & "*") AND ((Nz([tblHaendler].[VerkNn])) Like "*" & [Formulare]![frmQuartettSuche]![txtHaendler] & "*"))
ORDER BY tblSpiele.SpielNr;


Wegen dem Kriterium habe ich wie von Jürgen angeraten gesetzt und habe noch einen "Schiefstand" von genau 200 zuviel was die gefundenen Datensätze angeht. Da bin ich gerade am prüfen warum. Deshalb muss ich erst schauen. Wenn es da noch nciht passt, dann melde ich mich noch einmal. Solange lass ich den Thread als offen stehen.

Gruß Andreas
Grüße und Dank im voraus
Andreas

derilzemer

Hallo,
okay ich habe umgebaut. Was genau habe ich jetzt gemacht:
Zuerst einmal habe ich das Problem mit dem Kriterium, welche Bilder suchen soll so gelöst, dass ich die tblBildmotive und tblBilderZuSpiel hinzugefügt http://quartettportal.de/bilder/suche-Bez_26102015.pngund die Spalte Bildmotiv geaddet habe. Dadurch habe ich ganz sicher nur Deckblätter. Der SQL-Code der qryQuartettsuche sieht aktuell so aus:
SELECT tblSpiele.SpielID, tblVerlag.Verlag, tblSpiele.SpielNr, tblSpiele.SpTitel, tblSerien.Serie, tblKategorie.Kategorie, tblSpiele.Ausgabejahr, tblSpiele.Preis, tblHaendler.VerkNn, tblBilderZuSpiel.BildDateiName, tblBildmotive.Bildmotiv
FROM tblVerlag RIGHT JOIN ((tblSerien RIGHT JOIN (tblKategorie RIGHT JOIN (tblHaendler RIGHT JOIN tblSpiele ON tblHaendler.HaendlerID = tblSpiele.HaendlerID_F) ON tblKategorie.KategorieID = tblSpiele.KategorieID_F) ON tblSerien.SerieID = tblSpiele.SerieID_F) INNER JOIN (tblBildmotive INNER JOIN tblBilderZuSpiel ON tblBildmotive.BildMotivID = tblBilderZuSpiel.BildmotivID_F) ON tblSpiele.SpielID = tblBilderZuSpiel.SpielID_F) ON tblVerlag.VerlagID = tblSpiele.VerlagID_F
WHERE (((tblBildmotive.Bildmotiv) Like "Deckblatt") AND ((Nz([tblVerlag].[Verlag])) Like "*" & [Formulare]![frmQuartettSuche]![cboVerlagSuche] & "*") AND ((Nz([tblSpiele].[SpielNr])) Like "*" & [Formulare]![frmQuartettSuche]![txtSpieleNr] & "*") AND ((Nz([tblSpiele].[SpTitel])) Like "*" & [Formulare]![frmQuartettSuche]![txtSpielTitel] & "*") AND ((Nz([tblSerien].[Serie])) Like "*" & [Formulare]![frmQuartettSuche]![cboSerienSuche] & "*") AND ((Nz([tblKategorie].[Kategorie])) Like "*" & [Formulare]![frmQuartettSuche]![cboKategorieSuche] & "*") AND ((Nz([tblSpiele].[Ausgabejahr])) Like "*" & [Formulare]![frmQuartettSuche]![txtAusgabejahr] & "*") AND ((Nz([tblSpiele].[Preis])) Like "*" & [Formulare]![frmQuartettSuche]![txtPreisFilter] & "*") AND ((Nz([tblHaendler].[VerkNn])) Like "*" & [Formulare]![frmQuartettSuche]![txtHaendler] & "*"))
ORDER BY tblSpiele.SpielNr;

Dann habe ich im frmQuartettSuche erst ein Feld hinzugefügt. Als Bezug/Steuerelement müsste ich doch hier eigentlich die Spalte aus tblBilderZuSpiel --> Feld BildDateiName verwenden. Darüber lege ich dann ein Bild, welcher als Steuerelement eigentlich auch BildDateiName haben müsste. Er zeigt aber nur den Bildnamen an und nicht das Bild selbst, weil, so mein ich zumindest, der vollständige Pfad zum Bild fehlt. Ist das so richtig wie ich denke oder liege ich da falsch Maggie? Ich frage deshalb Maggie, weil du die DB am besten kennst :(.

Gruß Andreas
Grüße und Dank im voraus
Andreas

MaggieMay

Ja, du brauchst stets den vollständigen Zugriffspfad, um ein Bild anzeigen zu können, und dafür hast du doch eine extra Tabelle, nicht wahr?
Freundliche Grüße
MaggieMay

derilzemer

Hallo,
okay dann lag ich da schon richtig. Es ist ja auch völlig i.O., dass du mich mit meiner Nase versuchst darauf hinzustoßen. Ja, für den Pfad habe ich eine Extra tbl. Ich habe auch versucht, das auf die Reihe zu bringen. In meinem Datenerfassungsformular habe ich ja das Thema in Gebrauch und fast als Example.
=DomWert("BilderPfad";"tblBildPfad") & [cboIDVerlag].[Column](2) & "\"
Aber das bekomme ich hier nicht "zusammengeschustert", sonst hätte ich die Frage auch nicht gestellt :(.
Ich habe ja im Suchformular das Textfeld hinzugefügt, mit Steuerelementinhalt BildDateiName. Darüber ja das Bild, welches letztendlich von diesem Steuerelementinhalt bedient wird. Der Bildname wird aktuell auch aufgeführt. Wo ich jetzt aber die Information über den vollständigen Pfad unterbringe, total überfragt/Planlos. Ich habe zuerst gemeint, ich muss im Steuerelement auch =DomWert("BilderPfad";"tblBildPfad") & [tblVerlag].[Column](2) & "\" angepasst auf die Gegebenheiten unterbringen, aber dem ist nicht so. Wohin muss ich mich bewegen bzw. wo ist der Ansatz?
Gruß Andreas
Grüße und Dank im voraus
Andreas

MaggieMay

#11
Hallo Andreas,

um die Bilder der Deckblätter im Formular "frmQuartettSuche" anzeigen zu können,
brauchst du folgende Datenfelder in der Abfrage "qryQuartettSuche":
- tblVerlag.BilderOrdner
- tblBilderZuSpiel.BildDateiName
Den Bilderpfad holst du dir dazu per DLookUp aus der Tabelle "tblBildPfad".

Der Steuerelementinhalt des Bild-Steuerelementes sieht dann so aus:
=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [BildDateiName]

PS:
Der Ausdruck [cboIDVerlag].[Column](2)verweist auf die dritte Spalte des Kombifeldes "cboVerlag", die es jedoch gar nicht gibt.
Allerdings wäre das durchaus auch eine Möglichkeit, den Bilderordner über das Kombifeld bereitzustellen. Aber da die Tabelle ja eh schon in der Abfrage enthalten ist, kann der Ordner auch ebensogut aus der Abfrage geholt werden.

Edit:
In der ersten Codezeile fehlt vermutlich ein Backslash. Kann ich grad nicht überprüfen, aber wozu sonst stehen die Gänsefüßchen wohl da?
Freundliche Grüße
MaggieMay

derilzemer

Hi,
danke für den Hinweis. Ich habe das jetzt mal nachgebaut und es passt natürlich. Wegen [Column](2) das war mir soweit klar, nur dass er auf die 3 Spalte verweist, das hatte ich verdrängt, da ich immer die 0 vergesse :(.

Gruß Andreas
Grüße und Dank im voraus
Andreas