Discussion:
Acc 07 Laufzeitfehler
(zu alt für eine Antwort)
Peter Uhlig
2007-04-17 19:49:36 UTC
Permalink
Hallo Miteinander,

ich habe ein Problem und weiß nicht weiter, weiß jemand vielleicht
hilfe?
Ich habe ein Übersichtsfenster, welches sich mit einem Timer alle 10
Sekunden aktualisiert.
Nach ca. 3 Stunden kommt folgende Fehlermeldung zustande:
Laufzeitfehler 2101
Die von Ihnen eingegebene Einstellung ist für diese Eigenschaft
ungültig.

Schließe ich das Fenster und öffne es neu über den selben Button
erscheint folgende Meldung:
Laufzeitfehler 9
Index außerhalb des gültigen Bereichs

Folgendes VBA zum Fenster:

Private Sub Form_Load()
Call aktualisieren
End Sub

Private Sub Form_Timer()
Call aktualisieren
End Sub

Private Sub aktualisieren()
Dim strSQL_O As String
Dim j As Integer
Dim DBS As DAO.Database
Dim rs As DAO.Recordset
Dim pl As Double
Dim strklassen As String

strklassen = "'"
For j = 0 To UBound(gstrKLassen)
If j < UBound(gstrKLassen) Then
strklassen = strklassen & gstrKLassen(j) & "' OR
(tabKlassen.tabklName)= '"
Else
strklassen = strklassen & gstrKLassen(j) & "'"
End If
Next j

strSQL_O = " SELECT tabGesamt.StNr, tabGesamt.IDver, tabPers.tabpName,
tabPers.tabpLizenz, tabPers.tabpOrt, tabKlassen.tabKlName,
tabFahrzeug.tabFzName, tabclub.cName, qry_ua_as_dmsb_bew.BSpName,
qry_ua_as_dmsb_bew.BSpLizenz, qry_ua_as_dmsb_sp.BSpName,
qry_ua_as_dmsb_sp.BSpLizenz, qry_ua_tr1.tabzZ, qry_ua_tr1.tabzP,
qry_ua_tr1.tabzT, qry_ua_tr1.Ausdr1, qry_ua_Wl1.tabzZ,
qry_ua_Wl1.tabzP, qry_ua_Wl1.tabzT, qry_ua_Wl1.tabzW,
qry_ua_Wl1.Ausdr1, qry_ua_Wl2.tabzZ, qry_ua_Wl2.tabzP,
qry_ua_Wl2.tabzT, qry_ua_Wl2.tabzW, qry_ua_Wl2.Ausdr1,
qry_ua_Wl3.tabzZ, qry_ua_Wl3.tabzP, qry_ua_Wl3.tabzT,
qry_ua_Wl3.tabzW, qry_ua_Wl3.Ausdr1, [qry_ua_Wl1]![tabzW]+[qry_ua_Wl2]!
[tabzW]+[qry_ua_Wl3]![tabzW] AS Ausdr2, [qry_ua_Wl1]![Ausdr1]+
[qry_ua_Wl2]![Ausdr1]+[qry_ua_Wl3]![Ausdr1] AS Summe,
IIf(([qry_ua_Wl1]![tabzW]+[qry_ua_Wl2]![tabzW]+[qry_ua_Wl3]!
[tabzW])<0,'nicht gewertet') AS platzn, IIf(([qry_ua_Wl1]![tabzW]+
[qry_ua_Wl2]![tabzW]+[qry_ua_Wl3]![tabzW])=0,1) AS platz "
strSQL_O = strSQL_O & "FROM qry_ua_Wl3 INNER JOIN (qry_ua_Wl2 INNER
JOIN (qry_ua_Wl1 INNER JOIN (qry_ua_tr1 INNER JOIN (qry_ua_as_dmsb_sp
INNER JOIN (qry_ua_as_dmsb_bew INNER JOIN (tabclub INNER JOIN
(tabFahrzeug INNER JOIN (tabKlassen INNER JOIN (tabPers INNER JOIN
tabGesamt ON tabPers.IDpers = tabGesamt.IDpers) ON tabKlassen.ID =
tabGesamt.IDkl) ON tabFahrzeug.IDfz = tabGesamt.IDfa) ON
tabclub.IDclub = tabPers.tabpIDoc) ON qry_ua_as_dmsb_bew.StNr =
tabGesamt.StNr) ON qry_ua_as_dmsb_sp.StNr = tabGesamt.StNr) ON
qry_ua_tr1.IDges = tabGesamt.ID) ON qry_ua_Wl1.IDges = tabGesamt.ID)
ON qry_ua_Wl2.IDges = tabGesamt.ID) ON qry_ua_Wl3.IDges = tabGesamt.ID
"
strSQL_O = strSQL_O & "WHERE ((((tabGesamt.IDver) = [Formulare]!
[frmVeranstaltung]![IDver])) AND ((tabklassen.tabklName) Like " &
strklassen & ")) "
strSQL_O = strSQL_O & "ORDER BY (([qry_ua_Wl1]![tabzW]*-1)+
([qry_ua_Wl2]![tabzW]*-1)+([qry_ua_Wl3]![tabzW]*-1)), [qry_ua_Wl1]!
[Ausdr1]+[qry_ua_Wl2]![Ausdr1]+[qry_ua_Wl3]![Ausdr1], (([qry_ua_Wl1]!
[tabzP]*3)+([qry_ua_Wl1]![tabzT]*15)+([qry_ua_Wl2]![tabzP]*3)+
([qry_ua_Wl2]![tabzT]*15)+([qry_ua_Wl3]![tabzP]*3)+([qry_ua_Wl3]!
[tabzT]*15)); "

Me.RecordSource = strSQL_O
End Sub


Folgendes VBA zum Formularbutton, der das aufruft:

Private Sub btn_frm_tv_3wl_Click()
' Übersichenmonitor öffnen 3 Wertungsläufe
Dim i As Integer

On Error Resume Next
If Me.lstklassenauswahl.ListCount = 0 Then
MsgBox "Bitte KLasse auswählen", vbCritical
Exit Sub
End If

ReDim gstrKLassen(Me.lstklassenauswahl.ListCount - 1)
For i = 0 To Me.lstklassenauswahl.ListCount - 1
gstrKLassen(i) = Me.lstklassenauswahl.ItemData(i)
Next i

DoCmd.OpenForm "frm_TV_AS_DMSB_3Wl", acLayout, , , , acWindowNormal
End Sub


hatte jemand schon mal solch ein Problem oder weiß jemand wie ich das
in den Griff bekomme?
das Fenster soll eigentlich 10 Stunden offen bleiben und nach ca drei
Stunden tauch das Problem dann auf.
Was noch auffällig ist, die Werte die das Formular anzeigt werden
weiterhin aktualisiert,nur die Sortierfunktion im SQL geht nicht mehr,
das ist das einzigste was aufhört.

Ich hatte das Problem mir ner ähnlichen Datenbank schon unter Access
2003.

Viele Grüße
Danke für nen Tip
Peter
Karl Donaubauer
2007-04-17 20:12:54 UTC
Permalink
Post by Peter Uhlig
ich habe ein Problem und weiß nicht weiter, weiß jemand vielleicht
hilfe?
Ich habe ein Übersichtsfenster, welches sich mit einem Timer alle 10
Sekunden aktualisiert.
Laufzeitfehler 2101
Die von Ihnen eingegebene Einstellung ist für diese Eigenschaft
ungültig.
Schließe ich das Fenster und öffne es neu über den selben Button
Laufzeitfehler 9
Index außerhalb des gültigen Bereichs
...
Dim j As Integer
...
For j = 0 To UBound(gstrKLassen)
...
Dim i As Integer
...
ReDim gstrKLassen(Me.lstklassenauswahl.ListCount - 1)
For i = 0 To Me.lstklassenauswahl.ListCount - 1
gstrKLassen(i) = Me.lstklassenauswahl.ItemData(i)
Next i
...
Es klingt danach, als würde der Index in deinem Array zu groß
werden oder im Gegenteil der Integer von j oder i zu klein.
Hast du diese Werte überprüft und groß genug dimensioniert
für ein paar tausend Durchläufe?

Wenn's nicht anders geht, dann lass sie dir mit
debug.print i, j, UBound(gstrKLassen)
etc. bei jedem Aufruf in's Testfenster schreiben und schau
dann, wie hoch die letzten Werte vor dem Krepieren waren.
--
HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
SQL Server-Entwickler-Konferenz (SEK1), 21./22.4.2007, Nürnberg
Peter Uhlig
2007-04-17 20:49:04 UTC
Permalink
Post by Karl Donaubauer
Post by Peter Uhlig
ich habe ein Problem und weiß nicht weiter, weiß jemand vielleicht
hilfe?
Ich habe ein Übersichtsfenster, welches sich mit einem Timer alle 10
Sekunden aktualisiert.
Laufzeitfehler 2101
Die von Ihnen eingegebene Einstellung ist für diese Eigenschaft
ungültig.
Schließe ich das Fenster und öffne es neu über den selben Button
Laufzeitfehler 9
Index außerhalb des gültigen Bereichs
...
Dim j As Integer
...
For j = 0 To UBound(gstrKLassen)
...
Dim i As Integer
...
ReDim gstrKLassen(Me.lstklassenauswahl.ListCount - 1)
For i = 0 To Me.lstklassenauswahl.ListCount - 1
gstrKLassen(i) = Me.lstklassenauswahl.ItemData(i)
Next i
...
Es klingt danach, als würde der Index in deinem Array zu groß
werden oder im Gegenteil der Integer von j oder i zu klein.
Hast du diese Werte überprüft und groß genug dimensioniert
für ein paar tausend Durchläufe?
Wenn's nicht anders geht, dann lass sie dir mit
debug.print i, j, UBound(gstrKLassen)
etc. bei jedem Aufruf in's Testfenster schreiben und schau
dann, wie hoch die letzten Werte vor dem Krepieren waren.
--
HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ:http://www.donkarl.com
SQL Server-Entwickler-Konferenz (SEK1), 21./22.4.2007, Nürnberg- Zitierten Text ausblenden -
- Zitierten Text anzeigen -
Hallo Karl,

das könnte die Lösung sein, Integer geht ja nur bis 32.768.
Wie ich in dem Test gesehen habe, müßte das so sein, dass je mehr
Klassen ich auswähle umso höher der Wert und umso eher sollte der
Fehler entstehen.
Das würde doch heißen, ich machen den Typ long daraus, der kann
2.147.483.647 Zahlen.

Ich poste, sobald ich weiß ob es so ist, ich lasse das ganze mal die
Nacht durchlaufen mit Long, wenn es so ist, dann sollte Morgenfrüh der
Fehler nicht mehr da stehen.

Vielen Dank, einen schönen Abend noch,
Gruß Peter
Peter Uhlig
2007-04-18 04:25:34 UTC
Permalink
Post by Peter Uhlig
Post by Karl Donaubauer
Post by Peter Uhlig
ich habe ein Problem und weiß nicht weiter, weiß jemand vielleicht
hilfe?
Ich habe ein Übersichtsfenster, welches sich mit einem Timer alle 10
Sekunden aktualisiert.
Laufzeitfehler 2101
Die von Ihnen eingegebene Einstellung ist für diese Eigenschaft
ungültig.
Schließe ich das Fenster und öffne es neu über den selben Button
Laufzeitfehler 9
Index außerhalb des gültigen Bereichs
...
Dim j As Integer
...
For j = 0 To UBound(gstrKLassen)
...
Dim i As Integer
...
ReDim gstrKLassen(Me.lstklassenauswahl.ListCount - 1)
For i = 0 To Me.lstklassenauswahl.ListCount - 1
gstrKLassen(i) = Me.lstklassenauswahl.ItemData(i)
Next i
...
Es klingt danach, als würde der Index in deinem Array zu groß
werden oder im Gegenteil der Integer von j oder i zu klein.
Hast du diese Werte überprüft und groß genug dimensioniert
für ein paar tausend Durchläufe?
Wenn's nicht anders geht, dann lass sie dir mit
debug.print i, j, UBound(gstrKLassen)
etc. bei jedem Aufruf in's Testfenster schreiben und schau
dann, wie hoch die letzten Werte vor dem Krepieren waren.
--
HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ:http://www.donkarl.com
SQL Server-Entwickler-Konferenz (SEK1), 21./22.4.2007, Nürnberg- Zitierten Text ausblenden -
- Zitierten Text anzeigen -
Hallo Karl,
das könnte die Lösung sein, Integer geht ja nur bis 32.768.
Wie ich in dem Test gesehen habe, müßte das so sein, dass je mehr
Klassen ich auswähle umso höher der Wert und umso eher sollte der
Fehler entstehen.
Das würde doch heißen, ich machen den Typ long daraus, der kann
2.147.483.647 Zahlen.
Ich poste, sobald ich weiß ob es so ist, ich lasse das ganze mal die
Nacht durchlaufen mit Long, wenn es so ist, dann sollte Morgenfrüh der
Fehler nicht mehr da stehen.
Vielen Dank, einen schönen Abend noch,
Gruß Peter- Zitierten Text ausblenden -
- Zitierten Text anzeigen -
Guten Morgen Miteinander,
also der Laufzeitfehler 9 ist weg,
Das hat zur Folge, daß ich das Fenster ohne erneute Fehlermeldung
aufmachen kann und es wieder Läuft.
Mit Debug.Print habe ich mir mal die Werte angeschaut, die ändern sich
nicht.
Kann es sein, daß der Timer auf dem Formular aussteigt?

Viele Grüße
Peter
Karl Donaubauer
2007-04-18 07:45:11 UTC
Permalink
Post by Peter Uhlig
Post by Peter Uhlig
Ich habe ein Übersichtsfenster, welches sich mit einem Timer alle 10
Sekunden aktualisiert.
Laufzeitfehler 2101
Die von Ihnen eingegebene Einstellung ist für diese Eigenschaft
ungültig.
...
Mit Debug.Print habe ich mir mal die Werte angeschaut, die ändern sich
nicht. Kann es sein, daß der Timer auf dem Formular aussteigt?
Schwer zu sagen, wo die Ursache liegen könnte, wenn man die
Zusammenhänge nicht kennt. Was mir an deinem Code noch
Post by Peter Uhlig
DoCmd.OpenForm "frm_TV_AS_DMSB_3Wl", acLayout, , , , acWindowNormal
Eine Konstante acLayout gibt's eingebaut nicht.
Hast du die selbst definiert?
Post by Peter Uhlig
das Fenster soll eigentlich 10 Stunden offen bleiben und nach ca drei
Stunden tauch das Problem dann auf.
Was noch auffällig ist, die Werte die das Formular anzeigt werden
weiterhin aktualisiert,nur die Sortierfunktion im SQL geht nicht mehr,
das ist das einzigste was aufhört.
Deine ORDER BY-Klausel sieht reichlich komplex aus.
Hast du die und die Zuweisung des SQL-Strings als Recordsource
auch mit debug.print kontrolliert?
--
HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
SQL Server-Entwickler-Konferenz (SEK1), 21./22.4.2007, Nürnberg
Karl Donaubauer
2007-04-18 08:25:57 UTC
Permalink
Post by Karl Donaubauer
...
Post by Peter Uhlig
DoCmd.OpenForm "frm_TV_AS_DMSB_3Wl", acLayout, , , , acWindowNormal
Eine Konstante acLayout gibt's eingebaut nicht.
Hast du die selbst definiert?
...
Ah, "Acc 07". Dort kann's die schon geben. Hab keines installiert hier.
Wenn, dann aber wohl eher für Berichte.
--
cu
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
SQL Server-Entwickler-Konferenz (SEK1), 21./22.4.2007, Nürnberg
Thomas Möller
2007-04-18 15:31:08 UTC
Permalink
Hallo Karl,
Post by Karl Donaubauer
Post by Karl Donaubauer
Post by Peter Uhlig
DoCmd.OpenForm "frm_TV_AS_DMSB_3Wl", acLayout, , , , acWindowNormal
Eine Konstante acLayout gibt's eingebaut nicht.
Hast du die selbst definiert?
...
Ah, "Acc 07". Dort kann's die schon geben. Hab keines installiert
hier. Wenn, dann aber wohl eher für Berichte.
die Layout-Ansicht gibt es in Access 2007 auch für Formulare.

CU
--
Thomas

Homepage: www.Team-Moeller.de
Karl Donaubauer
2007-04-18 18:28:42 UTC
Permalink
Hallo, Thomas!
Post by Thomas Möller
Post by Karl Donaubauer
Post by Karl Donaubauer
Post by Peter Uhlig
DoCmd.OpenForm "frm_TV_AS_DMSB_3Wl", acLayout, , , , acWindowNormal
Eine Konstante acLayout gibt's eingebaut nicht.
Hast du die selbst definiert?
...
Ah, "Acc 07". Dort kann's die schon geben. Hab keines installiert
hier. Wenn, dann aber wohl eher für Berichte.
die Layout-Ansicht gibt es in Access 2007 auch für Formulare.
Stimmt, jetzt wo du's sagst...dachte wohl an die Berichtsansicht.

Ich hab A07 vor fast einem halben Jahr (=kurz nach der AEK)
wieder runtergeschmissen, weil es für meinen Echtbetrieb
noch lange keine Rolle spielen wird und dort im Gegenteil
Probleme machte.

Werde es wohl bald mal wieder irgendwo installieren -
damit die akademischen Diskussionen wieder leichter fallen.
--
;-)
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
SQL Server-Entwickler-Konferenz (SEK1), 21./22.4.2007, Nürnberg
Peter Uhlig
2007-04-18 11:54:52 UTC
Permalink
Post by Karl Donaubauer
Post by Peter Uhlig
Post by Peter Uhlig
Ich habe ein Übersichtsfenster, welches sich mit einem Timer alle 10
Sekunden aktualisiert.
Laufzeitfehler 2101
Die von Ihnen eingegebene Einstellung ist für diese Eigenschaft
ungültig.
...
Mit Debug.Print habe ich mir mal die Werte angeschaut, die ändern sich
nicht. Kann es sein, daß der Timer auf dem Formular aussteigt?
Schwer zu sagen, wo die Ursache liegen könnte, wenn man die
Zusammenhänge nicht kennt. Was mir an deinem Code noch
Post by Peter Uhlig
DoCmd.OpenForm "frm_TV_AS_DMSB_3Wl", acLayout, , , , acWindowNormal
Eine Konstante acLayout gibt's eingebaut nicht.
Hast du die selbst definiert?
Post by Peter Uhlig
das Fenster soll eigentlich 10 Stunden offen bleiben und nach ca drei
Stunden tauch das Problem dann auf.
Was noch auffällig ist, die Werte die das Formular anzeigt werden
weiterhin aktualisiert,nur die Sortierfunktion im SQL geht nicht mehr,
das ist das einzigste was aufhört.
Deine ORDER BY-Klausel sieht reichlich komplex aus.
Hast du die und die Zuweisung des SQL-Strings als Recordsource
auch mit debug.print kontrolliert?
--
HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ:http://www.donkarl.com
SQL Server-Entwickler-Konferenz (SEK1), 21./22.4.2007, Nürnberg
Hallo Karl,

DoCmd.OpenForm "frm_TV_AS_DMSB_3Wl", acLayout, , , , acWindowNormal
das stimmt, acLayout gibt es nicht, ich hatte einfach das VBA und das
SQL zum Bericht kopiert, daher der Fehler.
Kontrolliert habe ich den SQL-String nicht mit debug.print, das werde
ich später nachholen.

Das mit dem String hat folgendes auf sich,
es werden einige Datensätze (max ca.150 bezogen auf tabgesamt)
ausgelesen und wenn sich in den Datensätzen was ändert, dann sollen
die neu sortiert werden.
Es werden nicht mehr Datensätze deswegen, das einzigste was sich
ändert sind einige Werte, es wird der Standartwert 0 durch z.B. 125,34
ersetzt.
Mehr passiert da nicht.
Der Order by Abschnitt ist deswegen so komplex, weil es dafür Regeln
gibt, wie bei gleicher Summe zu verfahren ist, leider kommt das auch
vor.

Ich werde mich später nochmals melden, wenn ich den Test mit dem
korrigierten acLayout und dem debug.pring sql habe,
vielleicht kann ich ja ne Lösung erkennen.

Vielen Dank
Peter
Henry Habermacher [MVP Access]
2007-04-18 13:17:14 UTC
Permalink
Hallo Karl
Post by Karl Donaubauer
Es klingt danach, als würde der Index in deinem Array zu groß
werden oder im Gegenteil der Integer von j oder i zu klein.
Hast du diese Werte überprüft und groß genug dimensioniert
für ein paar tausend Durchläufe?
Da I als Integer und nicht als Long dimensioniert wurde, ist das ziemlich
naheliegend. Ich würde einfach mal mit Long versuchen, wenn's dann nach
einigen jahren immer noch knallt, dann würde ich mir überlegen, ob die
Vorgehensweise vielleicht geändert werden sollte.

Gruss
Henry
--
Keine E-Mails auf Postings in NGs. Danke.
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com
OH: Online Hilfe (Taste F1)
Downloads: http://www.dbdev.org
Loading...