Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage für Vergleich von SpielKarten

Begonnen von derilzemer, Januar 19, 2017, 21:30:31

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo,
ich habe wahrscheinlich mal wieder eine "spezielle" Frage. Dazu habe ich eine DB hochgeladen, sowie die Bilderdaten, die man wahrscheinlich für das bessere verstehen des Zusammenhangs benötigt. Die DB hat knapp 4 MB, die Bilder rund 60 und stehen über folgende Links zum download bereit.
DB selbst (Format accdb) --> http://quartettportal.de/bilder/AccessOMania/QuartettDB.zip
Bilder --> http://quartettportal.de/bilder/AccessOMania/AccessDB.zip
Die DB habe ich "entschlackt" und nur mit den nötigsten Feature bestückt. Ebenso sind 6 Datensätze für das verproben integriert, wofür auch die Bilder nützlich sind. Den Bilderpfad kann man in der DB über den Commandbutton "Bilderpfad festlegen" oder direkt über das Formular frmBildPfad definieren. Dann will ich mal erklären wo mich der Schuh drückt bzw. ich nicht weiterkomme.
Wenn man auf der Menüseite --> "Quartett erfassen" geht, befindet man sich im frmErfassung. Hat man zuvor den Bilderpfad festgelegt, dann sollten dort auch gleich links ein Bild, das Deckblatt des Spieles angezeigt werden.
Im Detailbereich können grundlegende Spieldaten definiert werden, sowie über diverse UFO's erweiterte Informationen wie Bilder, Einzelquartettkarten, Varianten etc. Mir geht es speziell um das Thema Kartenvergleich! Egal in welchem Datensatz man sich befindet, kann man im unteren rechten Teil Einträge zu Quartetten des Spieles sehen. Pro Quartett 4 Karten, manchmal mit Nummer, manchmal nur mit Symbolnamen etc. 3 Spiele mit 8 Quartetten und 3 Spiele 9 Quartetten.
Klickt man jetzt z.B. auf eines der 4 befülltes Felder in der Spalte Q.-Kartenkz., so sollte sich das zugehörige Bild dafür öffnen. Aber wie erwähnt, dazu muss der Bildpfad definiert sein. ob er korrekt definiert ist, kann man auch im Erfassungsformular selbst in der Mitte sehen (siehe Bild1).
Da 6 Datensätze und die dazugehörigen Karten (204 Stück) integriert und erfasst sind, würde ich jetzt gerne Einzelkarten miteinander vergleichen. Über gehen wir über die Menüseite --> Spielkarten vergleichen oder direkt über das Formular frmKartenVergleich. Und jetzt geht es auch schon gleich los mit den Probs. Links oben kann man über das Feld Karten-Auswhal "suchen". Zum Kartenvergleichen sollte man jetzt z.B. Maserati eingeben. Dann kann man in Dropdown Menü ja diverse Karten zu Maserati sehen. Jetzt würde ich gerne Maserati Ghibli auswählen. Dann müssten rechts im Listenfeld alle Karten zu Maserati Ghibli aufgelistet werden. Ein Problem ist, dass ich nicht weiss, wie das Listenfeld lstKarten die Auswahl von cboKarten übernimmt und des weiteren, gibt es 2 Maserati Ghibli, eine Karte hat jedoch die Zusatzbezeichung 4900.
Das bedeutet, die Suche müsste sich auf das Wort Ghibli oder Maserati einschränken. Das Ziel ist, eine Begriff auswählen, z.B. Maserati, alle gefundenen Karten werden im Listenfeld aufgelistet, dann markiert man die zu vergleichenden Karten, z.B. Maserati Ghibli und Maserati Ghibli 4900 und er listet dann im ufKarten die Karte mit seinen Werten (sofern eingetragen) und das Bild dazu auf.
Wie es ungefähr aussieht, habe ich im Formular frmKartenVergleichFalsch demonstriert, aber da passt das ganze eben noch nicht, weil falsche Query etc. Aber man sieht, wie es ungefähr aussieht. Wer kann mich da unterstützen, wie man diesen komplexen Vorgang einbindet?

Grüße aus der Pfalz
Andreas
Grüße und Dank im voraus
Andreas

Lachtaube

Mit Access 2007 ist mir ein Einblick in die Tabelle Spiele nicht möglich, weshalb ich die Schilderungen leider nicht nachvollziehen kann.
Grüße von der (⌒▽⌒)

derilzemer

Hallo,
habe den Thread ergänzt, dass es sich bei der DB um eine im accdb Format handelt. Das ist wohl offensichtlich auch dein Problem, dass man die erst ab 2010 öffnen kann. In ein anderes Format konvertiere ich die nicht mehr.
Gruß Andreas
Grüße und Dank im voraus
Andreas

crystal

Hallo,

ein paar erste Tests haben folgendes ergeben (bezogen auf frmVergleich):
1. Du musst den zu suchenden Text in Gänsefüßchen klammern:

Private Sub cboKarten_AfterUpdate()
'    Me.ufKarten.Form.Filter = "True"
    lstKarten.RowSource = "SELECT DISTINCT q.SpielID, q.Kartenbezeichnung, q.QuartettKz & q.KartenNr AS Karte, q.SpielNr, q.Ausgabejahr " & _
                        "FROM qryKartenVergleich AS q " & _
                        "WHERE (((q.Kartenbezeichnung) = " & Chr(34) & cboKarten.Value & Chr(34) & ")) " & _
                        "ORDER BY 1;"

    Me.lstKarten.Requery
    'RowSource = "SELECT tblspiele.SpielID, tblQuKarten.Kartenbezeichnung, [QuartettKz] & [KartenNr] AS Karte, tblspiele.SpielNr, tblspiele.Ausgabejahr FROM tblspiele INNER JOIN (tblQuartette INNER JOIN tblQuKarten ON tblQuartette.QuartettID = tblQuKarten.QuartettID_F) ON tblspiele.SpielID = tblQuartette.SpielID_F"
End Sub

2. Die Abfrage für die CB "Karten-Auswahl" könnte einfach auch so lauten:
SELECT DISTINCT qryKartenVergleich.Kartenbezeichnung
FROM qryKartenVergleich;

2a. Dann wird übrigens KEIN Maserati gelistet.
3. qryKartenVergleich macht irgendwie Probleme: ohne "distinct" liefert sie doppelte DS - sie ist (durch die joins) "überdefiniert", eine einfache Abfrage der Tabelle, in der die Karten-Bezeichnung steht, würde m.E. ausreichen.
4. Wenn ich mit diesen Änderungen das Formular aufrufe, werden für einige Werte der CB im Listenfeld mehrere Einträge angezeigt.

Es ist nicht ganz einfach, da durchzusteigen...

lg erstmal
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

derilzemer

Hi Crystal,
danke erst mal dass du dich damit beschäftigst. Ich hatte "vergessen" zu sagen, dass ich die Vorlage von dem Feature SpielDuplikate abgekupfert habe und angepasst werden sollte. Deswegen werden wie dir schon aufgefallen ist, Werte doppelt gelistet! Dass er die Karte Maserati nicht findet liegt auch an dem geclonten Feature SpielDuplikate.
Ich dachte ja, dass man eigentlich die Kombi durch ein Textfeld ersetzt, wo man mit einem Keyword suchen kann. Mit dem Ergebnis über das Keyword-Textfeld sollte dann das Listenfeld lstKarten befüllt werden. Danach sollte es wie beim Feature Duplikat Vergleich gehen. Die entsprechende Karten markieren und die Daten werden dann im UFO ufkarten angezeigt und man kann schön vergleichen ob die Karten auch wirklich identisch sind oder ob etwa unterschiedliche Angaben vorliegen. Das Feature SpielDuplikate kannst du mal einsehen, damit du siehst wie der Ablauf ist. frmSpielDuplikate --> dann hast du im Kombi Spiel-Nummer nur die Möglichkeit II/86 auszuwählen, weil eben von den 6 Datensätzen nur die Nummer doppelt vorliegt! Im Listenfeld lstkarten werden dann 3 Datensätze aufgeführt. Jetzt klick die einfach mal an. Erneutes anklicken macht dann wieder einen deselect der ID
Das ist für mich das Problem, dass ich eben das Feature dupliziert habe, wrlchem aber ganz andere Eigenschaften zugrunde liegen, es sucht eben nur doppelte Spielnummern. Das ist bei den Karten ja ganz anders. Deswegen ist es auch verwirrend und die SELECTS sind komplett abstrus. Hilft das ein wenig Helligkeit ins dunkel zu bringen?

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

crystal

Hallo Andreas,

auf deine Frage
ZitatDeswegen ist es auch verwirrend und die SELECTS sind komplett abstrus. Hilft das ein wenig Helligkeit ins dunkel zu bringen?

Kann ich momentan nur antworten: Nö, nicht wirklich  :)

Ich kenne deine Applikation nicht und habe mich jetzt nur mit diesem einen Formular beschäftigt.

Vielleicht wäre es schon gut, wenn du alle "abstrusen" Abfragen, die ja aus einer ganz anderen Fragestellung entstanden sind, darauf reduzierst, was dich interessiert, nämlich
1. eine Liste der Karten-Bezeichnungen haben, aus der du auswählen kannst
2. anhand der Auswahl die Spiele anzeigen, in denen die Bez. vorkommt
3. die Spiele zu selektieren, die du vergleichen möchtest; da wäre vielleicht eine Funktionalität hilfreich, die dir erlaubt, in der Liste Zeilen mit "dem Vergleich zufügen" zu markieren und Details erst nach Klick auf einen Button "Jetzt vergleichen" anzuzeigen (nur eine Idee).

Wenn du statt der CB mit allen vorhandenen Karten-Bezeichnungen ein freies Textfeld benutzen willst, müsstest du die Abfrage noch durch LIKE "*" & <wert> & "*" ersetzen.

lg
crystal

PS: ich will gerne versuchen, mich da weiter einzuarbeiten, aber du kennst deine Anwendung viel besser und findest Lösungen vermutlich schneller, wenn du nur den ungefähr richtigen Weg siehst.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

derilzemer

Hi,
ja glaub ich dir was das Licht angeht :(. Ich bin aber Dacor was du sagst. Dass bei arbeiten mit Textfeld LIKE nötig ist war mir bekannt und schien mir erst auch mal nicht zu schwer. Dazu habe ich mir auch gut erklärte Beispiele angeschaut im Inet, die jedoch nur eine Tabelle als Grundlage haben https://www.youtube.com/watch?v=N0X8Hg-Sm6A&t=495s. Bei mir sind das mehrer Tabellen, da wird es mit dem Select für mich schwierig, da ich den Select einfach nicht hinbekomme, & hier [] da :(. Gibt es da einen "SELECT Bastlertool" im Inet?
Ich mache mal alle searches weg, versuche neu zu erstellen. Ich habe damit schon angefangen gehabt aber bin wie erwähnt gescheitert. Ich schau mal was ich so hin bekomme.

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

crystal

Hallo Andreas,

ein "Select-Bastler-Tool" gibt es ja in Access selbst, den Abfrage-Generator.

Mein Tipp an dich: make it stupid simple, d.h. beschränke dich bei Abfragen auf die wirklich nötigen Tabellen. Wenn du z.B. nur die Karten-Bezeichnungen selektieren möchtest, ist es egal, welche Tabellen mit derjenigen verknüpft sind, in der die Bezeichnung steht. Im Gegenteil: wenn du alle Joins zu anderen Tabellen mit berücksichtigst, erhälst du leicht doppelte und mehrfache Daten.

Wenn du nur wissen willst, bei welcher Karte "Maserati" als Bezeichnung eingetragen ist, brauchst du die Adresse der Quartett-Herstellers nicht (blödes Beispiel, zugegeben). Du brauchst nur die ID des Quartetts, in dem eine oder mehrere Karten mit der Bezeichnung "Maserati" vorhanden sind, also höchstens zwei Tabellen.

Du musst nicht für jede Abfrage das gesamte Datenmodell benutzen, oft reicht es wohl völlig aus, sich auf eine einzige Tabelle zu beziehen. Im Beispiel:
Hole aus der Tabelle Kartenbezeichnungen alle Karten mit der Bezeichnung "Maserati". Erst wenn du noch zusätzlich z.B. Hersteller-Daten brauchst, joine die Tabelle Quartett-Hersteller hinzu.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

derilzemer

#8
Hi,
so ich habe mich heute Abend hingesetzt und erst einmal eine stinknormale Abfrage über ein Textfeld und mit einem UFO gemacht. Das klappt jetzt mal soweit, so dass alle Einzelkarten gefunden werden, wenn ich ich über das Textfeld Kartenbezeichnung suche.
Jetzt wäre ja Step 2 dran, dass ich die Suche über 2 oder mehr Tabellen machen sollte. Innerjoin ist dann ja wohl das Thema. Ist der Gedanke richtig, oder geht man da jetzt anders vor um zu dem Ergebnis zu kommen? Die aktuelle DB habe dann mal hochgeladen. Auf der Menüseite ist die neue Anlage via Commandbutton Spielkarten Suche zu erreichen.
http://quartettportal.de/bilder/AccessOMania/QuartettDB.zip
Wie erwähnt, da komme ich sicher nicht alleine weiter, wäre also nett, wenn ich da etwas Untersützung erfahren könnte.
Vielleicht sollte ich mal erwähnen, dass ich die DB mit sehr starker Unterstützung durch MaggieMay und Klaus erstellt habe. Auch andere Forenmitglieder haben sich natürlich immer wieder daran beteiligt, dass es so wird wie es aktuell ist. Leider íst es Maggie zwecks valider Gründe nicht mehr möglich mich zu unterstützen. Um die DB zu finalisieren waren nur noch diese Feature und eine Codeprüfung zu integrieren :(. Also kurz vorm Ziel angeschrammt, schade.

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

crystal

Hallo Andres,

was bedeutet dieser Text:
ZitatJetzt wäre ja Step 2 dran, dass ich die Suche über 2 oder mehr Tabellen machen sollte. Innerjoin ist dann ja wohl das Thema. Ist der Gedanke richtig, oder geht man da jetzt anders vor um zu dem Ergebnis zu kommen?

Welche Suche möchtest du über 2 oder 3 Tabellen machen? Bezieht sich nicht die Suche im Grunde nur auf eine Tabelle (in der die Bezeichnungen stehen) und die anderen 2 oder 3 Tabellen liefern "nur" zusätzliche Daten, auf die via Join (Fremdschlüssel) zugegriffen werden kann?

Ich weiß nicht, warum MaggieMay dich nicht mehr unterstützen kann, will es auch nicht wissen, aber gerne selbst versuchen. Ich habe durchaus gesehen, dass deine Fragen bisweilen als etwas lästig und langwierig empfunden wurden, aber das ist für mich kein Hinderungsgrund.

Ich lade jetzt mal deine DB runter und dann sehen wir, was noch zu tun ist.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MzKlMu

#10
Hallo,
Zitatdass ich die DB mit sehr starker Unterstützung durch MaggieMay erstellt habe
Hallo Andreas, ich will ja nicht pingelig sein, aber bist Du sicher, dass es MaggieMay war ?

Im Anhang die 9 Forumsseiten der Entstehung.
http://www.access-o-mania.de/forum/index.php?topic=20084.0
Gruß Klaus

derilzemer

Hi Klaus,
oh je, da habe ich mich jetzt grammatikalisch in Abseits gestellt, oder? Ich werde jetzt nicht die ganzen Threads und auch PNs mit MM herausholen. Geholfen habe grundsätzlich viele, ich habe mit dir den Ansatz gemacht, das stimmt, dann bin ich umgestiegen auf accdb und sie und ich haben so gut wie keinen Stein auf dem anderen gelassen. Bei der DB im accdb Format hat sie sich definitiv am meisten drum gekümmert, das ist nun mal so. Du hast mir mit der mdb eine komplett neue Struktur gegeben, das ist auch korrekt, aber so wie die Db heute aussieht, hat sie nur noch wenig von dem was wir in der MDB gemacht haben. Dazu müsstest du sie dir herunterladen, aber accdb geht bei dir nicht wie du sagst wegen der Accessversion. Aber was ich nicht wollte ist, dass ich hier irgend jemanden AaAa vor die Haustür mache, also sorry wenn das so empfunden wird.

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

derilzemer

Zitat von: crystal am Januar 21, 2017, 22:37:10
Zitat
Welche Suche möchtest du über 2 oder 3 Tabellen machen? Bezieht sich nicht die Suche im Grunde nur auf eine Tabelle (in der die Bezeichnungen stehen) und die anderen 2 oder 3 Tabellen liefern "nur" zusätzliche Daten, auf die via Join (Fremdschlüssel) zugegriffen werden kann?
Ja das stimmt ja erst mal. Ich würde beim Suchergebnis gerne noch die Karten Nr. SpielNr und vielleicht Ausgabejahr. Diese Daten bekomme ich eben nur aus anderen Tabellen. Aktuell habe ich ja nur die tblQuKarten ausgelesen. Daraus interessiert mich eigentlich nur die Kartenbezeichnung und die KarteNr.
ZitatIch weiß nicht, warum MaggieMay dich nicht mehr unterstützen kann, will es auch nicht wissen, aber gerne selbst versuchen. Ich habe durchaus gesehen, dass deine Fragen bisweilen als etwas lästig und langwierig empfunden wurden, aber das ist für mich kein Hinderungsgrund.
Man muss ja sehen, dass man es ja grundsätzlich umsonst macht, das ist ja schon ein Großer Grund. Warum soll man da Zeit investieren, was an einem selbst völlig vorbeigeht?
Dass meine Fragen lästig, langwierig und zum Teil auch schlichtweg unverständlich sind kann ich sogar nachvollziehen :(. Ich brauche deshalb auch immer lange, bis ich einen Thread eröffne. Jetzt bin ich auch noch ohne Absicht in das Fettnäpfchen mit Klaus getreten. Da werde ich mir jetzt wohl auch noch was anhören müssen :(.
Wegen meiner Fragen, das wird sein, wie wenn mich jemand etwas über Firewalls und Loadbalancer fragen würde, weil er davon null Erfahrung hat. Davon könnte ich dem fragenden ein Loch in den Bauch erzählen und nur mit dem Kopf schütteln, weil er das nach dem 5x immer noch nicht kapiert hat :(.

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

crystal

Hallo Andreas,
Ich verstehe dich, was deine Zurückhaltung betrifft, Fragen zu stellen - glaube ich - sehr gut. Deshalb auch meine PM an dich.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...