Χρειάζεται να μάθετε ποιος στην επιχείρησή σας πρόσθεσε μια συγκεκριμένη εγγραφή; Ή ποιος την ενημέρωσε τελευταίος; Είναι μια αρκετά συνηθισμένη απαίτηση, αλλά δυστυχώς όχι μια για την οποία η Microsoft Access έχει ενσωματωμένη λειτουργικότητα. Η απλή προσθήκη ενός πεδίου "τελευταία ενημέρωση από" στον πίνακά σας μπορεί (σε πολλές περιπτώσεις) να είναι αρκετή για να καλύψει τις περισσότερες ανάγκες, αλλά πώς ξέρετε ποιος ενημέρωσε την εγγραφή εάν η Access δεν μπορεί να σας πει; Λίγος κώδικας VBA είναι το μόνο που χρειάζεστε, όπως θα σας δείξει αυτό το άρθρο.
Δεν χρειάζεται να δημιουργήσετε τη δική σας φόρμα "σύνδεσης" για να καταγράψετε το όνομα χρήστη
Εκτός αν η βάση δεδομένων σας έχει τη δική της φόρμα σύνδεσης ή μηχανισμό, τότε ο μόνος τρόπος με τον οποίο θα μπορείτε να γνωρίζετε ποιος χρησιμοποιεί αυτήν τη στιγμή / συνδέεται στη βάση δεδομένων είναι να χρησιμοποιήσετε ένα από τα αρχεία του λειτουργικού συστήματος των Windows - συγκεκριμένα το "mpr.dll" αρχείο. Εάν δεν έχετε χρησιμοποιήσει εξωτερικά dll στον κώδικά σας στο παρελθόν, μπορεί να φαίνεται λίγο τρομακτικό, αλλά όπως θα δείτε στον παρακάτω κώδικα, είναι στην πραγματικότητα αρκετά απλό.
Λοιπόν - ας καθορίσουμε τι θέλουμε να κάνει ο κώδικάς μας…
"Επιτρέψτε μου να έχω το όνομα του συνδεδεμένου χρήστη"
Πρώτον, ο κωδικός:
Declare Function GetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal Name As String, ByVal UserName As String, Length As Long) As Long Public Function GetUserName() As String Dim returnStatus As Integer Dim Name, UserName As String 'Allocate space for user name to be stored in UserName = Space(255) ' Call the aliased function in the mpr.dll file. returnStatus = GetUser(Name, UserName, 255) If returnStatus = 0 Then 'Strip the username from the returned string UserName = Left(UserName, InStr(UserName, Chr(0)) - 1) Else ' An error occurred. GetUserName = "Error retrieving the user name." End End If GetUserName = UserName End Function
Ο κωδικός, εξήγησε
Το πρώτο πράγμα που θα δείτε είναι ότι κάνουμε μια αναφορά σε μια εξωτερική συνάρτηση, που περιέχεται στο αρχείο mpr.dll. Το κάνουμε αυτό δηλώνοντας ένα τοπικό όνομα (GetUser) για τη δημόσια λειτουργία που περιέχεται στο dll (σε αυτήν την περίπτωση, WNetGetUserA). - ορίζουμε επίσης ποιες παραμέτρους είναι απαραίτητες για την κλήση συνάρτησης - σε αυτήν την περίπτωση οι παράμετροι "Όνομα", "Όνομα χρήστη" και "Μήκος". Το μόνο που μας ενδιαφέρει πραγματικά είναι το "Όνομα χρήστη", αλλά το υπόλοιπο πρέπει να παρέχεται επίσης, καθώς έτσι ρυθμίζεται η λειτουργία εντός του dll.
Τώρα που έχει γίνει, δημιουργούμε τη δική μας λειτουργία, από την οποία θα κάνουμε μια κλήση σε αυτήν την εξωτερική λειτουργία. Ο κώδικας για τη λειτουργία μας είναι αρκετά ελάχιστος, αλλά ας εξετάσουμε τα βασικά στοιχεία:
- «Όνομα_Χρήστη = Διάστημα(255)» – αν αναλύσετε τον κώδικα στο πρόγραμμα εντοπισμού σφαλμάτων, θα δείτε ότι όταν καλείται η συνάρτηση «GetUser()», η μεταβλητή «Όνομα_Χρήστη» που της μεταβιβάζουμε αντικαθίσταται. Για να συμβεί αυτό, η μεταβλητή χρειάζεται αρκετή μνήμη για την αποθήκευση των δεδομένων, επομένως απλώς διαθέτουμε 255 χαρακτήρες διαστήματος στη μεταβλητή, καθώς αυτό θα πρέπει να είναι υπεραρκετό για να συμπεριληφθούν τα περισσότερα (αν όχι όλα) ονόματα χρηστών.
- Καταγράφουμε την τιμή επιστροφής από τη συνάρτηση κλήσης στη μεταβλητή "returnStatus". Το μηδέν (0) εδώ σημαίνει ότι η κλήση ήταν επιτυχής, οτιδήποτε άλλο σημαίνει ότι έχει προκύψει σφάλμα.
- Τέλος, η μεταβλητή "UserName" πρέπει να τακτοποιηθεί, καθώς θα είναι ουσιαστικά γεμάτη με null chars, ώστε να εξάγουμε τους χαρακτήρες που βρίσκονται στη μεταβλητή πριν βρεθεί ένα Chr (0).
Δείτε - τώρα που δεν ήταν τόσο κακό ήταν! Και τώρα, τουλάχιστον εάν πρέπει να αντιμετωπίσετε καταστροφή βάσεων δεδομένων mdb, θα ξέρετε ποιος χρησιμοποίησε τη βάση δεδομένων τελευταία, ώστε ποιος μπορείτε να κατηγορήσετε! (Αστειεύομαι εδώ φυσικά!)
Εισαγωγή συγγραφέα:
Ο Mitchell Pond είναι ειδικός στην ανάκτηση δεδομένων στο DataNumen, Inc., η οποία είναι ο παγκόσμιος ηγέτης στις τεχνολογίες ανάκτησης δεδομένων, συμπεριλαμβανομένων επισκευή SQL Server πρόβλημα και υπερέχουν προϊόντα λογισμικού ανάκτησης. Για περισσότερες πληροφορίες επισκεφθείτε www.datanumen.com
