Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Επιστροφή στην προηγούμενη επιλεγμένη εγγραφή (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1766-epistrofi-stin-proigoimeni-epilegmeni-eggrafi.html)

lefterisg 01-04-12 16:12

Επιστροφή στην προηγούμενη επιλεγμένη εγγραφή
 
1 Συνημμένο(α)
Καλημέρα σε όλους.
Χρησιμοποιώ στην ΒΔ μου την φόρμα αναζήτησης του Τάσου που υπάρχει ήδη στο φόρουμ.
Θέλω όμως, αφού κάνω αναζήτηση και πατήσω πάνω σε μια εγγραφή, πατώντας την εντολή που δείχνει όλες τις εγγραφές, να συνεχίσει να έχει επιλεγμένη την εγγραφή που έχω ήδη επιλέξει.
Χρησιμοποίησα τον παρακάτω κώδικα αλλά μου βγάζει μήνυμα λάθους.
Private Sub cmdClearSearch_Click()
Dim rs As Object
Dim strBookmark As String

strBookmark = Forms!frmCustomers.ID
Forms!frmCustomers.Requery

Set rs = Me.Recordset.Clone
rs.FindFirst "id ='" & strBookmark & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

Me.txtSearch = vbNullString
Me.Filter = vbNullString
Me.FilterOn = False
End Sub

Παρακαλώ για την βοήθειά σας.
Ανεβάζω συνημμένα την ΒΔ.
Σας ευχαριστώ εκ των προτέρων.
Λευτέρης

Thanosp 01-04-12 17:38

Γειά σε όλους
Private Sub cmdClearSearch_Click()
Dim rs As Object
Dim strBookmark As integer

strBookmark = Forms!frmCustomers.ID
Forms!frmCustomers.Requery

Set rs = Me.Recordset.Clone
rs.FindFirst "id =" & strBookmark & "" 'ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

Me.txtSearch = vbNullString
Me.Filter = vbNullString
Me.FilterOn = False
End Sub
Επειδή το ID είναι αριθμός
Θανάσης Π

lefterisg 01-04-12 20:24

Θανάση σε ευχαριστώ καταρχάς για την γρήγορη απάντηση.
Το μήνυμα σταμάτησε να το βγάζει αλλά απ' ότι φαίνεται αυτός ο κώδικας δεν δουλεύει γιατί
όταν γράφω πχ "φάρος" και επιλέγω το επώνυμο στο φίλτρο, πατώντας την εντολή για να τα δείξει όλα, μετακινείται στην πρώτη εγγραφή.
Ελπίζω να βρεθεί κάποια λύση.
Με εκτίμηση, Λευτέρης.

Tasos 01-04-12 22:02

Καλησπέρα σε όλους!

Παραθέτω τον τροποποιημένο κώδικα της λειτουργικής μονάδας της φόρμας (οι τροποποιήσεις έχουν μπλε χρώμα):

Κώδικας:

Option Compare Database
Option Explicit
Private strAlt$, sqlStr$, RstName$, BMK As Variant

Private Sub cmdClearSearch_Click()
  If Me.txtSearch <> vbNullString Then Me.txtSearch = vbNullString
    Me.Filter = vbNullString
    Me.FilterOn = False
  If Not IsEmpty(BMK) Then Me.Bookmark = BMK
End Sub

Private Sub Form_Current()
    Me.xf = Me.ID
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    On Error Resume Next
    Select Case KeyCode
    Case vbKeyDown
        KeyCode = 0
        DoCmd.GoToRecord , , acNext
    Case vbKeyUp
        KeyCode = 0
        DoCmd.GoToRecord , , acPrevious
    End Select
End Sub

Private Sub Form_Load()
    RstName = Me.Recordset.Name
End Sub

Private Sub txtSearch_Change()
    Dim XS$
    XS = txtSearch.Text
    If XS = vbNullString Then
        cmdClearSearch_Click
        Exit Sub
    End If

    On Error Resume Next
    sqlStr = "[Thename] Like '" & "*" & ReplaceTones(XS) & "*" & "'"
    If Err = 91 Then Err.Clear: GoTo ChangeHere
    If DCount("[Thename]", RstName, sqlStr) = 0 Then
        Me.txtSearch = strAlt
    Else
ChangeHere:
        Me.Filter = sqlStr
        Me.FilterOn = True
        strAlt = XS
    End If
    Me.txtSearch.SetFocus
    Me.txtSearch.SelStart = Nz(Len(XS))
End Sub

Private Sub txtSearch_GotFocus()
    If Nz(Me.txtSearch, vbNullString) = vbNullString And Not Me.FilterOn Then
        BMK = Me.Bookmark
    End If

End Sub

Καλή συνέχεια!

Τάσος

lefterisg 02-04-12 14:07

Τάσο, καλημέρα.
Σ' ευχαριστώ που ασχολείσε και πάλι με ένα πρόβλημά μου.
Αντέγραψα τα κομάτια του κώδικα, αλλά και όλο τον κώδικα στην φόρμα,
αλλά παρ' όλα αυτά συνεχίζει να πηγαίνει ο κέρσορας στην πρώτη εγγραφή
και όχι στην επιλεγμένη.
Εχω office 2003.
Θα περιμένω να το δεις, όταν θα έχεις χρόνο.
Με εκτίμηση, Λευτέρης.
.

Tasos 02-04-12 16:32

1 Συνημμένο(α)
Καλησπέρα Λευτέρη!

Παρόλο που η συμπεριφορά του συγκεκριμένου προγράμματος είναι ίδια σε Access 2003 - 2010,
δοκίμασα το αρχείο που ανέβασες και σε 2003 και λειτουργεί κανονικά (δες το συνημμένο).

Θα πρέπει να αναζητήσεις το πρόβλημα σε οποιοδήποτε άλλο σημείο της εφαρμογής σου εκτός από τον κώδικα (που τον δοκίμασα πριν τον ανεβάσω).

Τάσος

Tasos 03-04-12 13:06

Καλημέρα σε όλους!

Αγαπητέ Λευτέρη έχεις δίκιο που λες ότι δεν σου λειτουργεί γιατί ο κώδικας κάνει ακριβώς το αντίθετο από το ζητούμενο σου δηλαδή μετά την αφαίρεση του φίλτρου σε μεταφέρει στην εγγραφή που είχε επιλεγεί πριν την εφαρμογή φίλτρου!

Δεν κατάλαβα καλά το ζητούμενο παρόλο ήταν σαφές από πλευράς σου:dft010: και έτσι σου πρότεινα το αντίθετο.

Για να μεταφερθείς με το πάτημα του κουμπιού cmdClearSearch στην τελευταία εγγραφή τη οποία είχες επιλέξει όταν η φόρμα είχε φιλτραριστεί,
η μόνη αλλαγή που θα χρειαστεί να κάνεις είναι να αντικαταστήσεις τον κώδικα του κουμπιού με τον παρακάτω κώδικα :

Κώδικας:

Private Sub cmdClearSearch_Click()
    Dim RecID As Long
    Me.txtSearch = vbNullString
    RecID = Nz(Me.ID)
    Me.FilterOn = False
    Me.Filter = vbNullString
    With Me.Recordset.Clone
        .FindFirst ("ID=" & RecID)
        If Not .NoMatch Then Me.Bookmark = .Bookmark
    End With
End Sub

Καλή συνέχεια!

Τάσος

lefterisg 03-04-12 17:45

Καλημέρα σε όλους σας.

Αγαπητέ Τάσο,
για άλλη μια φορά, πολλά πολλά ευχαριστώ.
Είναι αυτό ακριβώς που ήθελα.
Δουλεύει άψογα, μετά την τελευταία προσθήκη.
Σε ευχαριστώ και για την πολύτιμη βοήθεια και για τον χρόνο που αφιερώνεις σε μας.
Να είσαι πάντα καλά,
Με εκτίμιση, Λευτέρης


Η ώρα είναι 07:26.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2