Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Δημιουργία πίνακα μέσω κώδικα VBA
Καλημέρα σε όσους παρακολουθούν το forum και χρόνια πολλά! Επισυνάπτω μια βάση, όπου, από ένα ερώτημα «ΚΔΕ», μέσω κώδικα VBA, δημιουργείται ένας νέος πίνακας «ΠίνακαςΚΔΕ», ο οποίος έχει ένα πεδίο επιπλέον του ερωτήματος ΚΔΕ , αυτό της αρίθμησης των εγγραφών του ΚΔΕ. Το ξεσήκωσα από μια βάση που έχει ανεβάσει παλιά ο kapetang το 2013, με σκοπό να μας δείξει πώς αριθμούνται οι εγγραφές ενός ερωτήματος ανάλογα με τα κριτήρια και την ταξινόμηση που εφαρμόζεται. Αν και είναι πολύ ενδιαφέρον θέμα η αρίθμηση των εγγραφών, αυτό που με απασχολεί αυτή τη στιγμή είναι να προσαρμόσω τον κώδικα VBA σε αυτό που θέλω, σε κάτι πολύ πιο απλό, που όμως δε μπορώ να το κάνω μόνος μου, μη γνωρίζοντας VBA. Θέλω να δημιουργείται απλώς ένας πίνακας, μέσω VBA, ολόιδιος με το ερώτημα (χωρίς το επιπρόσθετο πεδίο της αρίθμησης). Κάτι που θα μπορούσα, χωρίς VBA, να το κάνω, πολύ απλά, με ερώτημα ενέργειας (ερώτημα δημιουργίας πίνακα). Θα ήθελα, δηλαδή, στην επισυναπτόμενη βάση, να μου «διορθώσετε» τον κώδικα VBA, ώστε ο πίνακας «ΠινακαςΚΔΕ» που προκύπτει να είναι ολόιδιος με το ερώτημα ΚΔΕ (ίδια πεδία, ίδιες εγγραφές). Μάλιστα, ενώ το ερώτημα ΚΔΕ θα είχε κανονικά 26000 εγγραφές, με ένα κριτήριο που βάζω στο πεδίο Ημερομηνία (>#1/9/2020#) περιορίζω τις εγγραφές του σε λιγότερες από 2000, επειδή αλλιώς ο κώδικας δεν τρέχει (βγάζει Run time error 3163: "Το πεδίο είναι πολύ μικρό για να δεχθεί τα δεδομένα που επιχειρήσατε να προσθέσετε. Προσπαθήστε να εισάγετε ή να επικολλήσετε λιγότερα δεδομένα"). Φαντάζομαι ότι αυτό συμβαίνει επειδή προσθέτουμε το επιπλέον πεδίο αρίθμησης των εγγραφών, που «φορτώνει» τη μνήμη, και ότι αν μου απλοποιήσετε τον κώδικα αφαιρώντας το πεδίο αρίθμησης, θα μπορώ να σβήσω το κριτήριο περιορισμού των εγγραφών, που δεν το θέλω καθόλου. Επίσης, αν γίνεται, με την εφαρμογή του κώδικα, να μην ανοίγει ο πίνακας «ΠινακαςΚΔΕ» που δημιουργείται (και να χρειάζεται εγώ να τον κλείσω στη συνέχεια), απλά να αντικαθιστά τον προηγούμενο, με το ίδιο όνομα, πίνακα. Να συμπεριφέρεται, δηλαδή, τελικά, σαν ερώτημα δημιουργίας πίνακα. Ελπίζω να μη ζητάω πολλά! Ευχαριστώ για τη βοήθειά σας, Κώστας Κ. (Κοζάνη) |
#2
| |||
| |||
Κώστα δοκίμασε την τροποποίηση.
|
#3
| |||
| |||
Ευχαριστώ Γιώργο! Είμαι πραγματικά υπόχρεος!
|
#4
| |||
| |||
Να είσαι καλά και καλή συνέχεια.
|
#5
| |||
| |||
Αποτυχία εφαρμογής
Είχα την ελπίδα Γιώργο ότι ο τρόπος αυτός (ερώτημα δημιουργίας πίνακα μέσω VBA) θα «φόρτωνε» λιγότερο την Access από τον κλασικό τρόπο (ερώτημα δημιουργίας πίνακα, ως ερώτημα ενέργειας). Δυστυχώς στη βάση δεδομένων μου (όχι στο παράδειγμα που είχα ανεβάσει), που είναι πολύ μεγάλη, πάνω από 1,5 Gb, και που δε μπορώ να την ανεβάσω στο forum, ενώ τρέχει «κανονικά» το ερώτημα ενέργειας, όταν το μετασχηματίζω σε ερώτημα επιλογής που δημιουργεί μέσω κώδικα VBA τον ίδιο πίνακα (δηλαδή αυτό που μου έδωσες), μου βγάζει μήνυμα Error 3190-έχουν οριστεί πάρα πολλά πεδία. Είναι γεγονός ότι όταν το αρχείο Access που χρησιμοποιώ το μετέφερα σε κομπιούτερ που τρέχει Access 2016 κι όχι Access 2007 που έχω στο labtop μου, δεν έτρεχε το ερώτημα ενέργειας (μου έβγαζε ότι το ερώτημα είναι πολύ πολύπλοκο). Για τον λόγο αυτό, κι επειδή τρόμαξα ότι θα μείνω αναγκαστικά στα Office 2007, για να μπορώ να χρησιμοποιώ την Access μου, είχα σκεφτεί να χρησιμοποιήσω αυτό που είδα να κάνεις, δηλ. μέσω VBA να δημιουργώ τον πίνακα. Τελικά φαίνεται ότι αυτός ο τρόπος (VBA) «παίρνει» περισσότερη μνήμη από τον κλασικό. Και το παράδοξο είναι τελικά ότι σε νεότερη έκδοση της Access λιγότερα πράγματα μπορώ να κάνω. Ευχαριστώ πάντως για τη βοήθεια! |
#6
| |||
| |||
Κώστα είναι γεγονός ότι η Access όσο προχωράει στο συγκεκριμένο θέμα γίνεται χειρότερη καθώς φορτώνεται με επιπλέον features αλλά χωρίς να αλλάζει ο πυρήνας της που έχει πολλούς περιορισμούς στο τομέα της μνήμης...υποτίθεται ότι θα βγεί κάποια αναβάθμιση κάποια στιγμή που υποτίθεται θα βοηθήσει στην διαχείριση της μνήμης αλλά με το πωλητή που έχει επικεφαλής η Dev team αμφιβάλλω αν θα κάνει τίποτα...μόνο δηλώσεις ξέρει να κάνει...και να παρουσιάζει την τρίχα τριχιά. Τώρα στο θέμα σου .... μπορείς να δοκιμάσεις να τραβήξεις τον πίνακα σε μια άλλη βάση μαζί με ότι χρειάζεσαι και να τρέχει εκεί τον κώδικα...βασικώς έπρεπε να έχεις FE+BE την εφαρμογή σου. |
#7
| |||
| |||
1) Γενικά η VBA θεωρείται λύση "ανάγκης". Χρησιμοποιείται, κυρίως, όπου δεν μπορούμε να πετύχουμε το ζητούμενο με τα εργαλεία που μας παρέχει το περιβάλλον της Access. Αφού μπορείς να δημιουργήσεις τον πίνακα με ερώτημα δεν υπάρχει λόγος να χρησιμοποιήσεις VBA. 2) Με τη χρήση μιας ΒΔ αυξάνει το μέγεθος του αρχείου και κάποιες φορές εμφανίζονται προβλήματα, που ίσως λυθούν με συμπίεση της ΒΔ. 3) Για το σφάλμα που εμφανίζεται και για τους τρόπους αντιμετώπισης δες το σύνδεσμο: 5 Ways To Fix Access Too Many Fields Defined Error |
#8
| |||
| |||
Λύση στο πρόβλημα μου, τελικά!
Τελικά, βρήκα τρόπο, κάνοντας μερική αναμόρφωση σε κάποια ερωτήματα, να απλοποιήσω αρκετά το σχεδιασμό της βάσης μου, ώστε να δουλεύει πλέον πιο εύκολα. Τρέχει και στην Access 2013 πλέον (ενώ πριν, τα ερωτήματα δημιουργίας πίνακα έτρεχαν μόνο στο περιβάλλον που είναι ακόμη το labtop μου, Windows 7 και Office 7). Τώρα, πλέον, εμφανίζονται και σε προβολή σχεδίασης. Μπορώ να μεταφέρω τη βάση σε οποιοδήποτε κομπιούτερ και να τη δουλέψω κι εκεί. Δεν είναι καμιά σοβαρή είδηση για κανέναν, αλλά ήθελα να το μοιραστώ με τους άγνωστους φίλους, που πολλές φορές με βοήθησαν στο παρελθόν!
|
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
Δημιουργία Folder μέσω Vba | γιώργοςΚ | Access - Ερωτήσεις / Απαντήσεις | 5 | 15-03-16 13:04 |
[ Ερωτήματα ] Δημιουργία Ερωτήματος μέσω VBA | noname | Access - Ερωτήσεις / Απαντήσεις | 4 | 18-09-15 20:23 |
Δημιουργία ερωτήματος ή κώδικα για εύρεση εγραφής σε πίνακα | γιώργοςΚ | Access - Ερωτήσεις / Απαντήσεις | 6 | 23-03-15 23:31 |
Έλεγχος πρόσβασης στο Internet μέσω κώδικα | ChryssaV | Access - Ερωτήσεις / Απαντήσεις | 10 | 06-08-09 18:32 |
Η ώρα είναι 21:02.