Neuigkeiten:

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

Mobiles Hauptmenü

Bitte um Hilfe bei einer Abfrage

Begonnen von AndySVW, März 08, 2024, 00:22:24

⏪ vorheriges - nächstes ⏩

AndySVW

Hallo zusammen,

ich bin neu im Forum hier und bin kein beruflicher coder.
Ich mache das eher Hobbymäßig und bräuchte bitte einen Rat von euch.
Etwas macht mir zu schaffen bzw. ich komme einfach nicht weiter.

Zu meinem Problem:

Folgende Ausgangslage:
Ich habe eine Tabelle erstellt "AlleSpieleT".
Die sieht zum Beispiel wie folgt aus (Das Datum habe ich hier mal leer gelassen):

Spielername1 Spielername2 Ergebnis Sieger Datum
Andy         Thomas       1:0      Andy   
Boris        Alex         0:3      Alex
Karsten      Rolf         2:0      Karsten
Peter        Andy         2:0      Peter
Andy         Klaus        3:1      Andy
Thomas       Andy         2:1      Thomas
Andy         Thomas       5:1      Andy

Dann habe ich ein Formular erstellt mit einem Textfeld "Spielersuche" und einem Button "SpielersucheBTN"

Den SpielersucheBTN habe ich wie folgt programmiert:

Private Sub SpielersucheBtn_Click()

    Me.FilterOn = False
    Me.Filter = "[Spielername1] like '*" & Spielersuche & "*' or [Spielername2] like '*" & Spielersuche & "*'"
    Me.FilterOn = True
    Me.Spielersuche.SetFocus
    Me.OrderBy = "Datum ASC"
    Me.OrderByOn = True
   
End Sub
 
Wenn ich zum Beispiel bei dem Textfeld Spielersuche als Beispiel "Andy" eingebe.
Dann listet er alle Spiele von Andy auf :

Spielername1 Spielername2 Ergebnis Sieger Datum
Andy         Thomas       1:0      Andy 
Peter        Andy         2:0      Peter
Andy         Klaus        3:1      Andy
Thomas       Andy         2:1      Thomas
Andy         Thomas       5:1      Andy

Soweit so gut.

Jetzt zu meinem Dilemma.
Ich bräuchte bitte Hilfe bei einem Code.

Ich möchte 2 Text Felder erstellen im Formular. Als Beispiel Spielername1 und Spielername2 und dann den SpielersuchBTN.
 
In meinem Beispiel möchte ich aber nicht darauf achten ob ich Andy bei Spielername1 und Thomas bei Spielername2 oder umgekehrt eingebe.
Ich möchte das er mir dann alle Spiele die jemals zwischen Andy und Thomas oder Thomas und Andy statt gefunden haben ausgibt.

Also so:
Spielername1 Spielername2 Ergebnis Sieger Datum
Andy         Thomas       1:0      Andy 
Thomas       Andy         2:1      Thomas
Andy         Thomas       5:1      Andy

Könnt ihr mir bitte helfen ?

Aktuell habe ich ein funktionsfähiges Formular.
Das Listet mir 5000 Spiele auf.
Aber zur Zeit hab ich es nur hinbekommen das ich nur ein Suchfeld habe. Spielername und SpielersuchBTN.
Nur wenn ich da Andy eingebe als Beispiel listet der mir 850 Spiele aus wo der Name Andy auftaucht.
Und dann muss ich manuell suchen wie oft ich gegen Thomas gespielt habe.
Bei 850 Partien ist es einfach unmöglich  :o 

Deshalb möchte ich ein 2. Textfeld erstellen wo ich dann Andy und Thomas eingeben kann oder Thomas Andy und das ich dann wirklich nur die Spiele zwischen Andy und Thomas angezeigt bekomme.

Vereinfacht ausgedrückt. Wer Fußball Fan ist. Ich möchte als Beispiel Werder Bremen vs HSV suchen aus den letzten 20 Jahren. Und der soll mir dann ausgeben alle Spiele zwischen Werder und HSV. Und zwar ohne das ich darauf achten muss wann wer Heim oder Auswärts gespielt hat.

Ich hoffe ihr versteht mein Problem und ich würde mich wirklich sehr freuen über eure Hilfe.

Lg Andy

ebs17

Du musst das neue zusätzliche Kriterium mit dem vorhandenen logisch verknüpfen (AND), dabei beachten, dass AND mehr bindet als OR, also die ursprünglichen Ausdrücke klammern.

Me.Filter = _
  "(Spielername1 like '*" & Spielersuche & "*' or Spielername2 like '*" & Spielersuche & "*')" & _
  " AND (Spielername1 like '*" & Spielersuche2 & "*' or Spielername2 like '*" & Spielersuche2 & "*')"

Als Hinweis: Du verwendest Mustersuche mit LIKE *. Das ist ungünstig bezüglich Performance, und ziemlich sicher wirst Du Andy nicht mit der Eingabe "An" oder "nd" suchen wollen.
Zur übersichtlichen Übergabe an die Suchfelder könntest Du eine ComboBox verwenden, die die Spieler einfach auflistet. Spielername1 und Spielername2 in der Tabelle indiziert, und mit nachfolgender kleiner Umstellung dürfte das Ganze auch bei größeren Mengen zügiger ablaufen:
Me.Filter = _
  "(Spielername1 = '" & Me.cboSpielersuche & "' or Spielername2 = '" & Me.cboSpielersuche & "')" & _
  " AND (Spielername1 = '" & Me.cboSpielersuche2 & "' or Spielername2 = '" & Me.cboSpielersuche2 & "')"
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

Mit einem Kombi würde ich dann aber auch mit einer SpielerID filtern, also ohne "'".
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

AndySVW

#3
Zitat von: ebs17 am März 08, 2024, 10:01:46Du musst das neue zusätzliche Kriterium mit dem vorhandenen logisch verknüpfen (AND), dabei beachten, dass AND mehr bindet als OR, also die ursprünglichen Ausdrücke klammern.

Me.Filter = _
  "(Spielername1 like '*" & Spielersuche & "*' or Spielername2 like '*" & Spielersuche & "*')" & _
  " AND (Spielername1 like '*" & Spielersuche2 & "*' or Spielername2 like '*" & Spielersuche2 & "*')"

OMG  :o
Es funktioniert. Tausend Dank Eberhard für deine Hilfe.
Wahnsinn. Ich bin so happy ;D
Ich habe tatsächlich mit der AND funktion rum probiert aber ich hatte nie die richtige Syntax hinbekommen.
Vielen vielen Dank nochmal :)

Auch für deinen Tip Beaker s.a.

Ich bin ehrlich ich hab noch nie mit einer ComboBox gearbeitet.
I know irgendwann ist immer das erste mal ;D.

Ich hab mich bewusst für die LIKE Variante entschieden und zwar aus dem Grund das ständig immer neue Spieler dazu gekommen.
Also okay wenn man es jetzt mit dem Beispiel aus dem Fußball nehmen würde, dann hat man immer die gleichen Vereine.
Aber bei mir ist, das Woche für Woche immer neue Spieler dazu kommen. 

In meinem speziellen Fall, geht es um ein Online Spiel.
Und 2x die Woche findet ein Turnier statt wo man dann in diesem Spiel Virtuell tippen kann.
Also von der Vorrunde bis ins Finale. Das Problem ist das man nur 20 sekunden zeit hat pro Runde um zu tippen wer weiter kommt.
Das heißt ich hab nicht immer die Zeit den Usernamen des Spielers komplett einzugeben.
Manchmal kann ich dann wirklich nur 3 oder 4 Buchstaben eingeben.
Deshalb die LIKE funktion. Weil da kann ich wirklich nur paar Buchstaben eingeben und weiter gehts :)

Aber ich bin wirklich so happy das es jetzt einfach so funktioniert :)
Ich hab das ganze Internet auf den Kopf gestellt und konnte kein Video oder Tutorial finden welches sich genau mit dieser Thematik auseinander setzt.

Vielen lieben Dank nochmal für die Hilfe euch beiden :)

ebs17

Neue Spieler würde man in einer Spielertabelle ohne Duplikate aufnehmen. damit hätte man eine einfache Liste als Datenherkunft für die angesprochene ComboBox.

ZitatWeil da kann ich wirklich nur paar Buchstaben eingeben und weiter gehts
In der ComboBox gibt es die Eigenschaft "automatisch ergänzen", die sogar per Standard so eingestellt sein dürfte. Wenn Du also beim Tippen von vorne anfängst ...
Mit freundlichem Glück Auf!

Eberhard

AndySVW

#5
Okay ich verstehe worauf du hinaus willst bei der Combobox.

Für die geübten ist das wahrscheinlich auch keine Arbeit.
Aber für Jemanden wie mich, dürfte es ein wenig schwierig werden ;D.
Ich weiss natürlich wie man eine Combobox erstellt.

Aber ...

Man muss ja mit IDs arbeiten, sofern ich mich nicht irre.

Ich bin leider kein Profi aber ich meine in einem Video mal gesehen zu haben das es ja 2 arten gibt.
Einmal eine Value Combobox oder eine Relational Combobox.
Und da mit IDs zu arbeiten, ich muss da ehrlich sein.
Da hat es dann bei mir aufgehört.
Ich bin ja schon froh das ich überhaupt eine auf die Beine gestellt bekommen habe.
Und mit deiner Hilfe bei der Syntax wurde es dann wirklich perfekt.

Aber das ganze jetzt mit einer Combobox zu lösen.
Puhhhhh. Also ich sag mal so. Ich lerne für mein leben gern.
Wenn du mir Schritt für Schritt erklären würdest wie ich an die Sache ran gehe.
Würde ich es tatsächlich mal probieren.
Nur wer hat schon lust einen an die Hand zu nehmen und Schritt für Schritt erklären was zu tun ist ;D.

Korrigiere mich bitte falls ich jetzt Mist rede.
Dein vorhaben mit der Combobox soll ja folgende sein :

Combobox darin Spieler1 und Spieler2
Dann im Prinzip buchstaben oder Namen bei Spieler1 und Spieler2 eingeben und im Prinzip kommt dann dasselbe raus wie bei dem Beispiel mit der LIKE funktion. 
Wobei die Combobox ... wenn da 2000 Spieler drin sind und ich auf das Dropdown Menü klicke wie lang soll die Liste der Namen dann gehen  :o

Wie gesagt ich bin leider nicht so fit in der Materie.

Aber ich würde es gerne lernen.
Ich meine ich hab mir ein gewisses Grundwissen auch durch Videos und Tutorials angeeignet.
Aber bei Videos und Tutorials ist immer das Problem, wenn man an eine stelle kommt die man nicht versteht, dann kann man keinen Fragen.
Okay außer hier ;D

Aber wenn du sagst, du würdest es mir beibringen mit der Combobox.
Ich würde es sehr gerne lernen.
Es gibt natürlich massig Videos zu dem Thema.
Aber ich hänge oft an Stellen, wo es dann nicht mehr um allgemeines geht, sondern es wird dann spezifisch weil dieses und jenes vielleicht anders ist bei mir.
Und dann stehe ich da.

Wenn ich das Projekt "Combobox" in angriff nehmen möchte.
Müsste ich ein komplett neues Table erstellen ? Oder kann ich das verwenden welches ich schon habe ?

Denn ich sehe schon kommen, das ich ein komplett neues Table machen müsste, denn meine IDs beziehen sich nicht auf einzelne Spieler sondern auf Spielpaarungen.

Als Beispiel :

ID    Spieler1 Spieler2   Ergebnis  Sieger   Datum
235  Andy     Thomas   3:1           Andy     xx.xx.xxxx


Beaker s.a.

Hallo Andy,
Was du schon hast, hast du nicht gezeigt (Bild des Beziehungsfensters).
Du brauchst auf alle Fälle eine Spielertabelle
> SpielerID (Autowert)
> Spielername, würde ich auch mit einem eindeutigen Index belegen, sollte bei Online-
Spielen auch eh so sein.
> weitere Eigenschaften nach Anforderung

Diese Tabelle ist DS-Herkunft des Kombis.
Einstellungen
> Spalten: 2
> -breiten: 0cm;5cm (oder so breit die Namen halt sein können)
> gebundene Spalte: 1
> Steuerelementinhalt: leer

Damit und mit Eberhards korrigiertem Filterausdruck, wie geschrieben ohne die "'"
funktioniert das.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Beaker s.a.

ZitatID    Spieler1 Spieler2   Ergebnis  Sieger   Datum
235  Andy     Thomas   3:1           Andy     xx.xx.xxxx
Das sind 2 Tabellen, - die beschriebene SpielerTabelle und die Tabelle der Begegnungen.
Diese sieht dann so aus
> SpielID
> SpielerID_F1
> SpielerID_F2
Ins Beziehungsfenster zieht du dann die Spielertabelle 2x hinein und verknüpfst die eine
mit SpielerID_F1 die andere mit SpielerID_F2.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

AndySVW

#8
Also erstmal vielen Dank :)

so damit wir nicht aneinander vorbei reden, zeige ich mal wie es bei mir aussieht.

Sie dürfen in diesem Board keine Dateianhänge sehen.

Sie dürfen in diesem Board keine Dateianhänge sehen.

Als Syntax von dem ganzen habe ich folgendes:

Option Compare Database
Private Sub SetDefaults()

    Spielersuche = ""
    Spielersuche2 = ""
    SiegerSuche = ""
    DatumVonSuche = #1/1/2023#
    DatumBisSuche = #1/1/2030#
   
End Sub
Private Sub ClearSearchBtn_Click()

    Me.Spielersuche = ""
    Me.Spielersuche2 = ""
    Me.SiegerSuche = ""
    Me.DatumVonSuche = #1/1/2023#
    Me.DatumBisSuche = #1/1/2030#
    DoCmd.ShowAllRecords
    Me.OrderBy = "Datum ASC"
    Me.OrderByOn = True
    Me.Requery
    Me.Spielersuche.SetFocus

End Sub
Private Sub Form_Load()

    SetDefaults
    Me.Requery
    Me.Spielersuche.SetFocus

End Sub
Private Sub RefreshBTN_Click()

    Me.Requery

End Sub
Private Sub SiegersucheBtn_Click()

    Me.FilterOn = False
    Me.Filter = "[Sieger] like '*" & SiegerSuche & "*'"
    Me.FilterOn = True
    Me.Spielersuche.SetFocus
    Me.OrderBy = "Datum ASC"
    Me.OrderByOn = True
   
End Sub
Private Sub SpielersucheBtn_Click()

    Me.FilterOn = False
    Me.Filter = "(Spielername1 like '*" & Spielersuche & "*' or Spielername2 like '*" & Spielersuche & "*')" & " AND (Spielername1 like '*" & Spielersuche2 & "*'
    or Spielername2 like '*" & Spielersuche2 & "*')"
    Me.FilterOn = True
    Me.Spielersuche.SetFocus
    Me.OrderBy = "Datum ASC"
    Me.OrderByOn = True
   
End Sub
Private Sub Spielersuche_AfterUpdate()

    Call SpielersucheBtn_Click
   
End Sub
Private Sub Spielersuche2_AfterUpdate()

    Call SpielersucheBtn_Click

End Sub
Private Sub Siegersuche_AfterUpdate()

    Call SiegersucheBtn_Click
   
End Sub

Ich glaube es ist besser wenn ich alles zeige, statt zu beschreiben :)

Was mir wichtig ist, die Tabelle bekomme ich gar nicht zu Gesicht.
Ich hab das einmal angelegt für das Formular.
Im Formular kann ich abrufen und auch die Ergebnisse eintragen.

Was mir kopfzerbrechen macht an der ganzen Sache mit der Combobox und einer ID zuweisung.
Ich muss jedem Spieler eine ID zuweisen richtig ?
So das heißt ich fange die Tabelle nochmal ganz von vorne an.
Grundsätzlich jedem Spieler eine ID zu verpassen sollte nicht das Problem sein.

Aber ....

Mir bleiben zwischen den Runden zum tippen gerade mal 1 Minute, danach folgt sofort das Spiel.
Das heißt in dieser 1 Minute muss ich in der neuen Variante mit der Combobox Spielernamen hinzufügen : Spieler1 und Spieler2 und das Datum sofort eintragen.
Nach dem Spiel bekomme ich das Ergebnis etwa 20 lang sekunden angezeigt.
Danach verschwindet alles. Es gibt keine Möglichkeit nachträglich zu schauen wie welches Spiel ausgegangen ist.
 
Ich kann mich daher nicht damit rumschlagen welcher Spieler welche ID hat und ob das dann Spieler1 oder Spieler2 ist.

Wenn dort steht als Beispiel 1. Runde:  Andy vs. Thomas. Dann trage ich es auch so ein. Spieler1 Andy und Spieler2 Thomas.
Steht eine Woche später Thomas vs Andy da. Dann trage ich ein : Thomas Spieler1 und Andy bei Spieler2.

Hintergrund des ganzen ist, man kann wie gesagt vor dem Spiel 1 Minute lang tippen wer gewinnt.
Wenn ich dann eine Übersicht bekomme Spieler X hat 20 mal gegen Spieler Y gespielt und es steht 15:5 für Spieler X.
Dann tippe ich natürlich auf Spieler X :)
Man muss es live eingeben alles.
Heißt Runde 1. geht los ... die 1 Minute läuft.
Dann muss ich schnell tippen Spieler 1 und Spieler 2 und gucke in meiner Tabelle wie oft die gegeneinander gespielt haben und wer am meisten gewonnen hat.
Dann gebe ich meinen Tipp ab.
Dann muss ich auch schnell wieder neu eintragen Spieler1 und Spieler2 mit dem aktuellen Datum. Das Ergebnis steht ja noch nicht fest.
Dann kommt das Spiel.
Und dann bleiben mir 20 sekunden um das Ergebnis schnell in die Tabelle einzutragen.   

Ich hoffe man versteht worauf ich hinaus will :)

 

ebs17

Ich hatte schon verstanden: Du hast ganz niedrige Erwartungen und gehst in sehr kleinen Schritten. Daher war ich sehr zurückhaltend in meiner Darstellung.

Du sprichst größere Anzahlen von Spielern und wenig Zeit an. Werde Dir bewusst, dass die vorgeschlagenen Maßnahmen der Erhöhung der Ausführungsgeschwindigkeit der Abfrage dienen. Das ist ja eine zweite Größe neben Deiner Datenerfassung, und die Verlängerung der Laufzeit bei wachsender Datenmenge ist unvermeidlich, vielleicht spürst Du jetzt schon eine Verzögerung.

Ja, die zusätzliche Tabelle (Spielertabelle) ist günstig. Das Füllen dieser Tabelle muss kein Extraaufwand sein.
Kombinationsfeld - Eintrag hinzufügen
Schreib einfach in die ComboBox hinein, bei Ersterfassung den ganzen Namen. Dann ist der Spaß schon vorhanden, man muss ggf. nur die Datenherkunft aktualisieren.

Frage: Bevor Du in Deiner Tabelle suchen und finden kannst, musst Du ja auch die Paarungen erst einmal erfassen. Wo kommen die her? Tippst Du die per Hand selbst ein? Und da sind ja Namen vollständig zu verwenden.
Auch da würde die ComboBox statt einer Textbox aufwandssenkend helfen können.

ZitatIch muss jedem Spieler eine ID zuweisen richtig ?
So das heißt ich fange die Tabelle nochmal ganz von vorne an.
In der Spielertabelle hast Du neben dem Namensfeld noch ein weiteres. ID als Autowert und Primärschlüssel. Damit arbeitet dann Access für Dich. Das Namensfeld bekommt einen eindeutigen Index, damit einerseits ein Spieler nicht doppelt erfasst wird und andererseits per dann möglicher Indexnutzung die Performance angehoben wird.
Mit freundlichem Glück Auf!

Eberhard

AndySVW

#10
Also eine verzögerung spüre ich tatsächlich noch nicht.
Aber ich weiss was du meinst. Eine DB bläht sich mit der Zeit auf und an einem Zeitpunkt X gibt es dann eine Verzögerung oder Performance einbußen.
Ich muss dazu erwähnen das ich einen ziemlich starken Rechner habe.
Core i7 @ 4,9 Ghz. 32GB DDR4 4000 Mhz und eine M.2 PCIE 4.0 WD SN850X Leserate 7300 MB/s Schreibrate 6300 MB/s.
Vielleicht merke ich deshalb noch nichts an der Performance der DB.

Zitat von: ebs17 am März 09, 2024, 08:37:34Frage: Bevor Du in Deiner Tabelle suchen und finden kannst, musst Du ja auch die Paarungen erst einmal erfassen. Wo kommen die her? Tippst Du die per Hand selbst ein? Und da sind ja Namen vollständig zu verwenden.
Auch da würde die ComboBox statt einer Textbox aufwandssenkend helfen können.

Ja genau :)
Als ich mit der Datenbank angefangen habe, hab ich die Spielpaarungen manuell händisch eingetippt.
Das mache ich immer noch.

Als Beispiel :

Sie dürfen in diesem Board keine Dateianhänge sehen.

Morgen findet wieder ein Turnier statt.
Und nehmen wir an ich bin im Spiel und die erste Runde wird ausgelost, was in sekunden passiert.
Dann steht da Nightmares vs. Snow und dann geht ein Timer runter. Man kann sich dann die Teamstärke von Nightmares und Snow anschauen und dann einen Tipp abgeben wer gewinnt.

Dazu gebe ich dann im Suchfeld als Beispiel "nightm" ein, wie in dem Bild zu sehen und dann bekomme ich alle spiele von Nightmares angezeigt.
Was ich jetzt mache geht eigentlich ganz schnell.
Ich hab ja jetzt wie im Bild zu sehen die Begegnungen aufgelistet.
Ich gehe auf den Namen Nightmares egal wo und kopiere ihn.
Dann im leeren Feld in letzten Reihe auf dem Bild und paste.
Dasselbe bei Snow, wobei bei Snow das tippe ich schnell mit der Hand ein. Bei 4 Buchstaben brauche ich noch kein copy paste.
Dann tippe ich die BR Stärke vom Bildschirm ab und trage sie in die jeweiligen Spalten ein. Weil die Teamstärke ändert sich fast täglich.
Und das Datum trage ich dann schon mal ein. Wenn das Turnier morgen statt findet tippe ich dann schonmal 10.03.2024 ein.
Dann kommt das Spiel und wenn es zu ende ist trage ich nur noch das Ergebnis ein und bei der BR Stärke das kopiere ich auch und füge es beim Sieger ein.
Und dann kommt das nächste Match.

Der Hintergrund meiner DB ist. Man kann dann Spielemünzen gewinnen. Und von diesen Münzen wiederrum kann man sein eigenes Team stärker machen :). Natürlich ist das keine Garantie. Diese DB ist ja kein Orakel. Aber es gibt mir Hilfe besser abzuschätzen wer die Nase eher vorn hat. Ist halt nur reine Statistik.

Ich muss jetzt ehrlich sein zu euch. Denn es gibt etwas was man bei mir wissen muss.
Ich leide an diversen Erkrankungen und mein Gedächtnis ist leider auch stark betroffen davon.
Was ich heute lerne, wenn ich es mir nicht aufschreibe ist in 2 bis 3 tagen weg.

Diese DB die ich erstellt habe, ich muss ehrlich sein ich weiss eigentlich gar nicht was welcher Befehl macht.
Also schon. Ganz grob. Aber im Detail weiss ich es halt nicht.
Wenn man mich fragen würde. Ja wie hast du das denn hinbekommen so ? Weil die ganzen "Me." Befehle oder VBA allgemein, davon muss man schon Grundwissen haben, sonst kriegt man das nicht hin.
Ist zum teil richtig, aber ich habe mir dazu Videos genommen und die Befehle einfach nur abgeschrieben.
Aber oft bin ich hängen geblieben.
Und ich musste dann solange rum puzzeln bis es gepasst hat.
Ihr würdet so eine DB in paar Minuten oder Stunden erstellen.
Um ehrlich zu sein ich habe Wochen dafür gebraucht.

Als Beispiel.
Ich nehme folgende Syntax :

Me.Filter = "[Sieger] like '*" & SiegerSuche & "*'"

So wenn ich diese Zeile lese. Weiss ich grob. Das ist der Befehl für ... ich kann egal was eintippen im Suchfeld.
Oder ich glaube in der Fachsprache nennt man das auch eine Wildcard suche.
Ob 1 Buchstabe, 3 oder zahlen oder sonstwas. Die DB sucht das für mich raus.
Was ich aber nicht weiss ist.
Was macht Me.Filter überhaupt. ? Okay klar Filter steht für Filtern. Aber was bedeuten die Anführungszeichen ?
Wofür steht '*" ? Was macht das ? & Siegersuche &. Warum die ganzen & zeichen ?

Ich würde Wahnsinnig gerne umstellen auf eine Combobox.
Denn ich lese und sehe schon die Vorteile.
Einziger Haken, ich hab keine Ahnung wie ich das Umsetzen soll.

Und das schlimme bei mir ist, man muss es mir leider wie einem Kleinkind beibringen.
Sprich. Man müsste mir sagen. Pass auf Andy mach eine neue Tabelle. Dort trägst du folgende Spalten ein.
Dann die Einstellungen der Spalte.
Danach machst du ein neues Formular. Und machst dieses und jenes.

Falls du oder ihr die Geduld mit mir habt. Würde ich es sehr gerne umstellen oder auch machen mit der Combobox.

Im Prinzip. Ich brauche Spieler1 Spieler1 BR, dann Spieler2 Spieler2 BR, Sieger, Sieger BR. Und das Datum.

Das reicht mir schon :)

Heute bin ich leider den ganzen tag unterwegs, aber morgen hätte ich Zeit und könnte mit neuen Tabellen anfangen. Es ist ja auch nicht schlimm wenn es paar tage dauert. Ich habe ja eine lauffähige DB und sogar noch besser als sonst weil ich jetzt dank euch auch Begegnungen spezifiziert suchen kann.

Man müsste mir halt für meinen Fall nur sagen, wie viel Tabellen und was in welcher Tabelle drin stehen soll.
Dann kann ich damit anfangen. Erstmal das. Wenn das fertig ist. Dann kann man ja weiter machen mit dem Formular.

Jetzt alles aufeinmal runter schreiben alles was ich tun muss, ist schwierig für mich.

Ich weiss ich wiederhole mich, aber ich bin wirklich sehr sehr dankbar für eure Hilfe, Geduld und Unterstützung :)


 





Beaker s.a.

Hallo,
Was sind diese Schlüsselfelder
Spieler_ID, BR_Spieler1 und BR_Spieler2?
Spieler_ID halte ich für eine schlechte Benamsung. Das ist doch die ID der
Begegnung, also besser Spiel_ID.   *)
ZitatIch muss jedem Spieler eine ID zuweisen richtig ?
Ja. Erstelle eine Tabelle mit ID wie beschrieben. Eindeutigen Index auf den
Namen nicht vergessen.
Per Anfügeabfrage überträgst du dann die Spielernamen in diese Tabelle. Die
ID wird dann per Autowert automatisch vergeben
INSERT INTO Spieler (Spielername)
SELECT Spielername1
FROM Spiele
Sicherheitshalber führst du diese auch noch mal mit "Spielername2" aus. Dann
hast du alle Spielernamen in der Tabelle. Doppelte kann es durch den Index
auch nicht geben. Eine entsprechende Fehlermeldung (Indexverletzung) kannst
du ignorieren. Das musst du nur einmal machen, - neue Spieler werden später
direkt über die Kombis eingetragen.
Jetzt fügst du in deine Spieletabelle zwei Felder (SpielerID_F1, SpielerID_F2)
ein, - Zahl, LongInteger. Diese füllst du dann mit einer Aktualisierungsabfrage
ZitatUPDATE Spiele AS S
SET S.SpielerID_F1 = SR.SpielerID
INNER JOIN Spieler AS SR
ON S.Spielername1 = SR.Spielername
Dann nochmal mit Spieler 2. Anschliessend kannst du die Namensfelder in Spiele
löschen. Die werden im Form per Abfrage dazu geholt.

Das Feld "Sieger" stelle ich zur Diskussion. Normal muss man den Sieger nicht
speichern (wenn dann aber nur die ID), da er sich jeder Zeit berechnen lässt.
Andererseits bläht m.E. diese Berechnung Abfragen nur auf. Deshalb würde ich
hier wohl auf ein berechnetes Feld zurückgreifen.

ZitatMan muss es live eingeben alles.
D.h. es gibt keinen Spielplan, die Begegnungen werden live zusammengestellt?
Wieso sind dann aber bei aufsteigendem Index die Datumsangaben nicht auch so
sortiert?
Da bist mit zwei Kombis zur Spielerauswahl auf jeden Fall schneller. Das Datum
kannst du als Standardwert hinterlegen; - Now() (damit du auch die Uhrzeit hast).
Das Siegverhältnis kann man direkt berechnen und anzeigen. Und damit auch der
Tipp. Dazu musst du nur die Regeln definieren.
ZitatDann muss ich auch schnell wieder neu eintragen Spieler1 und Spieler2 mit dem aktuellen Datum. Das Ergebnis steht ja noch nicht fest.
Dann kommt das Spiel.
Und dann bleiben mir 20 sekunden um das Ergebnis schnell in die Tabelle einzutragen.   
Diesen Ablauf habe ich nicht verstanden. Du hast die Paarung doch schon auf dem
Schirm, wieso nochmal eingeben.

gruss ekkehard

*) KEINE Sonderzeichen in Objektnamen verwenden, - nur _ ist erlaubt.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

AndySVW

#12
Hallo :)
Puuuhhh Ekkehard erstmal vielen lieben Dank für deine Mühen auch :)

erstmal beantworte ich deine Frage.
Und dann hab ich leider x fragen, weil ich die zusammenhänge nicht verstehe.
Ich bin aber echt nicht böse wenn hier jemand hingeht und sagt, neeeee das tue ich mir nicht an, der hat ja mal 0,0 Ahnung :)

Ich zeige dir mal den Vorgang.
Dann verstehst du besser was wann passiert.
Die Spiele gibt es auf keinem Plan.
Die besten 128 Spieler machen 2x die Woche ein Turnier.
Und die Begegnungen werden per Zufall gemacht. Also die stehen nicht vorher fest. Wer gegen wen antreten muss.
Sie dürfen in diesem Board keine Dateianhänge sehen.
Das Fenster links bleibt nur ca. 1 Minute. Danach verschwindet es.
Ich habe nur diese 1 Minute um auch die Stärke der jeweiligen Spieler einzutragen.
Wie du auf der rechten Seite sehen kannst in meiner Tabelle.
In dieser 1 Minute trage ich schnell die Spielernamen in meiner Tabelle ein Spieler1 und Spieler2 und die jeweiligen stärken und das Datum, da ich aber noch nicht weiss wie es ausgeht lasse ich den Sieger offen.
Dann folgt der Kampf, danach steht der Sieger fest und diesen Trage ich dann nachträglich ein.
Dann kommt direkt die nächste Runde und so geht es dann von Runde zu Runde bis zum Finale.
Es kommen aber jede Woche öfter mal andere Spieler die ich noch nicht in der DB habe, da die besten 128 nicht immer diesselben sind. Daher ändert es sich öfter mal.
Und falls es ein Spieler ist den ich noch nicht in meiner Tabelle habe muss ich den ziemlich zügig eingeben können. Da ich wie gesagt nur die 1 Minute habe um zu schauen. Hat es diese Begegnung schon gegeben ? Wenn ja wer hat gewonnen und wie oft.

Im Prinzip ich stimme dir vollkommen zu. Es ist einfacher und schneller mit einer combobox da ich die vorhandenen Spieler nicht jedesmal copy/paste oder neu eingeben muss.

So jetzt kommen wir zu der Umsetzung.
Es tut mir auch leid wenn ich mich jetzt etwas dämlich anstelle.

ZitatWas sind diese Schlüsselfelder
Spieler_ID, BR_Spieler1 und BR_Spieler2?
Spieler_ID halte ich für eine schlechte Benamsung. Das ist doch die ID der
Begegnung, also besser Spiel_ID.

Da gebe ich dir recht. Das war von mir unglücklich geschrieben. Spieler_ID wäre hier wohl besser angebracht.
Ich habe nur gedacht da ich in diesem Fall nicht mit IDs arbeite ist die Benennung ja irgendwie Wurst ;D.

So nun zu meinen Fragen und jetzt wirst du dir die Hände über den Kopf zusammenschlagen, aber wie gesagt ich hab ja offen gesagt das ich eigentlich gar nicht weiss was ich da getan habe sondern vieles einfach von anderen Videos zusammen gepuzzelt habe.
Ganz dumm bin ich natürlich nicht, ich habe mir schon irgendwo alles aufgeschrieben.
Aber du wirst jetzt erkennen, das man bei mir zu Fuß gehen muss ;D.

ZitatJa. Erstelle eine Tabelle mit ID wie beschrieben. Eindeutigen Index auf den
Namen nicht vergessen.
Per Anfügeabfrage überträgst du dann die Spielernamen in diese Tabelle. Die
ID wird dann per Autowert automatisch vergeben

Also ich erstelle eine Tabelle.
Diese nenne ich dann Spiele_ID.
So dann mache ich wie in meiner alten Tabelle Spielername1 BR Spieler1 Spielername2 BR Spielername2 Sieger BR Sieger und Datum ?
Oder mache ich NUR eine Spieletabelle ? Sprich eine Tabelle, dann Spiele_ID (wo nur die Begegnungen drin stehen ) und die Spieler selbst bekommen eine neue Tabelle ?

Was ist eine Anfügeabfrage ? Ich kenne nur die Englischen Begriffe. Abfragen selbst ist damit Query gemeint ? Wenn ja. Wie erstelle ich eine Query die Spielernamen überträgt ?
Eindeutigen Index auf den Namen nicht vergessen.
Was ist damit gemeint ?

ZitatINSERT INTO Spieler (Spielername)
SELECT Spielername1
FROM Spiele

Wo füge ich diesen Befehl ein ?

ZitatSicherheitshalber führst du diese auch noch mal mit "Spielername2" aus. Dann
hast du alle Spielernamen in der Tabelle. Doppelte kann es durch den Index
auch nicht geben. Eine entsprechende Fehlermeldung (Indexverletzung) kannst
du ignorieren. Das musst du nur einmal machen, - neue Spieler werden später
direkt über die Kombis eingetragen.
Jetzt fügst du in deine Spieletabelle zwei Felder (SpielerID_F1, SpielerID_F2)
ein, - Zahl, LongInteger

Hier bin ich ehrlich da steigt mein Verstand aus.
Longinteger und als Zahl deklarieren ist klar. Das mache ich in der Tabelle.
Aber hier wieder meine Frage. SpielerID_F1 und Spieler_ID F2 ist das eine separate Tabelle ?
Oder kommt das in die Spiele_ID Tabelle ? Wo kommen dann BR (Teamstärke des Spielers) hin ? Also BR Spieler 1 und BR spieler 2 und Sieger und Datum ?

ZitatDiese füllst du dann mit einer Aktualisierungsabfrage.

UPDATE Spiele AS S
SET S.SpielerID_F1 = SR.SpielerID
INNER JOIN Spieler AS SR
ON S.Spielername1 = SR.Spielername

Dann nochmal mit Spieler 2. Anschliessend kannst du die Namensfelder in Spiele
löschen. Die werden im Form per Abfrage dazu geholt.

Das Feld "Sieger" stelle ich zur Diskussion. Normal muss man den Sieger nicht
speichern (wenn dann aber nur die ID), da er sich jeder Zeit berechnen lässt.
Andererseits bläht m.E. diese Berechnung Abfragen nur auf. Deshalb würde ich
hier wohl auf ein berechnetes Feld zurückgreifen.

Hier auch Aktualisierungsabfrage ? Wie mache ich das ? Wo mache ich das ?

Was den Sieger angeht. Ich erkläre mal einfach wofür mir das wichtig ist.
Nehmen wir an du und ich werden bei dem Turnier ausgelost.

Andy vs. Ekkehard.

So wir beide haben aber noch nie gegeneinander gekämpft.
Dann muss in sekunden wissen gegen wen hat Andy die letzten 10 Begegnungen egal gegen wen gekämpft und wie ist seine Bilanz.
Hat er mehr gewonnen oder verloren.
Das gleiche mache ich dann mit dir. Ich gucke dann wie hat denn der Ekkehard die letzten 10 Begegnungen egal gegen wen gekämpft und wie hat er sich da geschlagen.
Jetzt kommt die krux an der Sache. Es reicht nicht wenn da steht letzten 10 Kämpfe Andy Bilanz 8:2 und Ekkehard Bilanz 6:4 ich muss wissen gegen wen waren die letzten 10 Kämpfe und wie waren die stärken der Gegner jeweils ?
Sie dürfen in diesem Board keine Dateianhänge sehen.
Hier kann ich direkt sehen wie waren meine letzten Kämpfe ? Gegen wen hab ich da eigentlich gekämpft ? Wie sind sie ausgegangen ? Und wie stark waren meine Gegner ?

Deshalb ist mir der Sieger wichtig. Wie gesagt da man leider nur 1 Minute hat.
Muss das alles zügig von statten gehen.
Ich hab dann leider keine Zeit um irgendwelche Tabellen zu suchen oder irgendwelche anderen Felder suchen.
Das muss alles auf einen Blick kommen.
Noch besser wäre es natürlich Ich hab die 2 Spieler und deren letzten Ergebnisse auf einer einzigen Seite.
Ich denke auch das alles möglich ist.

Nur wer auch immer mir das jetzt beibringt. Ob du das bist oder Eberhard. Oder ihr beide. Man muss leider Geduld und natürlich auch zeit haben. An mir liegt es nicht :). Ich will lernen. Auch wenn ich 1000 Fragen stellen muss.
Ich schreibe mir auch alles auf. Denn mich interessiert das Wahnsinnig, wie man das alles auf die Beine stellen und coden muss. Selbst wenn ich alles wieder vergessen habe in paar tagen. Aber ich schreibe es mir auf.
Und kann darauf immer zurück greifen. Und das ist wirklich Gold wert was ihr mir hier beibringen könnt.
Also für mich ist es jedenfalls Gold wert :)

Ich bin aber wie gesagt nicht böse, wenn ihr sagt nee du, wenn du noch nicht mal weisst, was eine Anfügeabfrage oder Aktualisierungsabfrage ist und wie man diese erstellt, da hört es dann bei uns auf.
Dann hab ich da vollstes Verständnis.

Aber ich kann nur nochmal betonen, ich würde es sehr gerne lernen.
Auch wenn es etwas lästig ist, weil man mit mir wirklich alles Schritt für Schritt machen müsste.

Was die Anfügeabfrage angeht, ich gehe mal davon aus, damit ist gemeint das ich nicht alle Spieler wieder von vorne neu eintippen muss richtig ?
Wie mache ich das denn dann für die ganzen Begegnungen ? Da bei mir ja nichts gebunden ist, müsste ich diese komplett neu erstellen oder ? Also eine Tabelle wo dann die Spielbegegnungen drin stehen. Deshalb hab ich oben so blöd gefragt ob ich 1 oder 2 Tabellen machen muss. Weil das für mich nicht klar ersichtlich ist.

Ich weiss, es ist zeit und mühen für euch.
Aber was mir helfen würde ist wirklich eine detailierte Beschreibung.
Bsp. Ich soll eine Anfügeabfrage erstellen.
Erstellen----->Abfrageassistent oder Abfrageentwurf--------->wenn Abfrageassistent .... welche Parameter gebe ich ein ? etc.etc.
Bei youtube Videos ist alles einfach. Da sehe ich wo die leute drauf gehen und was sie dort machen.
Aber hier das aus zeilen zu lesen, ist für mich doch etwas schwierig, wenn ich nicht weiss was gemeint ist.
Z.b. was ich wo erstelle oder was ich wo eintrage oder welchen code ich wo eingeben muss.

Beaker s.a.

Das ist mir alles zuviel. Lade die DB hoch, dann schau ich mir das
an und versuche es einzubauen.
Frage, der Sieger lässt sich nicht anhand einer Punktzahl berechnen?
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

AndySVW

#14
Vielen Dank für die Hilfe.
DB hab ich hochgeladen.

Sie dürfen in diesem Board keine Dateianhänge sehen.

ZitatFrage, der Sieger lässt sich nicht anhand einer Punktzahl berechnen?

Nein leider nicht.
Ich muss das immer eintragen wer gewonnen hat.
Man weiss ja leider vorher nicht wer gewinnt.
Der Kampf findet ja wirklich statt. Den kann man leider nicht errechnen.
Auch ist es kein Punktesystem.

Der Sieger kommt weiter, der verlierer scheidet aus.

Deshalb hatte ich mir die DB gemacht. Um einfach besser abschätzen zu können wer weiter kommt.

Was halt wie gesagt wichtig ist. Das man Spieler1 BR Spieler1 Spieler2 BR Spieler2 Sieger BR Sieger und Datum direkt ablesen kann. Das ich 2 Spieler eingeben kann wenn sie gegeneinander gekämpft haben wer wie oft gewonnen hat und mit welcher Teamstärke. Denn die Teamstärke ändert sich fast täglich. Während der eine besser wird, kann der andere schlechter werden.
Auch wenn meine DB vielleicht die schlechtere ist. Aber ich kann direkt sehen welcher Spieler überhaupt schon gekämpft hat mit den Resultaten und neuerdings kann ich direkt 2 Spieler Filtern ob die 2 gegeneinander gespielt haben und wie es ausgegangen ist zwischen den beiden.

Ich weiss nicht ob das möglich ist. Aber wenn 2 Spieler noch gar nicht gegeneinander gekämpft haben und ich beide Spieler sehen möchte wie beide die letzten Wochen gekämpft haben egal gegen wen.
Kriegt man diese Info auf einer Seite hin ?

Weil so wie es jetzt ist kann ich das nur einzeln machen.
Das heißt ich gebe Spieler1 ein, drücke Enter und sehe wie er gekämpft hat die letzten Wochen. Danach muss ich auf Clear gehen und das ganze für den Spieler2 machen.

Aber was auch eine Herausforderung ist, man kann auch die Teamstärke nicht fest zuweisen.
Also generell meine ich, denn jeden tag kann die sich ändern und ich muss sie jedesmal dann neu eingeben bzw. anpassen.

Ach ja, ich weiss nicht ob es einen Unterschied macht. Aber meine DB hat eigentlich die endung .accdb
Ich hab die aufgerufen und dann als .mdb gespeichert weil sonst hätte ich sie hier so nicht hochladen können.
Was mir auffällt ist, in der .mdb die ich hochgeladen habe funktioniert das Datum nicht.
Es wird nicht angezeigt. Bei .accdb aber schon.

Und in der DB wenn du sie öffnest. Es sind 2 Wettbewerbe. Das eine heißt Weekly, das andere Arena.
Es ist dasselbe System oder Prinzip. Es sind nur 2 verschiedene Wettbewerbe.
Aber das Schema ist das gleiche :)