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/5606-h-basi-na-anoigei-mono-gia-anagnosi.html)

dimitrisp 24-07-20 21:00

Η βάση να ανοίγει μόνο γιά αναγνωση
 
Καλησπέρα

Μια φόρμα μπορούμε, μέσα από τις ιδιότητες, να τη ρυθμίσουμε ώστε να είναι μόνο για ανάγνωση!

Είναι δυνατόν, να γενικεύσουμε τη ρύθμιση αυτή (με κώδικα σε ένα κουμπί εντολής) έτσι ώστε όλες οι φόρμες τής βάσης δεδομένων
να είναι μόνον για ανάγνωση και το αντίστροφο (πλήρη λειτουργικότητα)?


Σας ευχαριστώ εκ των προτέρων

Tasos 28-07-20 18:08

Καλησπέρα Δημήτρη!

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

Αυτό είναι το ένα σκέλος.

Το επόμενο είναι να επισημάνεις ποια από τα στοιχεία ελέγχου στις φόρμες μπορούσαν με το κλικ ή με κάποιο άλλο συμβάν να προκαλέσουν έμμεσα ή άμεσα αλλαγές στις εγγραφές των πινάκων και χρησιμοποιώντας κώδικα VBA να τα απομονώσεις.

Εναλλακτικά μπορείς να δημιουργήσεις αντίγραφα των φορμών που στη συνέχεια θα τροποποιήσεις έτσι ώστε να συμπεριφέρονται σαν "ReadOnly".

Έτσι με τη χρήση κώδικα και αναλόγως τα δικαιώματα του τρέχοντος χρήστη θα φορτώνονται οι κατάλληλες φόρμες κάθε φορά.

Με εκτίμηση

Τάσος

dimitrisp 29-07-20 00:04

1 Συνημμένο(α)
Γεια σας

Τάσο σε ευχαριστώ γιά την απάντησή σου.

Προσπάθησα να απενεργοποιήσω προγραμματιστικά τη δυνατότητα καταχώρησης, επεξεργασίας και διαγραφής δεδομένων
για κάθε φόρμα, σε επίπεδο τρέχοντος χρήστη, (κάνοντας χρήση των, AllowAdditions, AllowDeletions, AllowEdits επάνω
στο παράδειγμα που ανέβασε πρόσφατα ο φίλος Βραχνάκης Γιώργος - το οποίο σχετίζεται με δικαιώματα χρηστών),
αλλά δεν βλέπω να τα καταφέρνω με τον πρόσθετο κώδικα!

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

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

vraxnakisg 29-07-20 07:40

1 Συνημμένο(α)
Καλημέρα Δημήτρη,

Δες ένα παράδειγμα για το ζητούμενο σου.

Δες την διαφορά της φόρμας frmUser ανάλογα με το λογαριασμό που κάνεις login στην εφαρμογή πατώντας το κουμπί «Άνοιγμα φόρμας FrmUser» από την φόρμα frm_Home.

Ευχαριστώ.

Tasos 29-07-20 10:21

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

Γιώργο, Δημήτρη, θέλω να σας ευχαριστήσω για τη συμμετοχή και τη δραστηριότητα σας στο φόρουμ!

Δημήτρη, το παραδειγματικό αρχείο του Γιώργου νομίζω ότι σε καλύπτει σε μεγάλο βαθμό. Αν χρειαστείς κάτι άλλο, εδώ είμαστε.

Αυτό που πρέπει σίγουρα να ελέγξεις είναι ποια από τα στοιχεία ελέγχου στις φόρμες μπορούσαν με το κλικ ή με κάποιο άλλο συμβάν να προκαλέσουν έμμεσα ή άμεσα αλλαγές στις εγγραφές των πινάκων και χρησιμοποιώντας κώδικα VBA ή τροποποίηση της μακροεντολής, να τα απενεργοποιήσεις ή να αποκρύψεις.

Αυτό γιατί το να ανοίξεις τη φόρμα σε κατάσταση μόνο για ανάγνωση δεν αποτρέπει την αλλοίωση δεδομένων που προέρχεται από VBA ή μακροεντολή της Access.

Με εκτίμηση
Τάσος

dimitrisp 29-07-20 11:08

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

Τάσο και Γιώργο, ευχαριστώ για τις απαντήσεις σας.
Είμαι ειλικρινά υπόχρεος που ασχοληθήκατε με το θέμα μου!

Πράγματι η φόρμα [frmUser] είναι "ReadOnly".
Ωστόσο, από κάποιες πρόχειρες δοκιμές που έκανα, αυτό δεν ισχύει για άλλες φόρμες που προσθέτουμε
στην παραδειγματική βάση. Και οι φόρμες στη βάση μου είναι αρκετές.

Το ζητούμενο είναι ανοίγοντας τη βάση ως χρήστης1, ας πούμε, όλες οι φόρμες που εμπεριέχονται
στην τρέχουσα βάση να είναι "ReadOnly"!


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

Απλά, υποθέτω ότι, σε κάθε συμβάν,όπου χρειάζεται, θα πρέπει να προστεθεί επιπλέον κώδικας
ο οποίος να ακυρώνει τη λειτουργία της τρέχουσας VBA του συμβάντος, εφόσον η βάση λειτουργεί με δικαιώματα χρήστη1.

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

vraxnakisg 29-07-20 14:37

Καλησπέρα σε όλοι την παρέα.

Φιλέ Τάσο οι «παρατηρήσεις» σου είναι ουσιαστικές και πάντα πολλά βήματα μπροστά.

Φιλέ Δημήτρη αυτό που λες: Το ζητούμενο είναι ανοίγοντας τη βάση ως χρήστης1, ας πούμε, όλες οι φόρμες που εμπεριέχονται στην τρέχουσα βάση να είναι "ReadOnly"!

Δεν είναι και τόσο εύκολο να πραγματοποιηθεί γιατί οι φόρμες είναι αντικείμενα με ιδιότητες και οι φόρμες έχουν αλλά αντικείμενα απάνω με διάφορες ιδιότητες (Τάσος).

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

Ο παρακάτω κώδικας ανοίγει οποιαδήποτε φόρμα που θα πάρει σαν ορμιά aForm και ανάλογα με το UserGroup που ανήκει ο χρήστης θα ανοίξει την φόρμα κανονικά ή ReadOnly.

Function OpenForm(ByVal aForm As Form, ByVal UserGroup As Integer)
If UserGroup = 1 Then
DoCmd.OpenForm aForm.Name, acNormal
ElseIf UserGroup = 2 Then
DoCmd.OpenForm aForm.Name, acNormal, , , acFormReadOnly
End If
End Function

Έτσι λοιπόν σε κάθε συμβάν που έχεις και ανοίγεις κάποια φόρμα στην βάση σου θα πρέπει να καλείς την συνάρτηση «OpenForm» με ορίσματα την φόρμα που θέλεις να ανοίξεις «Form_frmUser» και «UserGroup».

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

Βέβαια μπορείς να κάνεις και αυτό που σου πρότεινε παραπάνω ο Τάσος να έχεις διπλές (με έτοιμες τις ιδιότητες ReadOnly) φόρμες και ανάλογα τον χρήστη να ανοίγεις την φόρμα που πρέπει κάθε φορά.

Ευχαριστώ.

dimitrisp 29-07-20 23:06

Γεια σας

Γιώργο, οι σαφείς παρατηρήσεις σου καθώς και οι ακριβείς επισημάνσεις σου, σχετικά με την επίλυση του ζητούμενου,
θεωρώ ότι έγιναν κατανοητές (;) εκ μέρους μου.

Θα προσπαθήσω να τις εφαρμόσω και θα επανέλθω...

Σε κάθε περίπτωση, εκφράζω θερμές ευχαριστίες τόσο σε εσένα αλλά και στον Τάσο
για την ανεκτίμητη βοήθεια που μας προσφέρετε!

Να είστε πάντα καλά.
Καλή συνέχεια...


Η ώρα είναι 02:31.

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


Search Engine Optimization by vBSEO 3.3.2