Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > Φόρμα με υποφόρμα- Αποθήκευση κύριας μόνο πατώντας ένα συγκεκριμένο κουμπί

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 25-06-17, 15:59
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 01-10-2014
Μηνύματα: 13
Προεπιλογή Φόρμα με υποφόρμα- Αποθήκευση κύριας μόνο πατώντας ένα συγκεκριμένο κουμπί

Καλησπέρα παιδιά!
Ζητάω την βοήθεια σας για έχω πραγματικά απελπιστεί. Στόχος μου είναι ο χρήστης να προχωράει σε Αποθήκευση ΜΟΝΟ αν πατήσει ένα συγκεκριμένο κουμπί.
Όταν θέλω να επεξεργαστώ η να καταχωρίσω δεδομένα ανοίγω την ανάλογη φόρμα (Single Form) στην επιθυμητή εγράφη. Στην φόρμα αυτή έχω απενεργοποιήσει. τα Navigation buttons. Επίσης θέτω την ιδιότητα Cycle= Current Page. Έτσι ο μόνος τρόπος για να αποθηκευτή η εγγραφή είναι να κλίσεις την φόρμα από το κουμπί [x] πάνω δεξιά. Προσθέτοντας τώρα εγώ δυο ακόμα κουμπιά cmdSave και cmdCancel και με το παρακάτω κώδικα κατάφερνα και προχωρούσα σε Αποθήκευση μόνο όταν ο χρήστης πατούσε το κουμπί cmdSave.
Κώδικας:
Private saveFlage As Boolean

Private Sub cmdSave_Click()
Dim strMsg As String
strMsg = "Είστε βέβαιος οτι Θέλετε να προχωρήσετε σε Αποθήκευση;"
If MsgBox(strMsg, vbExclamation + vbYesNo + vbDefaultButton2, "Save") = vbYes Then
    saveFlage = True
    Me.Dirty = False '<-Apothikeusi
    DoCmd.Close acForm, Me.Name
End If
End Sub

Private Sub cmdCancel_Click()
If Me.Dirty = True Then
    Me.Undo
End If
DoCmd.Close acForm, Me.Name
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
If saveFlage = False Then 'Periptosi pou patame to Close Button [x] pano deksia
    If Me.Dirty = True Then
        MsgBox "Η καρτέλα Θα κλείσει χωρίς Αποθήκευση!", vbExclamation + vbOKOnly, "Close"
        Me.Undo
    End If
End If
End Sub
Όλα καλά μέχρι εδώ. Το πράγμα όμως κολλάει όταν στην κύρια αυτή φόρμα προσθέσω μια υποφόρμα. Τότε μόλις ο χρήστης πατήσει πάνω στην υποφόρμα η access πάει να προχωρήσει αυτόματα σε αποθήκευση τις κύριας( αν βέβαιά η ιδιότητα Dirty της κύριας είναι false). Αυτό έχει σαν συνέπια να χτυπήσουν κατά σειρά τα ακόλουθα Events: Form_BeforeUpdate -> Form_AfterUpdate ->SubForm_Enter . Οπότε έχω τα εξής προβλήματα:

1) Δεν μπορώ να βρω πότε ο χρήστης πατάει πάνω στην υποφόρμα καθώς το OnEnter Event του SubForm Control χτυπάει μετά το BeforeUpdate τις κύριας φόρμας
2) Ακόμα και αν εντοπίσω πότε ο χρήστης πατάει πάνω στην φόρμα, αν ακυρώσω την αποθήκευση (Form_BeforeUpdate->Cancel=true) η access δεν μπαίνει πότε στην υποφόρμα.

Θέλω να επισημάνω ότι αυτό συμβαίνει είτε η υποφόρμα είναι συνδεδεμένη με την κύρια είτε ΔΕΝ ΕΙΝΑΙ ΣΥΝΔΕΔΕΜΕΝΗ.
Πραγματικά έχω απελπιστεί, νομίζω ότι με την access είναι απαγορευτικός ο δημοφιλέστερος τρόπος αποθήκευσης….. δηλαδή μόνο όταν πατήσεις σε ένα συγκεκριμένο κουμπί. Ζητάω την βοήθεια σας να δω πως αντιμετωπίζετε παρόμοια κατάσταση
Συνημμένα Αρχεία
Τύπος Αρχείου: zip BoundFormWithSub_SaveButton.zip (50,7 KB, 15 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 25-06-17, 19:38
Όνομα: ΝΑΣΟΣ
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 14-10-2010
Μηνύματα: 455
Προεπιλογή

Καλησπέρα σε όλους.
Γιάννη μπορείς να δοκιμάσεις και το εξής:
Κώδικας:
Private Sub Form_BeforeUpdate(Cancel As Integer)
  If Not (Me.NewRecord) Then
    Exit Sub
  End If
 
End Sub

Τελευταία επεξεργασία από το χρήστη nasos23 : 25-06-17 στις 21:02. Αιτία: Διόρθωση
Απάντηση με παράθεση
  #3  
Παλιά 25-06-17, 21:07
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 01-10-2014
Μηνύματα: 13
Προεπιλογή

Νάσο σε ευχαριστώ για την απάντηση. Δεν βλέπω όμως πως μπορεί να βοηθήσει η πρόταση σου.Μάλλον τα είπα μπερδεμένα ποιο πάνω.

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

Το ζητούμενο μου λοιπόν είναι πώς να εισέλθω στην υποφορμα χωρίς να αποθηκευτεί η Κύρια φόρμα.

Παράδειγμα:
Έστω ότι εχουμε μια κύρια φόρμα η οποία περιέχει μια υποφορμα. Η κύρια είναι Bound. Η υποφορμα δεν μας ενδιαφέρει αν είναι συνδεδεμένη η όχι με την κύρια. Έστω επίσης δεν έχουμε εισάγει κανένα κώδικα σε καμία από τις δυο φόρμες.
1) Ανοίγουμε την κύρια φόρμα σε μια συγκεκριμένη εγγραφή και αλλάζουμε την τιμή κάποιου παιδιού. Η ιδιότητα τις Dirty γίνεται True.
2) Έπειτα κλικαρουμε πανω στην υποφορμα.
3) Η Αccess θα αποθηκεύσει αυτόματα την κύρια φόρμα
4) Η Access θα μας εισάγει στην υποφορμα
Δες σε παρακαλώ το συνημμένο
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb Example1.mdb (344,0 KB, 26 εμφανίσεις)
Απάντηση με παράθεση
Απάντηση στο θέμα

Εργαλεία Θεμάτων
Τρόποι εμφάνισης

Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[ Φόρμες ] Κουμπί εύρεσης σε φόρμα που περιέχει δευτερεύουσα φόρμα sakis297 Access - Ερωτήσεις / Απαντήσεις 2 21-11-14 19:23
[ Φόρμες ] ΚΟΥΜΠΙ ΕΠΙΛΟΓΗΣ ΣΕ ΥΠΟΦΟΡΜΑ artchrist73 Access - Ερωτήσεις / Απαντήσεις 3 09-11-14 19:26
[ Φόρμες ] Προσθήκη νέας εγγραφής μόνο με κουμπί Χρήστος Access - Ερωτήσεις / Απαντήσεις 11 23-06-13 21:45
[ Υποφόρμες ] Εμφάνιση Μόνο τελευταίας εγγραφής σε συνεχή φόρμα wanaka Access - Ερωτήσεις / Απαντήσεις 2 09-02-12 19:15


Η ώρα είναι 11:13.