PDA

Vollständige Version anzeigen : Nochmals eigene Navigationsschaltflächen


Winter2
05.05.2004, 22:05
Hallo,

ich möchte - wie ja so viele vor mir schon - eigene Navigationsschaltflächen. Dabei habe ich als Steuerelementinhalt eines Textfeldes, das die aktuelle Datensatznummer plus Anzahl der Datensätze insgesamt anzeigen soll folgendes geschrieben:

=[CurrentRecord] & " / " & [RecordsetClone].[RecordCount]-[newrecord]

Das funktioniert auch fast, aber beim Aufruf des Formulares erscheint immer 1/1, obwohl es mehrere sind. Beim ersten Mal "nächster" passiert nichts, erst bei mehrfachem Klicken.



AD: Aus Thread #1.

SNowack
05.05.2004, 22:25
Hallo,

welche Access Version setzt Du ein?
beruht das Formular auf einer Tabelle oder einer Abfrage mit Sortierung?

Gruss Stefan



AD: Aus Thread #1.

TommyK
06.05.2004, 06:48
Hallo,

hast Du diesen Thread gelesen?
http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=123440&highlight=Navigation



AD: Aus Thread #1.

Winter2
09.05.2004, 22:00
Ja, hatte ich. Ich habe es nochmals probiert mit der Funktion, die ganz unten aufgeführt war, jeweils im Formular definiert (wegen Me.xxx):

Function RecordNumber() As String

On Error GoTo RecordNumber_Err

Dim rst As DAO.Recordset
Dim lngNumRecords As Long
Dim lngCurrentRecord As Long
Dim strTmp As String

Set rst = Me.RecordsetClone
rst.MoveLast
rst.Bookmark = Me.Bookmark
lngNumRecords = rst.RecordCount
lngCurrentRecord = rst.AbsolutePosition + 1
strTmp = lngCurrentRecord & " / " & lngNumRecords
RecordNumber_Exit:
On Error Resume Next
RecordNumber = strTmp
rst.Close
Set rst = Nothing
Exit Function
RecordNumber_Err:
Select Case Err
Case 3021
strTmp = "Neu"
Resume RecordNumber_Exit
Case Else
strTmp = "#" & Error
Resume RecordNumber_Exit
End Select
End Function

Und dann in dem Textfeld als Datenherkunft: =RecordNumber().

Kurioserweise geht das in dem einen Formular, in dem anderen nicht richtig, und zwar bei Neu und Löschen. Beim ersten hab ich's hinbekommen mit Me.Requery und DoCmd.GotoRecord , , acLast bei jedem Löschen und Einfügen, dann hat die Anzeige wieder gestimmt. Bei Löschen geht es inzwischen auch.
Der einzige Unterschied zwischen den Formularen ist, daß beim ersten noch eine weitere Sub aufgerufen wird, die eine Datensatznummer erzeugt.

Bei neuen Datensatz (erzeugt mit dem Assistenten) erscheint immer "Neu" in der Anzeige, selbst bei hin- und herwechseln erscheint noch "neu". Wenn ich es genauso mache wie im ersten Formular, dann wird gar kein neuer Datensatz erzeugt.

Außerdem ist die Funktion auch sehr langsam - selbst auf einem Athlon 2500+ noch spürbar.



AD: Aus Thread #1.

Engeli
09.05.2004, 22:43
Hallo

Also in Beispiel DB funktioniert es.
Wenn es bei Dir nicht klappt, melde Dich noch mal.

Gruss Markus



AD: Aus Thread #1.

Winter2
09.05.2004, 23:26
Ähh, ja, ein paar gute Ideen habe ich gefunden, z.B. wie man auf die komplizierte Funktion verzichten kann, indem man das doch in die Datenherkunft reinschreibt, dann geht es auch wieder schneller.

Aber: man kann über das eigentliche Ende der Datensätze hinausnavigieren und kommt dann auch auf diese Weise auf "neu". Das möchte ich verhindern. Und dabei passieren extrem merkwürdige Dinge. Man versuche nur einmal, das GotoRecord , , acNext mit einer Bedingung einzuschränken: dann wird nur noch "1 von 1" angezeigt!

Und bei Eingabe eines neuen Datensatzes (z.B. Nummer 7) erscheint beim Zurückbutton dann "6 von 6" usw.

Außerdem soll beim Löschen eines Datensatzes der Zeiger automatisch auf den letzten gesetzt werden. Also wenn der vierte gelöscht wird, soll dann der dritte kommen. Das klappt auch noch: Me!Requery und DoCmd.GotoRecord , , acLast.



AD: Aus Thread #1.

Winter2
12.05.2004, 19:54
Nochmals das Thema neu gestartet (siehe Thread ... AD: Link wurde entfernt, da sowieso das falsche Thema ... oder viele zuvor):

Es geht um eigene Navigationsschaltflächen zur Datensatznavigation plus Anzeige, Ersatz für Access-Standardbuttons. Also es geht überhaupt nicht.

Die Anforderung ist klar: es soll richtig angezeigt werden in jeder Situation, "x von y", und maximal bis "y von y" gehen, also nicht eins über das Maximum hinaus. Einen neuen Datensatz erzeugen soll nur mithilfe des Buttons "neu" gehen. Die meisten Probleme werden sichtbar nach Erzeugen eines Neuen beim Hin- und hernavigieren. "Vor" und "Zurück" geht natürlich nur bis zum ersten/letzten Datensatz.

Arne Dieckmann
12.05.2004, 20:01
Hallo Winter2,

bitte erstelle immer nur ein Thema/Thread pro Frage.
S. dazu auch unsere Netiquette (http://www.ms-office-forum.net/forum/netiquette.php).

Themen wurden zusammengeführt.


Zum Problem selbst: Dann schau Dir einmal das Beispiel "NaviButtons" auf DBWiki an (Link in meiner Signatur).

Winter2
13.05.2004, 22:07
Ja, danke, das ist besser, ganz ohne GotoRecord, mit RecordSetClone.
Beim Löschen von Datensätzen kann man das aber nicht anwenden. Ich bin bloß noch nicht dazugekommen, das alles auszuprobieren.

Ich probiere mal die Löschung mit den entsprechenden GotoRecord Anweisungen und dann eine Neupositionierung auf den vorherigen wie oben.