Anzeige
Archiv - Navigation
1828to1832
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

entweder bof oder eof ist true oder ...

entweder bof oder eof ist true oder ...
12.05.2021 14:16:04
Ronald
Grüßt Euch alle!
Ich habe eine kleine Datenbankabrage (Access) und bekomme beim Vorwärtsnavigieren folgende Fehlermeldung:
"Entweder BOF oder EOF ist True oder der aktuelle Datensatz wurde gelöscht."
Wenn ich jedoch rückwärts navigiere oder zum ersten oder letzten Datzensatz, dann passiert jeweils gar nichts.
Zum Ablauf: Ich wähle aus einer Listbox einen der drei Testdatensätze aus:

Private Sub cmdAuswahlLaden_Click()
strAusgewaehlterDatensatz_KV = lstAuswahlKundennummer_KV.List(lstAuswahlKundennummer_KV.ListIndex)
If frmAuswahl.Caption = "SOFTWERK - Auswahl Privatkunde" Then
Call a_DB_Verbindung_aufbauen
Call b_SQL_Abfrage_PrivatKd
Call c_Handling_der_Datensaetze
ElseIf frmAuswahl.Caption = "SOFTWERK - Auswahl Geschäftskunde" Then
End If
frmAuswahl.Hide
End Sub
Dann baue ich die Verbindung auf:

Public Sub a_DB_Verbindung_aufbauen()
With cn
.CursorLocation = adUseClient
.Mode = adModeShareDenyNone
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Softwerk ERP\SOFTWERK_ERP.mdb;Persist Security Info=False;"
End With
End Sub
Dann kommt die Abfrage:

Public Sub b_SQL_Abfrage_PrivatKd()
With rs
.ActiveConnection = cn
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockPessimistic
End With
strQuery = "SELECT * FROM tKunden WHERE fKdNummer = " & " '" & strAusgewaehlterDatensatz_KV & "'"
Set rs = cn.Execute(strQuery)
End Sub
Jetzt kommt die Anzeige: Es sollte nun den ausgewählten Datensatz aus der DB holen und entsprechend die Werte den dazugehörigen Textboxen zuweisen:

Public Sub c_Handling_der_Datensaetze()
Dim i As Integer
i = 1
Do While Not rs.EOF
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
rs.MoveNext
i = i + 1
Loop
End Sub
Hier nun der Quellcode der Buttons "Rückwärts", "Erster Datensatz", "Vorwärts" und "letzter Datensatz".

Private Sub cmdDSRueckwaerts_KV_Click()
rs.MovePrevious
If rs.BOF = True Then
MsgBox "Du bist beim ersten Datensatz."
rs.MoveFirst
End If
Call c_Handling_der_Datensaetze
End Sub
Private Sub cmdDSRueckwaertsMin_KV_Click()
rs.MoveFirst
Call c_Handling_der_Datensaetze
End Sub
Private Sub cmdDSVorwaerts_KV_Click()
rs.MoveNext
If rs.EOF = True Then
MsgBox "Du bist beim letzten Datensatz"
rs.MoveLast
End If
Call c_Handling_der_Datensaetze
End Sub
Private Sub cmdDSVorwaertsMax_KV_Click()
rs.MoveLast
Call c_Handling_der_Datensaetze
End Sub
Es würde mich sehr freuen, wenn mir jemand sagen kann, wo ich hier den Fehler drin habe.
Danke im Voraus.
Gruß Ronald

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: entweder bof oder eof ist true oder ...
12.05.2021 14:45:40
Yal
Hallo Ronald,
wenn Du einem "Do While not rs.EOF" mit vor dem "Loop" einen "rs.MoveNext", dann stoppt die Schleife erst, wenn rs bereit auf EOF steht.
Ausserdem will Du nicht sofort alle durchgehen, sondern bei ersten Aufruf auf dem ersten Element gehen: rs.MoveFirst
dann bei vorwärts rs.MoveNext
und bei rückwärts rs.MovePrevious
jeweil mit der Prüfung, ob man auf dem letzten (für MoveNext) oder ersten (für MovePrevious) gerade steht.
Vielleicht kannst Du eine Datei (bereinigt von empfindliche Daten) hochladen. Zwar wäre die Anbindung zu DB nicht drin, aber man könnte mehr sehen.
VG
Yal
Anzeige
AW: entweder bof oder eof ist true oder ...
12.05.2021 15:40:08
Ronald
Grüß Dich Yal
Ich weiß leider nicht genau, wie Du das meinst.
Aber ich habe mal eine bereinigte Version mit DB hochgeladen. Du findest sie hier:

https://www.herber.de/bbs/user/146145.zip

Zum Starten: frmMain --> F5
Dort dann in der unteren linken Ecke auf "Bestehender Kunde" klicken, um einen der drei Testdatensätze aus der DB auszuwählen.
Entsprechend übernommen sollten nun die dazugehörigen Daten in den Textboxen auf der frmMain angezeigt werden. Naja...
An Vorwärts, Rückwärts, erster und letzter Datensatz habe ich bisher nichts geändert, da ich nicht genau wußte, wie Du das meinst:
Was du noch machen solltest, wäre im Code den Link zur DB auf Deine Gegebenheiten anzupassen.
Du kannst gerne zum Testen den Quellcode abändern. Bin gespannt, was Du alles ändern wirst und wie es dann laufen wird.
Schonmal vielen Dank im Voraus.
Gruß Ronald
Anzeige
AW: entweder bof oder eof ist true oder ...
12.05.2021 18:58:23
Yal
Hallo Ronald,
ich hatte in einem Beitrag, den ich nicht wieder finden kann, einen Vorschlag mit rs.Index gemacht. Gilt leider nur für DAO-Recordset
Unter ADODB muss man mit AbsolutePosition arbeiten. Es sieht dann so aus:

'MovePrevious (also Richtung First)
Private Sub cmdDSRueckwaerts_KV_Click()
'On Error GoTo Catch
If rs.AbsolutePosition = 1 Then
MsgBox "Du bist bereit beim letzten Datensatz"
Else
rs.MovePrevious
End If
c_Handling_der_Datensaetze
End Sub
'MoveNext (Richtung Last/EoF)
Private Sub cmdDSVorwaerts_KV_Click()
If rs.AbsolutePosition = rs.RecordCount Then
MsgBox "Du bist bereit beim letzten Datensatz"
Else
rs.MoveNext
End If
c_Handling_der_Datensaetze
End Sub
Viel Erfolg
Yal
Anzeige
AW: entweder bof oder eof ist true oder ...
12.05.2021 19:55:31
Ronald
Danke Für Deinen Vorschlag. Leider funktioniert er bei mir auch nicht. Ich bekomme bei Vorwärts dieselbe Fehlermeldung. Hast Du es in dem von mir geschickten Projekt mal probiert? An irgendwelchen fehlenden Verweisen kann es ja nicht liegen.
Hätte ich noch in der Prozedur "c_Handling_der_Datensaetze" etwas abändern sollen? Das Do Loop? Ist das an dieser Stelle überhaupt sinnvoll, wenn
ich doch nur einen Datensatz sehen will? Ich habe es rausgenommen. Nun siehts anders, aber nicht besser aus:

Private Sub cmdDSVorwaerts_KV_Click()
If rs.AbsolutePosition = rs.RecordCount Then
MsgBox "Du bist bereits beim letzten Datensatz"
Else
rs.MoveNext
End If
Call c_Handling_der_Datensaetze
End Sub
...

Private Sub cmdDSRueckwaerts_KV_Click()
'On Error GoTo Catch
If rs.AbsolutePosition = 1 Then
MsgBox "Du bist bereits beim letzten Datensatz"
Else
rs.MovePrevious
End If
Call c_Handling_der_Datensaetze
End Sub
Wie schon geschrieben, kommt diese Fehlermeldung nicht mehr, dafür bekomme ich jetzt immer "Du bist bereits beim ersten Datensatz" bei rückwärts und "Du bist bereits beim letzten Datensatz" bei vorwärts.
Ich hab den Fehler also gefunden. Das Navigieren an sich würde vorwärts und rückwärts funktionieren. Vielen dank dafür. Mein Fehler liegt hier:

'Hier wird der Datensatz, der vorher in der Listbox ausgesucht wurde, geholt.
Public Sub b_SQL_Abfrage_PrivatKd()
With rs
.ActiveConnection = cn
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockPessimistic
End With
strQuery = "SELECT * FROM tKunden WHERE fKdNummer = " & " '" & strAusgewaehlterDatensatz_KV & "'"
Set rs = cn.Execute(strQuery)
End Sub
Es wird also tatsächlich nur der eine Datensatz aus der DB geholt. Ein anderer ist gar nicht da. Wie ich alle Datensätze holen kann, ist mir klar,
aber nur nicht, wie es dann nur den Datensatz den Textboxen zuweisen kann, den ich in der Listbox ausgewählt habe. Hast Du hierfür eine Idee?
Ich würde wohl die Verbindung kappen und eine neue machen und dann alles holen, aber das ist der umständliche Weg. Es gibt sicher einen einfacheren.
Gruß Ronald
Anzeige
Alle records holen aber nur einen anz.?
12.05.2021 21:26:27
Ronald
Ich mach hier eine kleine Korrektur. Momentan klappt nahezu alles. Das einzige, was noch nicht klappt, wie ich nur einen bestimmten Datensatz
anzeigen lassen kann, während alle geholt wurden.
Momentan siehts so aus:

Private Sub cmdAuswahlLaden_Click()
strAusgewaehlterDatensatz_KV = lstAuswahlKundennummer_KV.List(lstAuswahlKundennummer_KV.ListIndex)
If frmAuswahl.Caption = "SoftWERK - Auswahl Privatkunde" Then
intAnzeigeZaehler = 0
Call Privatkundendaten_aus_DB_holen
ElseIf frmAuswahl.Caption = "SOFTWERK - Auswahl Geschäftskunde" Then
End If
frmAuswahl.Hide
End Sub
Hier werden die Datensätze den Textboxen zugewiesen. Der Zähler merkt, wenn die Prozedur mehrmals aufgerufen wurde, beispielsweise beim
Rückwärts durch die Datensätze navigieren:

Public Sub c_Handling_der_Datensaetze()
Dim i As Integer
intAnzeigeZaehler = intAnzeigeZaehler + 1
If intAnzeigeZaehler = 1 Then
i = 1
Do While Not rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
rs.MoveNext
i = i + 1
Loop
ElseIf intAnzeigeZaehler > 1 Then
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
End If
End Sub
Leider funktioniert es nicht. Beim Debuggen habe ich gemerkt, daß er den Loop durchmacht und also einen Datensatz nach dem anderen anzeigen läßt
und der letzte bleibt entsprechend stehen. Das ist nicht das, was ich möchte. Wie kann man das besser machen?
Danke im Voraus.
Gruß Ronald
Anzeige
AW: entweder bof oder eof ist true oder ...
12.05.2021 21:51:58
Yal
Hallo Ronald,
ja, tatsächlich. Ich habe vergessen, darüber zu berichten. Eine Schleife über alle Datensätze ist wenig sinnvoll.
Man definiert die Query, holt die Daten "en block" und navigiere darin.
Das Recordset ist sowohl das Block als auch ein Zeiger auf eine der Datenätze innerhald des Blocks.
Dein "c_Handling_der_Datensaetze" (den man übrigens in dem "Else"-Bereich direkt hinter rs.MoveNext bzw rs.MovePrevious ablegen könnte, da der sonstige Fall keine Änderung an gezielten Datensatz bringt) sollte keine Schleife haben:

Public Sub c_Handling_der_Datensaetze()
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
End Sub
Es gibt auch ganz viel, was in deinem Coding "optimiert" werden könnte. z.B. man könnte die Initialisierung der Connection und das Öffnen des Recordsets in dem Userform_Initialize verlegen. Und Schliessen beim Schliessen der Userform. Dann wären die Paket zusammenhängend und leichter zu warten. Für die Funktion hat es keine Wirkung.
Die zweite Userform könnte damit seine eigene Connection + Recordset haben. Es kann sinnvoll sein, wenn die eine nur lesend und die andere schreibend sein sollen.
Die ConnectionString kommt 12-mal vor. Eigentlich -weil das Connection-Objekt in einem Modul liegt- brauchst Du nur ein solchen Objekt und dementsprechend ConnectionString. Solche nicht veränderbare Elemente können idealerweise als Konstante abgelegt werden:

Public Const ConnStr = "Public Const ConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\_Privat\Softwerk\SoftWERK_ERP.mdb;Persist Security Info=False;"
Ansonsten würde ich viele Versuche in einem kleineren Umfang machen, bis diese stabil sind. Wenn Du mit dem Recordset noch in Try&Error mit den gesamten Userform unterwegs bist, tust Du dir beim Fehlersuche schwerer.
Aber auf dem guten Weg von"Basiskenntnisse in VBA" zur nächsten Stufe ;-)
VG
Yal
Anzeige
AW: entweder bof oder eof ist true oder ...
12.05.2021 22:41:09
Ronald
Danke Yal, für Deine tollen Tips.
Das Einzige, was ich nun noch wissen muß, wie ich nur einen bestimmten Datensatz anzeigen lassen kann, wenn ich doch alle Datensätze hole:

strQuery = "SELECT * FROM tKunden "
Set rs = cn.Execute(strQuery)
Dafür brauche ich doch eine Schleife, denk ich. Damit wirds sicher nicht gehen:

Do While rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
Loop
Hättest Du hier bitte eine Idee für mich?
Danke und Gruß
Ronald
Anzeige
AW: entweder bof oder eof ist true oder ...
12.05.2021 23:14:47
Yal
Hallo Ronald,
Du hast 2 Möglichkeiten:
_ den Recordset mit SQL-Filter auf dem Kunde: richige vorgehensweise, idealerweise auf einem separaten Recordset, sons musst Du danach das original nochmal abfragen

strQuery = "SELECT * FROM tKunden WHERE fKdNummer = '" & strAusgewaehlterDatensatz_KV & "';"
Set rs = cn.Execute(strQuery)
_ Schleife durch den Recordset: nicht "State of the Art" aber tut.
Du soll aber nicht die Gleichheit sonder die Ungleichheit als Do While-Bedingung testen.
Um das Risiko zu vemeinden, dass der While endlos läuft, muss Du zusätzlich den EOF testen: Wenn eine der beide Bedingungen nicht erfüllt ist, springt der Loop raus. Es besteht somit das Risiko, dass EOF erreicht ist (kein Kunde mit diesen Nummer) und c_Handling_der_Datensaetze einen Fehler wirft.

rs.MoveFirst
Do While (rs.Fields("fKdNummer").Value  strAusgewaehlterDatensatz_KV) And Not rs.EOF
rs.MoveNext
Loop
c_Handling_der_Datensaetze
Da kannst Du dieselbe Recordset verwenden, Du muss aber zuerst an erste Stelle springen (MoveFirst).
VG
Yal
Anzeige
AW: entweder bof oder eof ist true oder ...
17.05.2021 18:19:51
Ronald
Grüß Dich Yal
Ich habe die Do-Schleife entsprechend angepaßt und nun läuft es, wie gewünscht. Vielen Dank für Deine Hilfe!

Do
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
rs.MoveNext
Loop Until rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV
Ich habe nun noch eine Frage, werde aber dafür einen separaten Eintrag hier machen.
Nochmals vielen Dank.
Gruß Ronald
Anzeige
Ja, aber...
18.05.2021 00:23:25
Yal
Hallo ronald,
zwar funktioniert dein Code, aber muss Du unbedingt die "Zwischenstände" in deinem Formular anzeigen? Die Ausfürungsgeschwindigkeit macht es sinnlos immer alles zu aktualisieren.
Gegenvorschlag:

'suchen und finden von Anfang an
rs.MoveFirst
Do
rs.MoveNext
Loop Until rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV Or rs.EOF
'Verwenden
If rs.EOF Then
MsgBox "Kundennummer nicht gefunden!"
Else
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
End If
Hier werden die Anzeige-Element der Userform nur einmal aktualisiert.
Ich gebe zu: die Prüfung, ob etwas gefunden wurde, ist in deinem Fall nicht relevant, weil Du die Suche auf Basis einen vorhandenen Eintrag startest.
Aber es ist trotzdem die "saubere" Variante.
VG
Yal

12 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige