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
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 einem Kombi würde ich dann aber auch mit einer SpielerID filtern, also ohne "'".
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 :)
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 ...
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
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
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.
Also erstmal vielen Dank :)
so damit wir nicht aneinander vorbei reden, zeige ich mal wie es bei mir aussieht.
Begegnungen_T.png
Begegnungen_F.png
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 :)
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 (https://www.donkarl.com?FAQ4.13)
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.
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 :
Beispiel.png
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 :)
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.
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.
Beispiel.png
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 ?
Beispiel2.png
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.
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?
Vielen Dank für die Hilfe.
DB hab ich hochgeladen.
LOP_DB.mdb
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 :)
Hallo,
ZitatIch hab die aufgerufen und dann als .mdb gespeichert weil sonst hätte ich sie hier so nicht hochladen können.
Eine DB sollte als Zipfile gespeichert werden. dann klappt das auch mit einer ACCDB.
ZitatErlaubte Dateitypen: mdb, mde, xls, xlt, ppt, doc, gif, jpg, mpg, pdf, png, txt, zip, sql
Vor dem Zippen noch Reparieren/Komprimieren (Access Diestprogramm) ausführen.
Oh super,
vielen Dank für den Hinweis Klaus.
Dann hier nochmal .accdb als .zip :)
Reparieren/Komprimmieren hab ich auch ausgeführt vor dem zippen.
LOP_DB.zip
Hallo Andy,
So, ich habe dir schon mal die Tabellen so eingerichtet wie ich mir
es vorstelle. Habe dazu deine Tabellen kopiert und um die FK-Felder
ergänzt (Namensfelder gelöscht). Ich überlege noch, ob man die beiden
"Turniertabellen" zusammenfasst; - "Trennung" über ein Kennzeichen.
Leider gibt es da Inkonsistenzen, die ich aber nicht finde (muss jetzt
auch aufhören).
Ich kann keinen eindeutigen Index auf die beiden SpielerIDs erstellen.
Es müsste also Spiele geben bei denen beide gleich sind, finde ich
aber nicht
SELECT SpielID, Spieler1ID_F, Spieler2ID_F
FROM Arena_CS_T
WHERE Spieler1ID_F = Spieler2ID_F
zeigt keine DS.
Mit der Abfrage "qryArena_CS_T" habe ich einen ersten Formularentwurf
erstellt, in dem sich aber keine DS anlegen lassen; - auch mit Index-
Fehler. In der Abfrage selber lassen sich problemlos neue DS erfassen.
Vielleicht mag Klaus mal drüber schauen und mir auf die Sprünge helfen.
Schau es mir morgen noch mal an.
Hallo Ekkehard,
ich bin schon unendlich dankbar das du es dir überhaupt anschaust und es versuchst.
Falls Klaus sich die sache auch mal anschaut oder andere, bin ich natürlich auch unendlich dankbar.
Das traurige ist, ich würde so gerne mithelfen.
Aber ich bin leider kein coder bzw. das wissen reicht bei mir einfach nicht aus :(
Was ich aber machen kann.
ZitatIch kann keinen eindeutigen Index auf die beiden SpielerIDs erstellen.
Es müsste also Spiele geben bei denen beide gleich sind, finde ich
aber nicht
Was genau meinst du damit ? Also Spiele bei denen beide gleich sind ?
Ich kann ja mit suchen, wenn du mir sagst wonach ich genau suchen soll.
Und falls das nicht zum Erfolg führt.
Notfalls trage ich alle vergangenen Begegnungen nochmal von neu ein.
Glaub es sind etwas über 500. Also die Zeit würde ich mir schon nehmen.
Besser ich fange bei 500 von vorne an als bei 10.000.
Und 500 Begegnungen hat man ja in paar tagen schnell eingegeben.
Falls das jetzt das Problem wäre.
Hallo Andy,
Hier mein zweiter Entwurf.
Ich habe jetzt die beiden Wettbewerbe (hab's Turniere genannt) zusammen in
eine Tabelle gepackt. Leider sind dabei einige Spiele verloren gegangen.
Mit der einen Tabelle braucht man auch nur ein Formular, das beim Öffnen
auf den Wettbewerb gefiltert wird. Kannst du mit deinem "Hauptform" schon
ausprobieren.
Das "frmSpiele" hat noch Macken. Das Kombi Sieger sollte eigentlich nur
noch die beiden Spieler anzeigen. Macht es bei den meisten auch, allerdings
wird bei manchen Spielen nur ein Spieler angezeigt. Ich werde morgen noch
mal schauen, ob das an deinen DS liegt oder ob da noch ein Fehler im DM
steckt. Werde also ein paar Textdaten eingeben und sehen ob es da auch
passiert. Evtl. musst du deine Daten halt doch noch mal neu eingeben.
Wenn ich das geklärt habe, baue ich dir auch noch den Rest; - Spiele des
Spielers, Spieler gegen Spieler.
Das Form sollte auch erst mal nur dem Test der Eingabegeschwindigkeit dienen.
So wird z.B. die Punktzahl des Siegers automatisch eingetragen.
Erwarte also noch nicht zu viel, aber ich hab' Bock auf diese Fingerübung, -
geht also weiter.
gruss ekkehard
Hallo,
Das mit dem Kombi konnte ich klären, - Abfrage falsch formuliert.
Jetzt habe ich ein Problem mit einer Abfrage, und würde gerne die
Regulars um Hilfe bitten
Diese Abfrage
SELECT S.Spielername, T.BR_Spieler1, S1.Spielername, T.BR_Spieler2, S2.Spielername, T.BR_Sieger, T.Spieldatum, T.TurnierArtID_F, T.SpielID
FROM Spieler AS S2
INNER JOIN (Spieler AS S1
INNER JOIN (Spieler AS S
INNER JOIN Turniere AS T
ON S.SpielerID = T.Spieler1ID_F)
ON S1.SpielerID = T.Spieler2ID_F)
ON S2.SpielerID = T.SiegerID_F
funktioniert als Abfrage geöffnet tadellos.
Als DS-Herkunft eines Forms nicht. Da wird beim Wechsel der Ansicht
aus aus der ControlSource "S1.Spielername" plötzlich "S.Spielername", -
beim Sieger (S2.Spielername) das Gleiche.
Kann mir einer erklären was ich da übersehe/falsch mache?
Aliase für die Felder helfen auch nicht.
gruss ekkehard
Hallo Ekkehard,
sorry für die später Antwort aber ich war gestern leider den ganzen tag unterwegs.
Ich kann mich nur nochmal bedanken.
Und wie gesagt wenn ich die daten nochmal alle eingeben muss, ist kein Problem :)
Ich hab auch schonmal in deine DB rein geschaut.
Also so eine Combobox ist ja wirklich krass :)
Ich würde sagen, ich stelle meine ganzen Fragen am ende, wenn die DB richtig läuft.
Sonst wenn ich die Fragen jetzt stelle, geht das eigentliche Problem dann unter hier im Thread.
Hallo Andy,
Kein Problem, - bin dran.
ZitatUnd wie gesagt wenn ich die daten nochmal alle eingeben muss, ist kein Problem
Nein brauchst du nicht. Bis Auf einen DS konnte ich jetzt alle importieren.
Leider muss ich jetzt spontan für 2-3 Stunden weg. Geht dann aber weiter.
gruss ekkehard
Hallo,
@Regulars
Meine Frage aus vorigem Post hat sich erledigt. Habe die Abfrage jetzt als
gespeicherte Abfrage im UFo als DS-Herkunft hinterlegt, - das funzt.
War 'ne schwierige Geburt. Lag natürlich an mir selber, - zu viel
Ablenkung.
@andy Soweit läuft die DB. Layout musst du halt nach deinen Vorstellungen anpassen.
Ausserdem, - ich habe nur die benötigten Controls "ordentlich" benannt, da
musst du alle Felder kontrollieren und entsprechend anpassen.
Was ich noch nicht implementiert habe ist die Eingabe neuer Spieler in die
Kombis. Aber vielleicht versuchst du das mit dieser Anleitung (https://www.donkarl.com?FAQ4.13) ja selber mal.
Ich hätte dann noch ein paar Kleinigkeiten, die man einbauen könnte
- autom. Aufklappen der Kombis (Methode .Dropdown)
- autom. Speichern nach Auswahl des Siegers und Sprung zu neuem DS
- farbliche Kennzeichnung des höheren BR
- statistische Angaben (Anzahl Spiele, Anzahl gewonnene, Verhältnis zum Gegner, yni)
Wegen der Fairness gegenüber den Regulars möchte ich dich noch darüber aufklären,
dass es hier normal nicht üblich ist "fertige" Anwendungen zu bekommen. Deshalb
wird jetzt auch erwartet, dass du dich auf dieser Grundlage bemühst weiter zu lernen.
gruss ekkehard
Hallo Ekkehard,
erstmal vielen lieben Dank für alles :)
Das du hier keine fertige Anwendung bekommst, das dachte ich mir schon vorher.
Deshalb war es mir wichtig, das ich wiederholt gesagt habe, das ich es lernen möchte.
Aber bei mir ist halt die Schwierigkeit wegen meiner Erkrankung dinge zu merken.
Ich muss sie aufschreiben. Aber was soll ich mir aufschreiben was ich nicht verstehe.
Deshalb hab ich ja darum gefragt, ob Jemand die Geduld hat mir das Schritt für Schritt zu erklären.
Denn selbst mit der DB die du Modifiziert hast, wenn ich die Befehle lese.
Es ist sehr schwierig für mich zu verstehen, was bei welchem Schritt passiert.
Aber dein Handeln verstehe ich natürlich auch.
Es ist bei mir manchmal auch so, bevor ich 100 Fragen beantworten muss, ist man dazu geneigt hinzugehen und sagen :"Gib her ich mach das eben selbst" :)
Aber ich habe gefragt und gebeten, das man es mir beibringt und erklärt.
Nicht das man es mir auf dem Silbertablett serviert :).
Ich hab vollstes Verständiss dafür wenn Jemand hingeht und sagt :"Nö du, da hab ich weder bock noch zeit um es dir zu erklären". Deshalb hab ich ja gefragt. Fragen ist nicht gleich Erwarten :)
Das du mir jetzt geholfen hast, betrachte ich auf keinen Fall als Selbstverständlich.
Denn das ist es nicht. Du hast Zeit und Mühen geopfert, wofür ich dir sehr dankbar bin.
Ich werde versuchen die Eingabe der neuen Spieler mithilfe von deinem Link zu implementieren.
Ob ich es schaffe keine Ahnung, aber ich versuche es.
Und werde später berichten.
ZitatIch hätte dann noch ein paar Kleinigkeiten, die man einbauen könnte
- autom. Aufklappen der Kombis (Methode .Dropdown)
- autom. Speichern nach Auswahl des Siegers und Sprung zu neuem DS
- farbliche Kennzeichnung des höheren BR
- statistische Angaben (Anzahl Spiele, Anzahl gewonnene, Verhältnis zum Gegner, yni)
Das klingt nice. Aber wenn ich das jetzt machen soll.
Natürlich will ich mich dem annehmen.
Zum jetzigen Zeitpunkt, wüsste ich aber nicht wo ich die Befehle dazu finde.
Und wo ich sie einbaue.
Ist jetzt ein blödes Beispiel.
Ich kann dir erklären wie man bei einem Auto die Bremsscheiben und Beläge wechselt.
Weil ich mich damit auskenne.
Aber wenn jemand vor mir steht der nicht wirklich Ahnung hat und mich fragt, ob ich das erklären kann.
Wenn ich dem Werkzeug dahin schmeisse und sage, such dir den Rest im Internet.
Ich glaub nicht, das demjenigen damit geholfen ist.
Das ist jetzt darauf bezogen, das es für euch natürlich einfacher ist, weil ihr euch mit DBs auskennt.
Für mich ist das ne andere Sache.
Und was mir auch wichtig ist, wenn es einige gibt die denken.
Ich wäre nur zu faul um etwas zu versuchen.
Dem ist nicht so.
Wenn man Gesundheitliche Probleme und Einschränkungen hat, ist es leider nicht so schön.
Trotzdem bis hier hin, vielen lieben Dank für die Hilfe :)
Kleines Update.
Wie vermutet ich hab es nicht geschafft.
Ich weiss leider nicht woran es liegt.
Zitat'************** CODE START **************
Response = acDataErrAdded
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Tabellenname", dbOpenDynaset)
rs.AddNew
rs!Feldname = NewData
rs.Update
rs.Close : Set rs = Nothing
Set db = Nothing
'************** CODE ENDE **************
Tabellenname ist klar.
Aber bei Feldname gibt es Probleme. Egal was ich da eingebe. Es kommt immer ein Fehler.
Die Sache ist auch welcher Feldname ist damit gemeint ?
Der Feldname der cbobox ist : Spieler1ID_F
Der nimmt das aber nicht.
Eingegeben hab ich den Befehl unter :
frmSpiele---->Designview---->Dann auf die cbobox---->Eigenschaften---->Ereignis---->Bei nicht in der Liste.
Bei Tabellenname hab ich "Spieler" eingegeben weil die Tabelle nunmal "Spieler" heißt.
Also so:
ZitatPrivate Sub cboSpieler1_NotInList(NewData As String, Response As Integer)
Response = acDataErrAdded
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Spieler", dbOpenDynaset)
rs.AddNew
rs!Spieler1ID_F = NewData
rs.Update
rs.Close: Set rs = Nothing
Set db = Nothing
End Sub
Aber wie gesagt, ich bekomme direkt einen Fehler.
Aber davon abgesehen, ich hab noch ein anderes Problem gesehen bei der Datenbank.
Wenn ich nur einen Spieler eingebe. Das Geht nicht. Der will unbedingt das ich einen 2. Spieler eingebe.
Das ist aber schwierig. Wenn einer neu ist und gegen einen spielt der schon in der Liste ist.
Dann gibt es zwischen den beiden ja noch keine Begegnung.
Und da muss ich dann sehen können ... wie hat der Spieler, der in der Liste ist, die letzten Begegnugen gekämpft.
Also ich muss auch einen einzelnen Spieler ohne Spieler2 abrufen können.
Das geht in dem Formular aber nicht weil ich ja gezwungen bin einen 2. Spieler einzugeben.
Dann hab ich mal getestet.
Viele Kämpfe oder Begegnungen findet der gar nicht.
Als Beispiel in meiner Ursprünglichen DB haben Spieler X und Spieler Y schon 3 mal gegeneinander gekämpft.
In diesem Fall andysvw gegen nightmares.
Wenn ich das in der neuen DB eingebe findet der gar nichts.
Und wenn ich da auf Fehler suchen soll ist das unmöglich für mich :(
Hallo,
ZitatEs ist sehr schwierig für mich zu verstehen, was bei welchem Schritt passiert.
Ich habe mir doch extra die Mühe gemacht und den Code kommentiert.
Weitere Hilfe zu den Schlüsselwörtern erhältst du wenn du den Cursor darauf
setzt und F1 drückst.
rs.AddNew
rs!Spieler1ID_F = NewData
rs.Update
Fast. In der Tabelle "Spieler" gibt es nur das Feld "SpielerID". Dieses ist aber ein
AutoWert um den du dich nicht kümmern musst, wie der Name schon sagt.
NewData ist der neue Spielername, also
rs.AddNew
rs!Spielername = NewData
rs.Update
ZitatUnd da muss ich dann sehen können ... wie hat der Spieler, der in der Liste ist, die letzten Begegnugen gekämpft.
Das ist eine neue Anforderung, geht aber natürlich auch. Da muss man eben
nach Eingabe des ersten Spielers das UFo auf alle Spiele des Spielers filtern
.ucAlleSpiele_Spieler.Form.Filter = _
"Spieler1ID_F = " & .cboSpieler1 & " OR Spieler2ID_F = " & .cboSpieler1
Man könnte auch für jeden Spieler zusätzlich ein eigenes UFo mit allen
seinen Spielen platzieren (wenn der Platz reicht). Oder das jetzige UFo
über ein Register legen und die Ansicht darüber umschalten.
Die erste Lösung halte ich für besser, denn du brauchst ja einen schnellen
Überblick.
Mal eben eine Frage zwischendurch; - es gibt keine Heim-/Gastspieler, will
sagen, die Reihenfolge ist egal?
ZitatViele Kämpfe oder Begegnungen findet der gar nicht.
Da muss ich überprüfen ob beim Import was schief gelaufen ist.
gruss ekkehard
Hallo Andy,
DS sind vorhanden. Da hat sich nur ein Tippfehler in den Filterstring
eingeschlichen. Habe ich korrigiert.
Dabei ist mir eingefallen, dass dir vielleicht gar nicht bewusst ist, dass
die Kombis keine Felder zum Suchen/Finden sind; - die sind gebunden.
D.h. wenn du darin etwas änderst, wird wird der DS des Spiels verändert, da
steht dann z.B. ein anderer Spieler drin wenn du des DS speicherst.
Das habe ich jetzt abgeschaltet, - nur neue, nicht gespeicherte DS können
geändert werden.
Deshalb habe ich dir im Formkopf noch ein Kombi zur Suche nach einem Spieler
eingebaut. Nach Auswahl werden dir dann alle Spiele angezeigt, auch die aus
der anderen Liga (könnte man auch ausfiltern). Eine andere Sortierung müsste
man ergänzen.
gruss ekkehard
Sorry, im letzten Moment eingefallen, das es so nicht geht.
Melde mich morgen.
Konnte es noch schnell lösen.
Zitat von: Beaker s.a. am März 15, 2024, 18:32:20Konnte es noch schnell lösen.
Hallo Ekkehard,
erstmal vielen vielen Dank.
Ja soweit funktioniert es jetzt.
Das feine ... also Aussehen etc. das bekomme ich alles selber hin.
Wie schriftfarbe und art etc.
ZitatDeshalb habe ich dir im Formkopf noch ein Kombi zur Suche nach einem Spieler
eingebaut. Nach Auswahl werden dir dann alle Spiele angezeigt, auch die aus
der anderen Liga (könnte man auch ausfiltern). Eine andere Sortierung müsste
man ergänzen.
Ja das wäre Klasse, wenn man das auseinander halten könnte :)
Weil es sind 2 Wettbewerbe mit jeweils verschiedenen Regeln deshalb sind die Resultate da auch anders.
Aber sonst ist die DB wirklich wirklich verdammt gut und ich bedanke mich nochmal für die Hilfe.
Allerdings ich bekomme das Problem mit dem Spieler hinzufügen leider noch nicht gelöst.
Ich hab den Code mal angepasst
Private Sub cboSpieler1_NotInList(NewData As String, Response As Integer)
Response = acDataErrAdded
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Spieler", dbOpenDynaset)
rs.AddNew
rs!Spielername = NewData
rs.Update
rs.Close: Set rs = Nothing
Set db = Nothing
End Sub
Macht er trotzdem nicht.
Ich bekomme die Fehlermeldung: "Der von Ihnen eingegebene Text ist kein Element in der Liste".
Set rs = db.OpenRecordset("Spieler", dbOpenDynaset)
Hier muss ich die Tabelle angeben, es geht ja nicht ohne. Ich hab sowohl "Spieler" als auch "SpielerID" versucht.
Ich erhalte in beiden Fällen eine Fehlermeldung.
Damit ich hier nichts falsch mache.
Ich gehe auf das combofeld von Spieler 1 und gebe mal aus Spaß Gorilla55 ein.
Und weil der Name nicht bekannt ist, sollte der es ja hinzufügen.
Also tippe ich z.B. Gorilla55 ein und wenn ich dann enter drücke kommt sofort die Fehlermeldung:
"Der von Ihnen eingegebene Text ist kein Element in der Liste"
Und wenn ich auf debuggen gehe bemängelt er genau diese Zeile
Set rs = db.OpenRecordset("Spieler", dbOpenDynaset)
Aber wie gesagt Ich muss ja einen Tabellennamen angeben. Entweder "Spieler" oder "SpielerID".
Jedoch bei beidem erhalte ich diese Fehlermeldung.
ZitatMal eben eine Frage zwischendurch; - es gibt keine Heim-/Gastspieler, will
sagen, die Reihenfolge ist egal?
Ansich ist das egal. Aber weil es mir auf die schnelligkeit ankommt, wenn die Paarung aufgerufen wird. Wollte ich das immer direkt so abtippen wie es erscheint. Aber steng genommen gibt es kein heim oder auswärts.
Nur wenn die Paarung z.B. da steht : Mickey vs Pluto dann will ich nicht drüber nachdenken müssen wer an welche stelle kommt. Spiel 1 Mickey vs Pluto dann gebe ich das so ein. Nehmen wir an beim nächsten mal Pluto vs Mickey dann gebe ich auch Pluto vs Mickey ein. Wenn es auf die Zeit ankommt wenn man es manuell eintippen muss, dann geht zeit verloren wenn ich vorher drüber nachdenken müsste oh der hier ist heim der hier ist auswärts. Ich tippe es einfach ab wie die Begegnung am Monitor erscheint. Ist für mich am schnellsten gewesen bis jetzt :)
Hallo Andy,
Wenn ich keine Tomaten auf den Augen habe, sehe ich da keinen Fehler.
Wichtig ist, dass die Eigenschaft "Nur Listeneinträge" auf "Ja" steht
und die Eigenschaft "Bei Nicht in Liste" auf "[Ereignisprozedur]".
Da du ja nun 3 Kombis hast und ich eine entsprechende Funktion nur
kopieren musste, habe ich dir das mal für alle Kombis (ausser Spieler,
wo es für mich keinen Sinn mehr ergeben würde) eingebaut.
Das mit dem zusätzlichen Filter auf den Wettbewerb funzt noch nicht
bzw. nur bei TurnierArt =1.
Versuche ich noch raus zu finden, was da falsch ist. Kann aber 1-2
Tage dauern, - Wochenendverpflichtungen.
gruss ekkehard
Hallo Andy,
Sind oft nur Kleinigkeiten. Hier war es ein fehlendes Klammerpaar.
Jetzt werden also nur noch die Spiele des ausgewählten Turniers
angezeigt.
Jetzt musst du mal testen wie schnell du neue Spiele erfassen und
deinen Tipp abgeben kannst. Ich weiss ja nicht wie lang so ein Spiel
dauert, aber vielleicht kannst du in der Zeit erst die BR-Punkte
eintragen und nicht schon vor dem Tipp. Denn sehen kannst du sie da
ja schon, - wo sonst solltest du die abschreiben.
Was man machen könnte, wenn's hilft, wäre die letzte Punktzahl der
Spieler vorzugeben.
gruss ekkehard
Hallo Ekkehard,
also ich weiss nicht was ich sagen soll außer Danke Danke Danke !!!
WOW das geht wirklich so viel schneller jetzt.
Sie funktioniert wirklich so viel besser als ich mir das je vorstellen konnte.
Ein Problem gibt es leider dennoch.
Ich kenn nur die Ursache leider nicht.
Wenn ich die DB aufrufe steht der Cursor ja in Spieler 1 drin, aber ich kann dann nichts schreiben.
Ich hab zuerst Gedacht meine Tastatur wäre kaputt.
Aber das ist sie nicht.
Spieler 2 genau das gleiche, ich klicke mit der Maus in das Feld und ich kann nichts machen.
Keine Buchstaben eingeben oder sonst was.
Wenn ich oben in "Finde Spieler" einmal mit der Maus rein klicke und dann in Spieler 1 oder 2 nochmal hinein klicke.
Dann kann ich auch dort normal schreiben.
Aber wenn ich die DB schließe und aufrufe kann ich in Spieler 1 oder 2 nichts machen und nichts schreiben.
Erst wie gesagt wenn ich oben in Finde Spieler rein klicke.
Ich hab auch mal eine Fehlermeldung bekommen : Laufzeitfehler.
Aber nichts desto trotz, das hat mich echt umgehauen.
Wahnsinn was du gemacht hast.
Die DB ist wirklich Perfekt geworden :)
Nochmal vielen Dank Ekkehard
Hallo Andy,
Ja, das ist Absicht, damit man an alten DS nichts mehr ändern kann.
Denn, die Kombis S1, S2 und Sieger sind, wie schon beschrieben, gebunden.
D.h., beim Öffnen wird ja sofort das erste Spiel des gefilterten Turniers
angezeigt, und du kannst durch alle Spiele blättern.
Um ein neues Spiel einzugeben musst du erst zu einem neuen DS navigieren.
Das geht über den Button mit dem * in der Navigationsleiste unten im Form.
Das sind alles gesteuerte Abläufe, die man deinen Anforderungen entsprechend
anpassen kann.
Was man machen könnte wäre dies vom Finden-Kombi aus anzustossen. Z.Zt. wird
da ja zum ersten Spiel des Spielers navigiert. Da könnte man dann auch direkt
den ausgewählten Spieler als Spieler1 eintragen, und den Focus auf Spieler2
setzen. Ist nur blöd, wenn du dir einen Spieler nur ansehen möchtest ohne ein
neues Spiel zu starten, - müsstest du jedes mal ESC drücken.
Könnte man aber vielleicht mit einer Checkbox abfangen.
Dabei fällt mir gerade ein, dass das HFo nicht auch auf den Spieler gefiltert
wird. Das könnte zu Verwirrung führen beim Abbruch. Den Filter bau ich dir am
späten Nachmittag noch ein.
gruss ekkehard
Hallo Ekkehard,
nee alles gut.
Wenn ich weiss das es absicht ist, dann ist alles gut :)
ZitatDabei fällt mir gerade ein, dass das HFo nicht auch auf den Spieler gefiltert
wird. Das könnte zu Verwirrung führen beim Abbruch.
Was genau meinst du damit ? :)
Eine kleine Sache noch Ekkehard, wenn ich da eine ellen lange liste habe bei der Abfrage später irgendwann.
Und ich einfach nur ans ende von der Liste will. Kann ich da so wie bei meiner ursprünglichen DB so buttons einbauen wo ich dann ans ende springen kann ?
Oder würde das bei dieser Variante nicht funktionieren ?
Hallo Andy,
ZitatWenn ich weiss das es absicht ist, dann ist alles gut
Schlechte Herangehensweise, du musst lernen zu verstehen was da passiert. *)
Ich habe das jetzt erstmal wieder rausgenommen, - musst du halt aufpassen,
das du keine alten Spiele veränderst. Ich bau dir da noch was ein.
Hier ist jetzt der Filter für das HFo eingebaut.
ZitatKann ich da so wie bei meiner ursprünglichen DB so buttons einbauen wo ich dann ans ende springen kann ?
Unnötig, diesen Button bringt ein Form bereits von Haus aus in der Navi-Leiste
am unteren Bildrand mit, - >|.
gruss ekkehard
*) Vielleicht verbringst du mehr Zeit mit lesen als zu schreiben. Die Online-
Hilfe ist der erste Anlaufpunkt, dann die diversen Links, die du hier bei vielen
Regulars findest, und eine Suchmaschine deiner Wahl. Fachliteratur ist auch
heute zu Tage noch nicht zu verachten.
Hallo Ekkehard,
danke für deine Info :)
Also ich passe auf mit dem überschreiben vom alten Datensatz.
Ich habe mir das auch notiert und dann passe ich auf.
Dadurch das vieles einfacher ist jetzt mit der DB, hab ich auch mehr Zeit auf verschiedene Dinge aufzupassen.
Ich gebe es ungerene zu Ekkehard, aber ich hab Probleme dinge zu lesen und zu verstehen.
Du kannst mir ein Buch geben egal welches.
Ich lese es. Frag mich nach 10 Seiten was ich gelesen habe. Ich kann es dir leider nicht beantworten.
Seit 2016 als ich meine Erkrankung bekam, war es aus mit vielem.
Mein Gehirn speichert viele Informationen leider nicht mehr und vieles wird auch durcheinander gespeichert.
Deshalb lesen Fachliteratur und links alleine helfen mir nicht.
Es ist ein zusammenspiel von vielem.
Ich muss es sehen. Also visualisieren. Und während dessen muss man es mir dann erklären.
Und ich muss es mir dabei aufschreiben.
Und das ganze wenn möglich auf Video festhalten.
So kann ich einiges auf meine Weise lernen. Nicht alles. Aber einiges.
Und wenn ich vergessen habe, schaue ich mir das Video wieder an und lese nach was ich aufgeschrieben habe.
So kann ich einiges wieder abrufen.
Ich mache das nicht um menschen zu verägern.
Oder weil ich zu faul bin, oder weil ich denke ach lass alles mal die anderen machen.
Das ist nicht so.
Aber wie gesagt mein Gehirn speichert viele Informationen nicht mehr.
Sie werden zwar gespeichert aber nur kurz und durcheinander.
Heute kann ich auch keine Ausbildung mehr machen, ich würde die Prüfung gar nicht bestehen.
Egal worin. Deshalb bin ich auch voll Erwerbsgemindert.
Gesunde Menschen, da ist alles kein Problem.
Früher konnte ich auch so vieles.
Heute nicht mehr. Ob es mir passt oder nicht.
Ich muss das beste daraus machen.
Ich schreibe das auch nicht weil ich Mitleid will oder sonstwas.
Aber ich glaube wenn man das nochmal erwähnt das es Gesundheitliche Gründe hat.
Ist es vielleicht nochmal besser zu verstehen, das es nicht daran liegt das ich zu wenig lese oder verstehe oder sonst was.
Sondern mein Gehirn lässt vieles einfach nicht mehr zu.
Im Alltag bin ich auch viel auf Hilfe von meiner Frau und Kindern angewiesen.
Deshalb bin ich ja so froh, das du mir in dieser Situation auch so hilfst oder generell alle mir hier helfen oder geholfen haben :)
Hallo Andy,
Das mit deiner Behinderung tut mir leid. Brauchst du halt etwas länger
um mit Access zurecht zu kommen.
Ich habe noch man ein bisschen gebastelt. Hauptsächlich deshalb
ZitatIst nur blöd, wenn du dir einen Spieler nur ansehen möchtest ohne ein
neues Spiel zu starten, - müsstest du jedes mal ESC drücken.
Ist ja wirklich blöd wenn du erst ein neues Spiel starten musst nur um die
Spiele gegen Spieler1 zu sehen.
Ich bin deshalb zu deinem ersten Entwurf mit den zwei Kombis zurück gekehrt.
Das läuft jetzt also alles über diese beiden Kombis. Die Kombis im Detail-
Bereich sind jetzt wirkungslos, deshalb auch deaktiviert. Habe es aber so
belassen, da es damit am Einfachsten ist die Namen anzuzeigen. Textfelder
müssten ungebunden sein, und dann muss man die extra füllen.
Somit kannst du, unabhängig von einem neuen Spiel (DS) zwei Spieler miteinander
vergleichen. Wobei nur bei Spieler1 nach Auswahl alle Spiele angezeigt werden.
Nach Auswahl von Spieler2 dann die direkten Begegnungen. Willst du alle Spiele
von Spieler2 sehen musst du den bei Spieler1 auswählen.
Um ein neues Spiel zu starten hast du jetzt zwei Möglichkeiten,
1.
vor Auswahl von Spieler1 setzt du das Häkchen "neues Spiel bei Auswahl",
und wählst Spieler1. Wichtig, funzt nur so.
Es wird automatisch ein neuer DS erstellt und Spieler1 wird eingetragen.
Dann wählst du Spieler2, dieser wird ebenso eingetragen und der Focus wird
auf das Sieger-Kombi verschoben. Das funzt wie gehabt.
!Beachte! Dabei wird das UFo nicht aktualisiert, du siehst also keine Spiele.
Erst nach Auswahl des Siegers und speichern des DS. Das geht i.Ü. am Schnellsten
wenn du links auf den Datensatzmarkierer klickst.
2. Du setzt das Häkchen nicht, dann läuft es so wie oben schon beschrieben.
Willst du nach Auswahl von Spieler2 noch mal alle Spiele von Spieler1 sehen musst
den nur im ersten Kombi noch einmal auswählen. Wenn dann beide Spieler gewählt
sind klickst du auf den Button und es passiert das Gleiche wie bei 1., nur in
einem Rutsch.
Die erste Methode halte ich für schneller wenn du nicht unbedingt erst den Vergleich
anstellen willst.
Dann habe ich noch Folgendes ergänzt. In der Tabelle Spieler habe ich das Feld
"BR_Punkte" eingefügt. Diese lassen sich ja nicht in einer Abfrage berechnen.
Im Moment stehen da die Punkte des letzten Spieles der Spieler drin. Diese werden
jetzt auch in den Kombis angezeigt und in neue Spiele übernommen. Wenn diese nur
in diesem Turnier geändert werden, bräuchtest du nicht mehr manuell zu ändern.
Allerdings werden diese jetzt noch nicht aktualisiert. Das müsste nach Auswahl
des Siegers passieren.
Wenn du weisst, wie die neuen Punkte berechnet werden, könnte man das berücksichtigen.
edit: Ganz vergessen, den Code der Buttons auf dem Menu-Form habe ich auch leicht
verändert. Da werden jetzt die wechselnden Überschriften gesetzt, und die TurnierArt
wird mit einer öffentlichen Property zwischengespeichert.
gruss ekkehard
Hallo Ekkehard,
vielen vielen Dank für deine Anpassungen.
Ich hab soweit alles verstanden.
Und komme sehr gut zurecht.
Das einzige wo noch Probleme sind.
Wie du geschrieben hast, wenn ich ein neues Spiel anlegen möchte.
VOR Auswahl Spieler 1. Haken setzen bei "neues Spiel bei Auswahl".
So wenn ich aber einen ganz neuen Spieler eingeben möchte z.B. Gorilla5000 und ich zu Spieler 2 will, kommt direkt eine Fehlermeldung : "Der von Ihnen eingegebene Text ist kein Element der Liste"
Er bemängelt damit wenn ich das richtig verstehe, das der Name nicht existiert.
Klar. Ist ja ein neuer Spieler. Er kann also nicht in der Liste sein, ergo soll er ihn anlegen.
Macht er aber nicht.
Ich hab es auch mit der zweiten Variante versucht die du genannt hast.
Sprich Spieler 1 und Spieler 2 erstmal eintragen und dann auf neues Spiel klicken, dann passiert alles in einem rutsch.
Aber auch da, das gleiche. Sobald ich einen Spieler eintippe der nicht in der Liste ist.
"Der von Ihnen eingegebene Text ist kein Element der Liste".
Dann habe ich noch eine Rückfrage bezüglich der BR. Nehmen wir an Gorilla5000 BR 6.800.000 spielt gegen Ironman56 BR 7.500.000.
Beide Spieler sind nicht in der Liste. Aber Ich muss die dazugehörigen BR ja eintragen.
Wo lege ich die BR Zahl an ?
Gorilla5000 und die BR Zahl ? trage ich die BR Zahl dann im Detailbereich ein ?
Also neben den deaktivierten Spieler 1 und 2 ?
Also als Beispiel. Ich setze den Haken rein "neues Spiel bei Auswahl" und schreibe als Beispiel Gorilla5000 dann BR im detailbereich sagen wir 6.800.000 und Spieler 2 Ironman56 und seine BR im Detailbereich 7.500.000 und dann wähle ich einfach nur den Sieger aus.
oder
Ich trage Spieler 1 und BR und Spieler 2 mit BR und wähle den Sieger aus und klicke auf "neues Spiel"
Ansich finde ich diese Lösung Klasse.
Auch das die BR gespeichert werden am ende und ich das nicht wieder manuell eingeben muss.
Nur wie lege ich komplett neue Spieler an ?
Er lässt es so nicht zu.
Das ist nicht wie bei der vorherigen DB wo dann festgestellt wird das es ein neuer Eintrag ist und er dann automatisch angelegt wird.
ZitatNur wie lege ich komplett neue Spieler an ?
Lege einfach ein Formular mit der Tabelle "Spieler" an.
Den Rest schau ich mir noch mal an.
Zitatwill, kommt direkt eine Fehlermeldung
Da fehlt der Eintrag "Ereignisprozedur" in der Eigenschaft "Bei nicht in Liste"
im 1. Kombi, musst du nachtragen, die Prozedur dazu existiert. Habe ich nicht
aufgepasst. Ist vermutlich beim Umbenennen passiert.
ZitatAlso neben den deaktivierten Spieler 1 und 2 ?
Gorilla5000 und die BR Zahl ? trage ich die BR Zahl dann im Detailbereich ein ?
Ja, aber die werden (noch) nicht bei den Spielern gespeichert nur in Turniere.
Ich bau dir das noch ein, dauert aber ein paar Tage.
Also
ZitatDa fehlt der Eintrag "Ereignisprozedur" in der Eigenschaft "Bei nicht in Liste"
im 1. Kombi, musst du nachtragen, die Prozedur dazu existiert. Habe ich nicht
aufgepasst. Ist vermutlich beim Umbenennen passiert.
Das hab ich hinbekommen mit der Ereignisprozedur.
Es werden jetzt auch neue Spieler angelegt, aaaaber ....
Wenn ich dann einen Haken setze bei "neues Spiel bei Auswahl" und dann den neu erstellten Spieler z.B. Gorilla5000 eingebe kommt :
"Laufzeitfehler 2105" Sie können nicht zu dem angegebenen Datensatz springen.
Ich wollte nämlich nur mal zum testen was eingeben. Gorilla5000 bei Spieler 1 und Gorilla7000 bei Spieler 2.
Die Namen kann ich anlegen. Das ist kein Problem. Der sagt ja auch Spieler nicht vorhanden, möchten Sie den hinzufügen ? Dann klicke ich auf ja. Beide neuen Spieler sind auch jetzt drin.
Aber sobald ich einen Haken setze bei "neues Spiel bei Auswahl" und nur den ersten Spieler 1 Gorilla5000 aus der Liste auswähle kommt sofort der Laufzeitfehler.
Wende ich die 2. Methode an. Sprich. Ich setze nicht vorher den Haken. Sondern ich wähle oben erstmal Gorilla5000 aus bei Spieler 1 und Gorilla7000 bei Spieler 2 und gehe dann auf den Button "Neues Spiel".
Geht auch nicht weil Gorilla5000 als Spieler 1 nicht nach unten in den Detailbereich wandert. Da steht nur Spieler 2 Gorilla7000. Und bei Sieger kann ich auch nur den Gorilla7000 auswählen, weil der Spieler 1 fehlt.
Das die aktuelle BR zahl nicht den Spielern zugeordnet wird erstmal, ist nicht schlimm.
Hauptsache sie werden im Turnier gespeichert.
Aber ich komme ja nicht mal dazu ein neues Spiel mit neuen Spielern anzulegen wegen dem Laufzeitfehler und dem anderen Fehler.
Deshalb lass ich die 1.4 Version erstmal auf Seite. Ich verwende deine 1.3, weil da läuft alles.
Ich gebe die neuen Spieler an und die BR zahlen und drücke einmal enter und der übernimmt alles.
Okay ich muss aufpassen das ich den alten DS nicht verändere. Aber da läuft alles tadellos :)
Und wenn es paar tage dauert, ist nicht schlimm :)
Ich bin ja froh und dankbar das du dir überhaupt die Zeit nimmst :)
Muss ich noch mal checken. War der Meinung es hatte bei mir alles gefunzt.
Ich bleib am Ball.
Danke dir Ekkehard :)
Hallo Andy,
Fehler gefunden und ausgemerzt. Hoffentlich hab' ich keine neuen
eingebaut.
Ergänzung:
Bei Änderung der BR-Punkte im Detailbereich wird die neue Punktzahl
jetzt beim zugehörigen Spieler gespeichert, so dass sie beim nächsten
Spiel wieder autom. eingetragen wird.
Wie gesagt, wenn du herausbekommst wieviel Punkte für einen Sieg/eine
Niederlage berechnet werden, könnte man das auch berechnen und speichern.
Zur weitere Beschleunigung deiner Eingaben fällt mir jetzt aber auch nichts
mehr ein.
gruss ekkehard
Hallo Ekkehard,
Also man kann ruhig 1 Punkt für einen Sieg nehmen und 0 Punkte für die Niederlage.
Es gibt ja dort keine Tabelle.
Aber wenn man Sieg und Niederlage statistisch festhalten möchte, dann 1 Punkt für einen Sieg und 0 Punkte für die Niederlage :)
Und ich bin echt begeistert, die DB läuft :)
Vielen vielen Dank nochmal für deine Mühen.
Wie immer ist da noch ein aaaaaber ;D.
Variante 1 Haken vorher setzen, spieler eingeben. BR Punkte eingeben und Sieger eintragen auch bei "neuen" Spielern kein Problem :)
Variante 2. Wenn ich einen neuen Spieler bei Spieler 1 und neuer Spieler bei Spieler 2 und den Rest also BR und Sieg eingeben will und dann den "neues Spiel" button klicke, kommt sofort ein Laufzeitfehler wieder.
Man braucht den "neues Spiel" button ja nicht zwangsläufig.
Mit Variante 1 geht es ja ohne Probleme :)
Und das ist es auch nicht wert, deshalb wieder keine Ahnung wie viel zeit zu investieren.
Und das musst du auch nicht.
Ich kann den "neues Spiel" button ja auch entfernen.
Aber wenn du sagst, nö ich hab den nicht umsonst gemacht.
Dann okay, wie gesagt bei "neuen Spielern" geht der "neues Spiel" button nicht.
Und eine Frage oder bitte hätte ich noch, aber nur ... wenn es nicht zu viel Umstände macht.
Und zwar die Formatierung der Zahlen. Also die BRs. Kann man da punkte setzen nach den stellen ?
Also nicht 1000000 sondern 1.000.000
Aber die DB ist wirklich Großartig. Besser geht es wirklich nicht :)
Und ich habe noch eine Verständnissfrage.
Wenn ich die DB aufrufe, werden ja alle Spiele aufgelistet.
Was Klasse ist.
Dann gebe ich bei Spieler 1 z.B. andysvw ein, dann listet er mir alle Spiele von andysvw auf.
Finde ich auch Klasse.
Gebe ich bei Spieler 1 andysvw ein und bei Spieler 2 nightmares.
Werden alle Spiele aufgelistet zwischen andysvw und nighmares.
Auch Klasse :)
Aber wenn ich jetzt bei Spieler 2 nightmares das Feld leer mache (also kein Spieler drin)
Und bei Spieler 1 z.B. happy eingebe und dann Enter drücke, weil ich die letzten Spiele von happy sehen will.
Dann kommt nichts mehr.
Mach ich da was falsch ?
Anders gesagt, wenn ich nur einen Spieler eingebe bei Spieler 1 egal welchen und ich enter drücke, kann ich die letzten Spiele sehen von dem Spieler.
Aber sobald ich 2 Spieler eingebe und einen direkten Vergleich zwischen den beiden mache, kann ich danach nicht mehr eine Einzelabfrage von Spieler 1 machen.
Weil die Liste ist dann komplett leer.
Liegt es daran das ich da was falsch mache ? Oder fehlt da vielleicht ein clear button ?
Mit clear button meine ich, das die DB dann in die Ausgangskonfiguration kommt, als wenn ich die DB gerade öffnen würde.
In meiner alten DB hab ich ja einen clear button eingebaut, das egal was ich da in die Felder eingegeben habe und den clear button klicke.
Dann sind alle Spielernamen gelöscht und die DB geht wieder in die Ausgangskonfiguration als wenn ich die DB gerade öffnen würde.
Hallo Andy,
ZitatVariante 2. Wenn ich einen neuen Spieler bei Spieler 1 und neuer Spieler bei Spieler 2 und den Rest also BR und Sieg eingeben will und dann den "neues Spiel" button klicke, kommt sofort ein Laufzeitfehler wieder.
Ist klar, bevor du den Button klickst gibt es ja noch keinen neuen DS, sieht
nur so aus.
Also erst beide Spieler auswählen,
dann klicken und
dann die Punkte
ändern und den Sieger auswählen.
ZitatAber wenn du sagst, nö ich hab den nicht umsonst gemacht.
Ja, sag' ich. Die Idee war, dass du dir die Spieler ansehen kannst
ohnezwangsläufig ein Spiel zu starten. Ist wohl die langsamere Variante. Mit dem
Häkchen geht's gleich los.
Was mich bei beiden Varianten noch stört ist, dass das UFo die Begegnungen nicht
mehr anzeigt. Das bekomme ich aber noch in den Griff.
Tausenderpunkt habe ich eingestellt.
ZitatBesser geht es wirklich nicht
Besser geht immer bei Anwendungen. *)
ZitatMach ich da was falsch ?
Nichts. Wieder mein Fehler, nicht auf das leere Feld geprüft. Habe ich korrigiert.
Du brauchst das Feld aber auch gar nicht zu leeren, einfach bei Spieler1 einen
anderen auswählen, und alle seine Spiele werden angezeigt. Das zweite Kombi wird
in diesem Fall gar nicht berücksichtigt. Musst also da auch einen anderen Spieler
auswählen oder den letzten noch mal.
ZitatLiegt es daran das ich da was falsch mache ?
Nein, siehe oben.
ZitatOder fehlt da vielleicht ein clear button ?
Nein, auch den bringt die Navi-Leiste des Form schon mit; - gelber Button "gefiltert".
ZitatAlso man kann ruhig 1 Punkt für einen Sieg nehmen und 0 Punkte für die Niederlage.
Es gibt ja dort keine Tabelle.
Na denn braucht es das Feld bei den Spielern nicht. Das lässt sich dann einfachst
berechnen, - ist ja nur die Anzahl der Siege. Da wundern mich allerdings die hohen
aktuellen Zahlen. Frage ich mich wo die herkommen wenn
ZitatEs gibt ja dort keine Tabelle.
Da würde es sich doch anbieten ein eigenes System der Punktevergabe zu ersinnen.
Denk mal drüber nach.
Dann bräuchtest du auch damit keine Zeit mehr für die Eingabe verschwenden; -
wegen "besser geht immer". Dazu noch
*) Eine Idee wäre zwei zusätzl. UFo einzurichten. Eins mit allen Spielen von S2
ganz rechts und eins in der Mitte mit der Gegenüberstellung. Vielleicht im Kopf
noch mit ein paar statistischen Angaben/Berechnungen angereichert. Passen würde
das weil man den Gegner ja nicht anzeigen muss. In der Mitte reicht ja auch der
Sieger.
gruss ekkehard
Grüß dich Ekkehard,
ahhh okay jetzt hab ich es auch raus mit dem "neuen Spiel" button und es funktioniert auch :)
Und ja du hast recht, das mit dem Haken setzen ist besser :)
Aber ich finde es schön, das man so trotzdem die Wahl hat.
Und das mit dem auflisten aller Begegnungen bei Spieler 1, geht jetzt auch ohne Probleme.
Egal ob man vorher Spieler 2 eingegeben hat oder nicht.
Zu deiner Aussage : Besser geht immer was Anwendungen angeht.
Grundsätzlich gebe ich dir recht :)
ABER ... ich finde es kommt ja auch darauf an welche Dinge man sich wünscht bei einer Anwendung.
Und hier muss ich einfach sagen, du hast das was ich mir immer gewünscht habe um Längen übertroffen.
Also ich bin ziemlich sprachlos, jetzt wo sie läuft.
Ich meine in dieser Variante, das ist unfassbar Genial und gut.
Wirklich. Tausend Dank dafür Ekkehard.
Was die Tabelle oder Punktevergabe angeht, ich glaube.
Trotz deiner positiven Argumente, ist die DB 1.5 so wie sie ist, zumindest für mich wirklich perfekt.
Ich denke, was Sinn machen würde und eine Megahilfe wäre.
Wenn man 2 Spieler eingibt, ich meine damit um zu schauen wie oft sie gegeneinander gespielt haben.
Wenn man dann eine Statistik einbaut die dann zeigt wie es aktuell zwischen den Beiden steht.
Also nehmen wir mal an Spieler X hat gegen Spieler Y 10 mal gegeneinander gekämpft und hat Spieler X hat 7 mal gewonnen und Spieler Y 3 mal.
Das wenn man die Abfrage startet, das am ende der Abfrage irgendwo steht Gesamtbilanz zwischen den Beiden 7:3 für Spieler X.
Bei 10 Spielen oder Kämpfen ist es noch leicht zu sehen wer da die Nase insgesamt vorn hat.
Sind es aber 100 oder 200, ist es unmöglich dann einen Gesamtüberblick zu bekommen.
Also ich meine das wirklich ernst, die 1.5 DB von dir ist wirklich schon Perfekt für mich.
Es lässt keine Wünsche offen.
Spiele sind Megaschnell eingegeben und ich hab sogar noch Zeit übrig.
Das war vorher oder bei meiner erstellten DB unmöglich.
Da hat die Zeit gerade so hingehauen.
Aber was du gemacht hast, ist wirklich krass.
So vieles muss ich gar nicht mehr eingeben, weil es schon automatisiert wurde von dir :)
Wenn man überhaupt noch etwas ergänzen möchte, dann wie gesagt wie es mit der Gesamtbilanz aussieht zwischen 2 Spielern. Quasi soll alles so bleiben wie jetzt. Nur nachher bei der Abfrage das dann am ende irgendwo in einer Zeile die Gesamtbilanz steht.
Sollte das zu aufwendig sein, dann bitte nicht mehr machen :)
Ich bin wirklich sowas von happy, das ich überhaupt diese Hilfe bekommen habe :)
Hallo Andy,
Freut mich, dass es jetzt zu deiner Zufriedenheit läuft.
ZitatTrotz deiner positiven Argumente, ist die DB 1.5 so wie sie ist, zumindest für mich wirklich perfekt.
Ich bin schon an v2.0 dran. Auch wegen diesem.
ZitatWenn man dann eine Statistik einbaut die dann zeigt wie es aktuell zwischen den Beiden steht.
Hatte ich ja auch schon angesprochen. Versuche dich doch mal selber daran.
Dazu brauchst du ungebundene Textfelder, am Besten im Kopf des UFos. Dann
machst du dich auf Suche nach den so genannten "Domänenaggregatfunktionen".
Mach mal, - vorher Kopie erstellen.
gruss ekkehard
Hallo Ekkehard,
puuuhhhh also.
Ich habe mir die so genannte Domainaggregatfunktion mal angeschaut.
Bitte korrigiere mich, wenn ich da falsch liege.
Ich unterteile den Begriff mal.
Die Aggregatfunktion selbst, sofern ich das richtig gelesen und verstanden habe, beschäftigt sich damit, das verschiedene Datensätze zusammengefasst werden und das ich verschiedene Funktionen einbauen kann.
Wie z.B. min, max, Anzahl, Summe, Mittelwert, ErsterWert, LetzterWert etc.
Und das ganze wende ich dann auf die Domain (Gruppe oder Gruppen) an.
Meine Idee wäre dann, auch wenn diese Methode sehr umständlich wäre, das jedes Spiel dann ein extra Feld bekommt mit einem Eintrag 1 oder 0.
1 für den Sieger und 0 für den verlierer.
Anschließend starte ich eine Abfrage und baue die Funktion "Max" ein.
Sprich wenn ich 2 Spieler eingebe soll die DB dann einen abgleich zwischen den beiden starten und Max 1 dann ausgeben und zählen.
Soweit die Theorie. Ob die stimmt weiss ich nicht.
Auch habe ich mir 4 Videos angeschaut die sich mit der Aggregatfunktion beschäftigen.
Wo es bei mir dann aufhört, ist das ganze in VBA/SQL hinzubekommen.
Mein Ansatz wäre dies bei cboSieger_Afterupdate einzubauen mit der UFo_filtern funktion.
Dort kann ich die Sieger ermitteln und in einer separaten tabelle oder einem separaten Textfeld den Sieger mit einer 1 versehen und diese dann im Nachgang der Abfrage zählen lassen.
Somit wüsste ich dann wer wie oft gegen wen gewonnen hat.
So und das ganze dann in einen Code zu packen da komme ich dann Gedanklich nicht mehr mit :(
ZitatDomainaggregatfunktion
Das hast du m.E. richtig verstanden. Domänen sind Tabellen und Abfragen,
die Aggregate die eigentlichen Funktionen, - zählen, summieren usw.
Um die Anzahl der Siege eines Spielers zu ermitteln, brauchst du kein
zusätzliches Feld. Es wird einfach die Anzahl der SpielerID im Feld Sieger gezählt,
=DomAnzahl("SiegerID_F"; "Turniere"; "SiegerID_F = " & Spieler1ID_F & " AND TurnierArtID_F = " & TurnierArtID_F)
Zwar jetzt nicht getestet, aber das kannst du direkt in ein ungebundenes
Textfeld in die Eigenschaft "Steuerelementeinhalt" eingeben.
Ach so.
Damit kannst du ja mal versuchen nur die Siege gegen einen bestimmten
Gegener zu zählen. Für die Kriterien kannst du die jetzigen Filter für
das UFo als Basis hernehmen.
Also ich hab es hinbekommen :)
Na ja teilweise.
Ich habe wie du gesagt hast ein ungebundenes Textfeld erstellt.
Dann bei Steuerelementinhalt den code eingegeben.
Wenn ich jetzt einen User bei Spieler 1 eingebe sagt der mir wie viele Siege generell Spieler 1 hat.
Was schon echt beindruckend ist :D
Wenn ich aber bei Spieler 2 einen User eingebe, ändert sich nichts.
Der zeigt mir nur die Siege des Spielers 1 an, also generelle Siege.
Nicht spezifisch gegen einen bestimmten Gegner X.
Als Ursache könnte sein, das ich nicht weiss wo man die Kriterien in einem ungebundenem Textfeld eingibt, bei den Eigenschaften.
Also zusammenfassend.
Siege Anzeigen generell .... Geht.
Siege gegen einen spezifischen Gegner Anzeigen .... Geht nicht.
ZitatWenn ich aber bei Spieler 2 einen User eingebe, ändert sich nichts.
Nee, ist klar wenn nicht programmiert.
ZitatAls Ursache könnte sein, das ich nicht weiss wo man die Kriterien in einem ungebundenem Textfeld eingibt,
Die Kriterien sind der dritte Parameter der Dom-Funktionen. Das ist im Prinzip
eine WHERE-Klausel in SQL. Nur entfällt das Schlüsselwort.
Du kannst dir das so vorstellen, dass die Funktion aus den drei Parametern
eine Abfrage zusammen stellt
SELECT COUNT(Feldname)
FROM Domäne
WHERE Kriterien
Der einzige Unterschied ist, bin allerdings nicht 100% sicher, das die Dom-
Funktionen
immer nur einen Wert zurück liefern.
Das Kriterium für die Siege gegen einen bestimmten Spieler entspricht (nicht
gestestet, keine Zeit) dem Filter für das UFo.
Ah okay verstehe :)
Vielen Dank für die Erklärung.
Ja aber es muss ja auch nicht unbedingt jetzt alles sein.
Einfach dann wenn Zeit ist :)
Ich fände es aber auch nicht schlimm wenn nur ein Wert zurück gegeben wird.
Man kann ja notfalls beim Sieger hin und her switchen wer wieviel Siege hat.
ZitatJa aber es muss ja auch nicht unbedingt jetzt alles sein.
Einfach dann wenn Zeit ist
Keine Ahnung wann du Zeit hast, aber probier es halt mal wenn du
welche hast.
Ja werde ich Ekkehard :)
Aber wie gesagt ich bin schon wirklich sehr sehr glücklich mit der 1.5
Und ich kann mich nur nochmal bedanken für all die Hilfe :)