Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Άνοιγμα φόρμας και άμεση μετάβαση σε συγκεκριμένη εγγραφή.
Γεια σας και πάλι!!! Έχω μία φόρμα που την ονομάζω "pelates" και στην οποία δεν επιτρέπω επεξεργασία δεδομένων. Στη φόρμα αυτή έχω ένα κουμπί με λεζάντα Επεξργασία και το οποίο με παίρνει στη φόρμα "Edit_pelates" στην οποία επιτρέπω την επεξεργασία. Με τον παρακάτω κώδικα που έβαλα, όταν ανοίγει η φόρμα "Edit_pelates" μου εμφανίζει μόνο την εγγραφή στην οποία βρισκόμουν τη στιγμή που πάτησα το κουμπί Επεξεργασία. Dim stDocName As String Dim stLinkCriteria As String stDocName = "Edit_Pelates" stLinkCriteria = "[kwdikos_pelati]=" & Me![kwdikos_pelati] DoCmd.Close DoCmd.OpenForm stDocName, , , stLinkCriteria Όλα μια χαρά μέχρι εδώ. Όμως στη φόρμα "Edit_pelates" έχω ένα κουμπί με λεζάντα "Πίσω" και το οποίο κλείνει τη φόρμα "Edit_pelates" κι ανοίγει τη φόρμα "Pelates" και μου δείχνει την πρώτη εγγραφή. Εγώ θέλω να βάλω κώδικα που να με παίρνει αμέσως στην εγγραφή την οποία επεξεργαζόμουν στη φόρμα "Edit_pelates". Αν βάλω τον αντίστοιχο παραπάνω κώδικα, ναι μεν θα με πάρει σε αυτήν την εγγραφή, αλλά δε θα μου επιτρέπει να μετακινηθώ στις υπόλοιπες. (γιατί στην ουσία εφαρμόζεται φίλτρο). Γνωρίζει κανείς τί μπορώ να κάνω; Επιπλέον θα ήθελα να ξέρω πως γίνεται να πάω αμέσως στην τελειταία εγγραφή της φόρμας "Pelates" βάζοντας κώδικα στο κλικ του κουμπιού Πίσω και όχι στο άνοιγμα ή στη φόρτωση της φόρμας "Pelates", γιατί αυτό νομίζω ότι μπορώ να το καταφέρω με τον παρακάτω κώδικα On Error GoTo Err_ÅíôïëÞ21_Click DoCmd.GoToRecord , , acLast Exit_ÅíôïëÞ21_Click: Exit Sub Err_ÅíôïëÞ21_Click: MsgBox Err.Description Resume Exit_ÅíôïëÞ21_Click |
#2
| ||||
| ||||
Καλημέρα Σάκη! Επειδή δεν γνωρίζω με ποιο τρόπο δεν επιτρέπεις την επεξεργασία δεδομένων στην αρχική σου φόρμα, σου προτείνω ένα πιο γενικευμένο κώδικα: Κώδικας: Private Sub cmdOpenEditForm_Click() Dim CurrentID As Long Dim stDocName As String Dim stLinkCriteria As String Dim rs As Object On Error Resume Next If Me.Dirty Then DoCmd.RunCommand acCmdSaveRecord End If If Err <> 0 Then Beep MsgBox Err.Description Exit Sub End If stDocName = "Edit_Pelates" stLinkCriteria = "[kwdikos_pelati]=" & Nz(Me![kwdikos_pelati], "Null") DoCmd.OpenForm stDocName, acNormal, "", stLinkCriteria, , acDialog If Not IsNull(Me![kwdikos_pelati]) Then Me.Refresh Exit Sub Else CurrentID = Nz(DMax("[kwdikos_pelati]", Me.RecordSource), 0) End If Me.Requery Set rs = Me.Recordset.Clone rs.FindFirst "[kwdikos_pelati] = " & CurrentID If Not rs.EOF Then Me.Bookmark = rs.Bookmark rs.Close End Sub Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#3
| |||
| |||
Γεια σου Τάσο!!! Απαγορεύω την επεξεργασία από τις ιδιότητες της φόρμας, καρτέλα δεδομένα και κάνω ¨Οχι τη δυνατότητα επεξεργασίας και διαγραφών. Έχω μπερδευτεί με τον κώδικα που μου έστειλες. Τι ακριβώς πετυχαίνω με αυτόν; Πού θα πρέπει να τον δοκιμάσω; |
#4
| ||||
| ||||
Σάκη, βάλε τον κώδικα στο συμβάν Click ενός κουμπιού στην κύρια φόρμα και θα γίνει το ζητούμενο σου. Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#5
| |||
| |||
Τάσο, δοκίμασα τον κώδικα που μου έστειλες, αλλά κάνει ακριβώς το ίδιο πράγμα με το δικό μου κώδικα. Βασικά εγώ ήθελα από την Edit_Pelates να πηγαίνω στη φόρμα Pelates, οπότε στον κώδικά σου άλλαξα το stDocName = "Edit_Pelates" σε stDocName = "Pelates". Όταν λοιπόν με τον κώδικά σου πηγαίνω από την Edit_pelates στην Pelates, ναι μεν πηγαίνω αμέσως στη σωστή εγγραφή, αλλά εφαρμόζεται φίλτρο και δεν μπορώ να δω τις υπόλοιπες εγγραφές. Αυτό είναι το πρόβλημα που προσπαθώ να λύσω. Στην ουσία λοιπόν, εσύ μου έδωσες έναν άλλο τρόπο για να κάνω αυτό που ήδη είχα καταφέρει. Ελπίζω να καταλαβαίνεις το πρόβλημα. Σε κάθε περίπτωση, σ'ευχαριστώ που ασχολείσαι με το θέμα μου. |
#6
| |||
| |||
Σάκη καλισπέρα Για δοκίμασε στο cmdOpenEdit_pelates_Click() αντι για DoCmd.Close Form_pelates.Visible = False και για την επιστροφή στο cmdPisoStousPelates_Click() της φόρμας Edit_pelates DoCmd.Close (τη φόρμα Edit_pelates) Form_pelates.Visible = True Φιλικά Δημήτρης |
#7
| |||
| |||
Παράθεση:
για την επιστροφή στο cmdPisoStousPelates_Click() της φόρμας Edit_pelates μετά το DoCmd.Close (τη φόρμα Edit_pelates) βάλε Form_pelates.Visible = True |
#8
| |||
| |||
Χαχά!!! Δημήτρη όταν διάβασα τη σκέψη σου είπα "αποκλείεται να υπάρχει τόσο απλή λύση"... Και όντως!!! Αυτό που μου πρότεινες κάνει τη δουλειά που θέλω!!! Εναλλακτικός ο τρόπος σκέψης σου!!! Σ' ευχαριστώ πάρα πολύ!!! Πάντως, αν μάθαινα πως μπορώ βρισκόμενος σε μία φόρμα, να πάω αμέσως στην τελευταία εγγραφή μιας άλλης φόρμας, τότε θα ήμουν 100% καλυμμένος. |
#9
| |||
| |||
Καλησπέρα/Καλημέρα στην παρέα Πράγματι η λύση που πρότεινε ο Δημήτρης είναι έξυπνη και απλή. Πιστεύω όμως ότι, αν κάνουμε αλλαγές δεδομένων στη φόρμα Edit_pelates, δε θα εμφανίζονται στη φόρμα pelates, όταν την κάνουμε ορατή. Για να πάμε στην τελευταία εγγραφή, στο κουμπί που εμφανίζει τη φόρμα pelates, μπορούμε να βάλουμε τον κώδικα: Forms("pelates").Recordset.MoveLast Φιλικά/Γιώργος |
#10
| ||||
| ||||
Καλησπέρα σε όλους! Σάκη ο κώδικας που υπάρχει στο μήνυμα σου: Κλείνει την αρχική φόρμα "Pelates". Ανοίγει τη φόρμα "Edit_Pelates" με κριτήριο το ID της τρέχουσας εγγραφής της αρχικής ("Pelates") που το έχεις βάλει προηγουμένως στη μεταβλητή stLinkCriteria. Ο δικός μου κώδικας δεν κάνει ακριβώς τα ίδια με τον δικό σου. Τι κάνει ο κώδικας αυτός : Δεν κλείνει τη φόρμα πελάτες. Έτσι, τυχόν μεταβλητές που έχουν δηλωθεί στον κώδικα της φόρμας παραμένουν ως έχουν για περαιτέρω χρήση. Αποθηκεύει τυχόν μη αποθηκευμένη εγγραφή για να μπορέσει να την εμφανίσει στη φόρμα "Edit_Pelates". Ανοίγει τη φόρμα "Edit_Pelates" σε παράθυρο διαλόγου αποκλείοντας έτσι κάθε ενέργεια σε οποιοδήποτε άλλο σημείο της εφαρμογής εκτός από την ίδια τη φόρμα. Παράλληλα, επειδή φόρμα "Edit_Pelates" σε παράθυρο διαλόγου, ο κώδικας που την άνοιξε διακόπτεται και θα συνεχίζει να εκτελείται μόνο όταν εκείνη κλείσει. Στη συνέχεια της εκτέλεσης του κώδικα θα γίνει ανανέωση των δεδομένων της φόρμας "Pelates" και αν έχει δημιουργηθεί νέα εγγραφή θα την επιλέξει. Αν στη φόρμα εφαρμόζεται μια ταξινόμηση σε κάποιο πεδίο τότε δεν είναι απαραίτητο η τελευταία εγγραφή που καταχωρήθηκε να βρίσκεται στο τέλος. Με γνώμονα τα παραπάνω και μην γνωρίζοντας τον τρόπο που περιορίζεις την επεξεργασία της αρχικής φόρμας, αλλά και τη δόμηση της βάσης, σου έστειλα όπως είπα αυτόν τον "γενικευμένο κώδικα". Όσο για το φίλτρο που δεν θέλεις να εφαρμόζεται στη φόρμα "Edit_Pelates" θα πρέπει να τροποποιηθεί ο κώδικας στη φόρμα "Pelates" αλλά και να προστεθεί ο παρακάτω κώδιικας στη φόρμα "Edit_Pelates": Κώδικας: Private Sub Form_Load() Dim rs As Object, CurrentID As Long CurrentID = Nz(Me.OpenArgs) If CurrentID = 0 Then DoCmd.GoToRecord , , acNewRec Else Set rs = Me.Recordset.Clone rs.FindFirst "[kwdikos_pelati] = " & CurrentID If Not rs.EOF Then Me.Bookmark = rs.Bookmark rs.Close End If End Sub Καλή συνέχεια! Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[ Φόρμες ] Άνοιγμα φόρμας επιλέγοντας εγγραφή | noname | Access - Ερωτήσεις / Απαντήσεις | 2 | 18-02-16 11:39 |
Μετάβαση απο σύνθετο πλαίσιο σε εγγραφή | soc07 | Access - Ερωτήσεις / Απαντήσεις | 0 | 25-02-11 12:23 |
[ Φόρμες ] ΜΕΤΑΒΑΣΗ ΣΕ ΕΓΓΡΑΦΗ | gregory_m | Access - Ερωτήσεις / Απαντήσεις | 2 | 27-09-10 23:26 |
Άνοιγμα φόρμας με F5 | mdragon | Access - Ερωτήσεις / Απαντήσεις | 2 | 23-04-10 18:05 |
Κενή εγγραφή στο τέλος συνεχούς φόρμας | stavros2244 | Access - Ερωτήσεις / Απαντήσεις | 3 | 09-04-10 08:45 |
Η ώρα είναι 07:14.