Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wann .RecordCount im Form.RecordsetClone?

52 views
Skip to first unread message

Josef Morlo

unread,
Apr 23, 2009, 9:53:38 AM4/23/09
to
Hallo,

(Access 2002)
bekanntlich muss man das Recordset mit .MoveLast erst einmal vollständig
auffüllen, um die korrekte Anzahl von Datensätzen zu ermitteln.

Wenn ich nun wissen will, ob der Datensatz in meinem Formular der letzte
ist (Weil ich z.B. die Next- und Last-Buttons deaktivieren will), ist da
stets ein .MoveLast erforderlich? MoveLast gilt ja bei größeren
Datensatzmengen als Bremse.

Also so (Im Form_Current-Ereignis):

if me.currentRecord = me.recordsetClone.RecordCount then ...

oder so:

Me.Recordsetclone.Movelast
if me.currentRecord = me.recordsetClone.RecordCount then ...

Ist das ständige Neuzählen zwingend geboten? Muss der Recordsetclone immer
wieder vollständig durchlaufen werden, wenn Daten hinzukommen können?

Danke und Gruß

Josef Morlo

Karl Donaubauer

unread,
Apr 23, 2009, 1:02:16 PM4/23/09
to

Joo, ist IMO anzuraten.
Ich habe vor Jahren mal anlässlich einer Diskussion etwas getestet
und festgestellt, dass es ohne Movelast zumindest ab ein paar hundert
Datensätzen oft falsche Ergebnisse geben kann.
Ein RecordCount liefert dann zwischendurch mal die aktuelle
Datensatznummer im Formular + 1 oder dergl. Blödsinn.

Schwer nachzuvollziehen, was da wann geladen und gezählt wird,
aber wenn's zuverlässig sein soll...

--
HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
3. SQL Server-Entwickler-Konferenz - Nürnberg im Mai


Josef Morlo

unread,
Apr 23, 2009, 1:25:45 PM4/23/09
to
Karl Donaubauer:

ok, dann muss es halt sein. Ich danke Dir recht herzlich!

Lieber Gruß

Josef Morlo

Stefan Dase

unread,
Apr 24, 2009, 1:54:43 AM4/24/09
to
Guten Morgen Josef!

> Wenn ich nun wissen will, ob der Datensatz in meinem Formular der letzte
> ist (Weil ich z.B. die Next- und Last-Buttons deaktivieren will), ist da
> stets ein .MoveLast erforderlich? MoveLast gilt ja bei größeren
> Datensatzmengen als Bremse.

Du könntest auch RecordsetClone auf das aktuelle Lesezeichen setzen und
dann mittels MoveNext ermitteln, ob das Recordset EOF ist:

Private Sub Form_Current()

Dim rst As DAO.Recordset

Set rst = Me.RecordsetClone
rst.Bookmark = Me.Bookmark
rst.MoveNext

If rst.EOF Then
MsgBox "Ende"
End If

End Sub

Ob das jetzt am Ende performanter als dein Ansatz ist, müsstest du mit
einer größeren Datenmenge mal selber testen. Alternativ fällt mir noch
der Weg ein, per SQL ein Count(*) über die Datenmenge auszuführen.

Viele Grüße aus Bremen,
Stefan

Josef Morlo

unread,
Apr 24, 2009, 3:02:53 AM4/24/09
to
Hallo Stefan,
danke für Deinen Beitrag

Stefan Dase:


>> Wenn ich nun wissen will, ob der Datensatz in meinem Formular der letzte
>> ist (Weil ich z.B. die Next- und Last-Buttons deaktivieren will), ist da
>> stets ein .MoveLast erforderlich? MoveLast gilt ja bei größeren
>> Datensatzmengen als Bremse.
>
> Du könntest auch RecordsetClone auf das aktuelle Lesezeichen setzen und
> dann mittels MoveNext ermitteln, ob das Recordset EOF ist:
>
> Private Sub Form_Current()
>
> Dim rst As DAO.Recordset
>
> Set rst = Me.RecordsetClone
> rst.Bookmark = Me.Bookmark
> rst.MoveNext
>
> If rst.EOF Then
> MsgBox "Ende"
> End If
>
> End Sub
>
> Ob das jetzt am Ende performanter als dein Ansatz ist, müsstest du mit
> einer größeren Datenmenge mal selber testen.

Die BOF-Variante wäre in der Tat eine praktikable Alternative und vor allen
Dingen einen Test wert.

> Alternativ fällt mir noch
> der Weg ein, per SQL ein Count(*) über die Datenmenge auszuführen.

Da es um Code für Navigationsschaltflächen geht, ist der Weg über SQL für
mich ungeeignet, da ich nicht den Tabellennamen habe. Ich habe den
Navigationscode in eine separates Modul ausgelagert, und da müsste ich mir
den Namen eigens rüberholen für ein "SELECT COUNT(*) FROM MyTable"

Nebenbei bemerkt: Wenn ich einen Beitrag von Michael Zimmermann recht
erinnere, sei Recordcount einer der wenigen Fälle, wo das Arbeiten mit
Recordsets schneller als SQL sei. Wie gesagt mit dem dem Vorbehalt einer
möglicherweise getrübten Erinnerung.

Lieben Gruß

Josef Morlo

0 new messages