Neuigkeiten:

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

Mobiles Hauptmenü

Zähler-Funktion, Laufzeitfehler 28

Begonnen von stfn, Juni 26, 2016, 09:29:56

⏪ vorheriges - nächstes ⏩

stfn

Hallo,

ich bin neu hier im Forum, zumindest schreibend. Die meisten Probleme konnte ich durch andere Beiträge lösen. Hier komme ich aber jetzt nicht mehr weiter.

Ich möchte in einer Abfrage eine Funktion aufrufen, die die gleichen Datensätze durchnummeriert. Also z.B.
A     1
A     2
B     1
usw.
Ziel ist ein "x von Gesamtzahl" Feld in der Abfrage. Die Gesamtzahl habe ich, es geht um den Zähler:


Public Function Test()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("qryC")

    Dim Name As String
    Dim Zaehler As Integer

    If Not Name = rs.Fields("tabName").Value Then
    Zaehler = 1
    Else
    Zaehler = Zaehler + 1
    End If

    Test = Zaehler
    Name = rs.Fields("tabName").Value

    Set rs = Nothing
    Set db = Nothing
End Function


qryC ist zum Testen eine einfache Abfrage mit den Feldern tabID, tabName und "Zähler: Test()"
Der Fehler liegt bei "Set rs = db.OpenRecordset("qryC")", die Fehlermeldung ist "Laufzeitfehler 28: fehlt"
Wenn ich eine komplett neue Abfrage erstelle und die Funktion das erste Mal aufrufe, wird die entsprechende Spalte mit 1 erzeugt. Nach dem zweiten Mal kommt die Fehlermeldung.
(Edit: Ah, das mit der durchgehenden 1 liegt ws. daran, dass der Zähler jedes mal bei 0 anfängt. Hier müsste ich eine globale Varible definieren, dass das Ergebnis länger gespeichert werden kann)

Hat jemand eine Idee woran das liegen könnte oder was ich besser machen kann?

Grüße,
Stefan

Beaker s.a.

Hallo Stefan,

Hört sich so an, als ob dir dieses weiterhelfen könnte:
http://www.donkarl.com?FAQ3.11

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

DF6GL

Hallo,

das Übel liegt beim rekursiven Aufruf der Funktion...


Abfrage: 
ZitatSelect tabName, Test([tabID]) as Zähler
From Tabelle1
Order by tabName

und Funktion (ohne Errorhandling):

Public Function Test(lngID As Long)
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("Select  tabName from Tabelle1 where tabid = " & lngID)


   Static Zaehler As Long
   Static strName As String
    If Not strName = rs(0) Then
    Zaehler = 1
    Else
    Zaehler = Zaehler + 1
    End If

    Test = Zaehler
    strName = rs(0)
    rs.Close: Set rs = Nothing
    Set db = Nothing
End Function


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

stfn

Super, vielen Dank, es funktioniert! Das bringt mich ein gutes Stück weiter!
(VBA ist noch nicht ganz meine Stärke)

stfn

Ok, also an sich funktioniert der Zähler. Wenn ich aber eine längere Abfrage habe und darin scrolle, werden die Zahlen komplett durcheinander geworfen, teilweise werden Zahlen übersprungen. Wenn ich in ein einzelnes Feld klicke, dann verändert sich nur die Zahl in der entsprechenden Zeile. Wird die Abfrage für einen Bericht verwendet, verändern sich die Zahlen nicht beim scrollen, dann ist auch die Reihenfolge korrekt, aber immer noch beim Klicken. Hoffe es ist verständlich, was ich meine!

Das hört sich für mich irgendwie nicht ganz normal an, zumindest habe ich davon noch nichts gehört :o


Lachtaube

Hallo,

vergiß die Geschichte mit einer eigenen Funktion für einen Zähler, der nicht auf Sortierkriterien aufgebaut ist - Artefakte, die dabei entstehen können, hast Du ja selbst schon erfahren. Halte Dich an Don Karls Laufende Nummer/Summe in Berichten. Oder dient der Zähler noch anderen Zwecken?
Grüße von der (⌒▽⌒)

DF6GL

#6
Hallo,


Zitatder nicht auf Sortierkriterien aufgebaut ist
--->
ZitatSelect tabName, Test([tabID]) as Zähler
From Tabelle1
Order by tabName



Zitat...eine längere Abfrage habe und darin scrolle, werden die Zahlen komplett durcheinander geworfen..

Das kann immer vorkommen, wenn eine VBA-Routine von der Abfrage aufgerufen wird.  Das liegt an der nicht synchronen Aktualisierung der Abfrage-Liste beim Scrollen


ZitatWird die Abfrage für einen Bericht verwendet, verändern sich die Zahlen nicht beim scrollen, dann ist auch die Reihenfolge korrekt, aber immer noch beim Klicken.

Die laufenden Nummen (Laufende Summe) pro Gruppe sind in einem Bericht auch ohne eine solche Funktion allein mit Boardmitteln realisierbar.


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Lachtaube

Auch die Sortierung hilft Deiner Funktion nicht auf die Beine, weil Access Datensätze beim Navigieren in Abfrage, Formular oder Bericht dynamisch seitenweise nachlädt - fällt vielleicht erst beim Zurücknavigieren auf.

Ausweg: man nehme einen der vielen kostenlos erhältlichen Datenbankserver mit Window-Funktionen als Backend und greife auf die Funktion RowNumber() zurück oder die von ekkehard erwähnte langsame Don Karl-Methode.
Grüße von der (⌒▽⌒)