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/26-enimerosi-pinaka-apo-mi-syndedemeni-forma.html)

Meteora 03-03-09 19:29

Ενημέρωση πίνακα απο μη συνδεδεμένη φόρμα
 
Φίλοι καλησπέρα

Φτιάχνω μια εφαρμογή που διαχειρίζεται τη βιβλιοθήκη σχολικών μονάδων (Βιβλία, Δανειζόμενοι, Δανεισμοί, Επιστροφές, αναφορές, εκτυπώσεις, ...).
Σκέφτηκα το εξής κάποια στιγμή.
Ο χρήστης της εφαρμογής αποφασίζει να αλλάξει τον κωδικό σε κάποιο (-α) βιβλίο. Αν το βιβλίο αυτό ειναι σε δανεισμό, πρέπει ο πίνακας δανεισμού βιβλίων -που περιέχει την πληροφορία αυτή -να ενημερωθεί, ετσι ώστε το βιβλίο να μη υπάρχει ταυτόχρονα με δυο κωδικούς.
Έφτιαξα φυσικά κάποιο αλγόριθμο για να λύσω αυτό το πρόβλημα.
Ας το δούμε...

Έστω η φόρμα Α που ‘Πατά’ στον πίνακα Α1 (Τίτλος Βιβλίου, Συγγραφέας, Κατηγορία, Κωδικός , …) . Έστω επίσης δεύτερος πίνακα Β1 που περιέχει τα πεδία (Δανειζόμενος, Ημερομηνία δανεισμού, κωδικός Βιβλίου, …)
Επιθυμώ :
‘Όταν αλλάξω τον κωδικό βιβλίου στη Φόρμα Α να ενημερωθεί όχι μόνο ο πίνακας Α1, αλλά και ο πίνακας Β1.

Βήμα 1 : Στον πίνακα Α1 δημιουργώ ένα πεδίο με τίτλο [ΠρωηνΚωδικος].


Βήμα 2 : Στο συμβάν ‘με την φόρτωση’ της φόρμας Α1 γράφω τον παρακάτω κώδικα αφού θέλω το πεδίο να είναι αόρατο στη φόρμα.

Private Sub Form_Load()
[ΠρωηνΚωδικος].Visible = False
End Sub


Βήμα 3 : Στο πεδίο [Κωδικος] της φόρμας και στο συμβάν ‘με την είσοδο’, γράφω τον παρακάτω κώδικα, ώστε να στείλω αυτή την τιμή του στο πεδίο [ΠρωηνΚωδικός], πριν το πεδίο [Κωδικός] αλλάξει.

Private Sub Κωδικος_Enter()
ΠρωηνΚωδικος = Κωδικος
End Sub


Βήμα 4 : Στο κουμπί ‘Αποθήκευση’ –εκτός των άλλων- υπάρχει το παρακάτω τμήμα του κώδικα που αλλάζει την τιμή του κωδικού στον πίνακα Β1.

If [Κωδικος] <> [ΠρωηνΚωδικος] Then
Dim SQL As String
SQL = "UPDATE ΔΑΝΕΙΟ " & _
"SET ΔΑΝΕΙΟ.ΚωδικοςΒιβλιου = Κωδικος " & _
"WHERE ΔΑΝΕΙΟ.ΚωδικοςΒιβλιου = ΠρωηνΚωδικος"
DoCmd.RunSQL SQL
End If


Ίσως πήγα από Θεσσαλονίκη στην Αθήνα μέσω …Ορεστιάδας! Πάντως πήγα…
Οποιαδήποτε άλλη διαχείριση ειναι το ζητούμενο !

Με εκτίμηση
O meteora

kon73 04-03-09 07:34

Re: Ενημέρωση πίνακα απο μη συνδεδεμένη φόρμα
 
Αγαπητέ Φίλε Meteora Καλημέρα,

Η ενημέρωση διαδοχικά του κωδικού Βιβλίου σου προτείνω να γίνει με 2 τρόπους.

1. Στις σχέσεις των πινάκων όπου εκεί θα έχεις τον πίνακα βιβλία με τους σχετικούς πίνακες και σαν ιδιότητα της σχέσης θα έχεις Διαδοχική ενημέρωση των σχετικών εγγραφών (Ώστε σε κάθε αλλαγή του κωδικού βιβλίου θα αλλάζει και ο κωδικός βιβλίου στους άλλους πίνακες) και προτείνω να επιλεχθεί και το Διαδοχική διαγραφή των σχετικών εγγραφών (Καθότι με την διαγραφή του βιβλίου θα έχουμε και τις διαγραφές των εγγραφών του στους σχετικούς πίνακες. Κάτι που πρέπει σωστά και να το εφαρμόσουμε καθότι διαφορετικά θα είχαμε εγγραφές με κωδικό βιβλίου που δεν υπάρχει.

2. Εαν θέλεις να διατηρήσεις την τιμή που έχει το πεδίο κωδικός αριθμός βιβλίου δηλαδή την παλιά τιμή του πριν την τροποποίησή του, δοκίμασε να το βάλεις σε μία μεταβλητή με εμβέλεια φόρμας (Ορισμός μεταβλητής ως private, πχ private IntBookID as Integer) και θα αποδίδεις την τιμή στην μεταβλητή στο Event On Dirty (Με αλλοίωση εγγραφής μετά την αποθήκευση) της φόρμας.
πχ. (BookID το όνομα του textbox)
Κώδικας:

Private IntBookID as Integer
Private Sub Form_Dirty(Cancel As Integer)
    IntBookID=me.BookID
End Sub

Από εκεί και πέρα έχεις την παλιά τιμή και φυσικά με το AfterUpdate Event έχεις και την καινούργια τιμή. Οπότε εκτελείς και ανάλογα το SQL ερώτημά σου.

Φιλικά

iliadisk / Kon73


Η ώρα είναι 05:55.

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


Search Engine Optimization by vBSEO 3.3.2