Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Μεταφορά δεδομένων απο πεδίο σε πεδίο
Καλησπέρα σε όλα τα παιδιά του νέου Forum. Κώστα μπράβο σου! Καλή συνέχεια φίλτατε... Εχω ένα πίνακα Table1 και αυτός περιέχει πεδία : 1. Αλφαριθμητικα (Επίθετο, Όνομα, τμήμα...) και 2. Πεδία αριθμητικά ΠεδίοΑ και Πεδίο1, πεδίο2, ...πεδίο50! Σε μια φόρμα -πολλών στοιχείων- εμφανίζω τα αλφαριθμητικά πεδία και το πεδίοΑ. Η φόρμα ειναι φιλτραρισμένη ως προς το πεδίο [τμήμα]. Στο πεδίοΑ προσθέτω-αλλάζω και γενικά διαχειρίζομαι αριθμούς (βαθμολογία μαθητών). Ψάχνω την εντολή με την οποία αυτό το υλικό που διαχειρίστηκα στη φιλτραρισμένη φόρμα να περάσει απο το πεδίοΑ στο π.χ. πεδίο1 Ελπίζω να ειναι εντολή και όχι κάποιο "σμήνος" απο γραμμές κώδικα. Με εκτίμηση και ευχή να είστε όλοι καλά meteora |
#2
| |||
| |||
Re: Μεταφορά δεδομένων απο πεδίο σε πεδίο
Φίλε Meteora Καλημέρα, Σ'ευχαριστώ για τα καλά σου λόγια και εύχομαι οι προσδοκίες μας να εκπληρωθούν. Λοιπόν Να δώσω 2 λύσεις τις οποίες διαλέγεις και εφαρμόζεις. Θα αναφέρω φυσικά τα πλεονεκτήματα αυτών των λύσεων : 1. Η φόρμα σου έχει ουσιαστικά όλα τα πεδία καθότι αυτά βρίσκονται στον πίνακα Table1. Επομένως μία απλή λύση είναι να δώσεις στο Event AfterUpdate του πεδίουΑ την εξής γραμμή κώδικα Κώδικας: me.Πεδίο1=me.ΠεδίοΑ Κώδικας: docmd.RunSql("Update Table1 Set Table.Πεδίο1=" & me.ΠεδίοΑ &" where τμήμα='"& me.τμήμα & "'") 1. Με την πρώτη λύση έχεις ουσιαστικά ένα copy-paste των τιμών που έχουν τα πεδία της φόρμας. Δεν χρειάζεται refresh η φόρμα και το αποτέλεσμα είναι άμεσα ορατό. Τι μπορεί όμως να συμβεί. Αν το πεδίοΑ είναι το τελευταίο στοιχείο-αντικείμενο της φόρμας τότε μετά το Enter ή γενικώς το afterupdate του μεταβαίνουμε σε νέα εγγραφή της φόρμας και η Access αναξιόπιστα μπορεί να δώσει την τιμή του ΠεδίουΑ στο πεδίο1 της επόμενης εγγραφής και όχι της ιδίας εγγραφής. 2. Εδώ έχουμε εντολή SQL που είναι πιο αξιόπιστη σ'αυτό που του ζητάμε να κάνει. Ενημερώνει το λοιπόν την τιμή Πεδίο1 με το ΠεδίοΑ αρκεί το τμήμα να είναι το Unique ID δηλαδή το πρωτεύον κλειδί. Δηλαδή κάθε εγγραφή να έχει ως μοναδικό κλειδί το τμήμα και το τμήμα να μην επαναλαμβάνεται σε άλλη εγγραφή. (Επειδή αυτό όπως καταλαβαίνω δεν ισχύει βάλε στην 2η λύση όπου τμήμα ένα πεδίο που είναι και ο μοναδικός αριθμός UniqueID. Προσπαθώντας να γίνω το κατά δύναμην αναλυτικός, εύχομαι να μην σε μπέρδεψα. Αν όμως χρειάζεσαι περαιτέρω βοήθεια ξαναστείλε μου ερώτημα ή αν θέλεις στείλε μου σε PM την βάση σου. Φιλικά kon73 / iliadisk |
#3
| |||
| |||
Re: Μεταφορά δεδομένων απο πεδίο σε πεδίο
Καλησπέρα [α] Η πρώτη προτεινόμενη λύση δούλεψε. Η παρατήρηση περί 'αναξιοπιστίας' του Kon73 για τη περίπτωση της τελευταίας εγγραφής σωστή. (έχω σχετική εμπειρία απο τη σχολική μονάδα στην οποία εργάζομαι...). [β] Τη δεύτερη προτεινόμενη λύση την 'έντυσα' ως εξής και φυσικά δουλεύει! Private Sub πεδιοΑ_LostFocus() DoCmd.SetWarnings False '(1) Dim diktis As Integer '(2) diktis = Me.ID1 '(2) DoCmd.RunSQL ("Update table1 Set table1.πεδιο1=" & Me.πεδίοΑ & " where ID1=" & diktis) DoCmd.SetWarnings True '(1) End Sub Εξηγώ (για όσους γνωρίζουν λιγότερα απο μένα) : * Με τις εντολές (1) απενεργοποιώ και ξανα-ενεργοποιώ τις προειδοποιήσεις τις access για τις περιπτώσεις delete, update,... * Με τις εντολές (2) ορίζω μια αριθμητική μεταβλητή που φορτώνεται την τιμή του [ID1] της τρέχουσας εγγραφής. Το [ID1] είναι το κλειδί της κάθε εγγραφής. * Η εντολή SQL έχει ελαφρώς διαφοροποιηθεί σε σχέση με την προτεινόμενη απο τον Kon73 διότι το diktis ειναι αριθμητική μεταβλητή. Θα παρατηρήσετε ότι τον κώδικα φόρτωσα στο LostFocus του πεδίουΑ, διότι στο AfterUpdate με έδινε ένα μήνυμα περί "δράσης κάποιου άλλου χρήστη..." Στο LostFocus η εργασία γίνεται εντελώς 'αθόρυβα'. Φυσικά δεκτή κάθε παρατήρηση Ευχαριστώ τον Kon73. Με εκτίμηση Meteora |
#4
| |||
| |||
Re: Μεταφορά δεδομένων απο πεδίο σε πεδίο Παράθεση:
Κώδικας: me.dirty=false Επίσης για το να μην υπάρχουν μηνύματα σε ερωτήματα διαγραφής κλπ αντί του κώδικα που προτείνεις Βάζεις 'Application.SetOption "Confirm Action Queries", False εδώ γίνεται μια αλλαγή στις επιλογές της Access - Tools-Options -(Tab) Edit/Find - Action queries διαμέσου κώδικα. Φιλικά Ηλιάδης Κωνσταντίνος / Kon73 |
#5
| |||
| |||
Re: Μεταφορά δεδομένων απο πεδίο σε πεδίο
Καλησπέρα Φίλτατε Κωνσταντίνε η εντολή Application.SetOption "Confirm Action Queries", False μπαίνει στις ιδιότητες της φόρμας -ας πούμε στο "Με τη φόρτωση" , στο "Με την ενεργοποίηση" , ...κάπου αλλού ; Με εκτίμηση meteora |
#6
| |||
| |||
Re: Μεταφορά δεδομένων απο πεδίο σε πεδίο
Αγαπητέ φίλε μου meteora, Η εντολή αυτή μπαίνει συνήθως σε ένα Function (Συνάρτηση) μέσα σε ένα module (Λειτουργική μονάδα) της MsAccess η οποία συνάρτηση καλείται είτε με την μακροεντολή autoexec (Μακροεντολή Autoexec καλείται αυτόματα με την έναρξη της εφαρμογής) είτε με το φόρτωμα μίας φόρμας που ανοίγει αυτόματα με την έναρξη της εφαρμογής. Γενικώς οι εντολές Application.SetOption μπορούν να αλλάξουν τις τιμές των options της Access κάνοντας χρήση VBA. Υπάρχουν γενικώς πολλές επιλογές που μπορούν να αλλάξουν μέσω VBA. Ακόμα και επιλογές options του περιβάλλοντος της VBA. Με αφορμή επίσης αυτό το Forum, περιμένω προτάσεις για βελτιώσεις και γενικώς παρατηρήσεις των υπηρεσιών που προσφέρω για την MsAccess. Φιλικά Ηλιάδης Κωνσταντίνος kon73 |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[ Φόρμες ] Πεδίο Φόρμας | mgeorge | Access - Ερωτήσεις / Απαντήσεις | 2 | 21-07-14 19:28 |
Δημιουργία πεδίου με εξάρτηση των δεδομένων από άλλο πεδίο | panagiotag | Access - Ερωτήσεις / Απαντήσεις | 6 | 07-11-11 10:31 |
[ Φόρμες ] Πεδίο με χρώμα | artchrist73 | Access - Ερωτήσεις / Απαντήσεις | 4 | 24-05-11 20:00 |
Η ώρα είναι 08:57.