Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Ερώτημα για concatenate τιμών
Καλησπέρα στην παρέα του Forum. Αναζητώ εάν υπάρχει τρόπος ένα ερώτημα να κάνει concatenate τιμών από προηγούμενες γραμμές που αφορούν στον ίδιο κωδικό. Για να γίνει κατανοητό αυτό παραθέτω συνημμένα ένα αρχείο Excel, όπου εκεί γίνεται πολύ εύκολα. Θα ήθελα όμως έναν τρόπο, ο οποίος χρησιμοποιεί μόνο ερώτημα ή συνδυασμό ερωτημάτων και όχι κάποια function. Ο λόγος για τον οποίο το ψάχνω, εάν γίνεται με αυτό τον τρόπο είναι ο εξής: Χρησιμοποιώ μία βάση Access η οποία έχει ως "συνδεδεμένους πίνακες" αρχεία .csv και με τη χρήση ερωτημάτων μπορώ να χειρίζομαι τα δεδομένα κατά περίπτωση, ώστε να φιλτράρονται με κάποια κριτήρια ή να προστίθονται στήλες με υπολογιστικά πεδία κλπ. Στη συνέχεια το κάθε ένα από αυτά τα ερωτήματα εισάγεται με τη μορφή εξωτερικών δεδομένων σε φύλλα του Excel. Έτσι λοιπόν χρησιμοποιώ τα ερωτήματα της Access ως "γέφυρα" για να φιλτραριστούν ή να τροποποιηθούν αναλόγως την περίπτωση και το τελικό αποτέλεσμα φτάνει στον χρήστη (διαμέσω του MS Query) πατώντας απλά ανανέωση των δεδομένων, ενώ ταυτόχρονα η πηγή για όλους τους χρήστες είναι ο ίδιος φάκελος που εμπεριέχει τα .csv αρχεία καθώς και το αρχείο της Access. Εδώ πρέπει να επισημάνω, ότι λόγω της πολιτικής της εταιρείας οι υπόλοιποι χρήστες δεν έχουν εγκατεστημένη την MS Access και η "γέφυρα" αυτή λειτουργεί χωρίς στην ουσία να χρειάζεται να ανοίγει το αρχείο της Access. Οι τρόποι που βρήκα έως τώρα ψάχνοντας αφορούν σε functions η οποίες δημιουργούν πρώτα ένα table με το επιθυμητό αποτέλεσμα, πράγμα που σημαίνει ότι με κάποιο τρόπο θα πρέπει να αγοίγει πρώτα η Access και έπειτα μπορεί να εισαχθεί το αποτέλεσμα στο φύλλο του Excel. Εδώ λοιπόν βρίσκεται η απορία μου, εάν με κάποιο select query μπορεί να γίνει κάτι τέτοιο. Ελπίζω να έγινα κατανοητός και να μην σας κούρασα. Φιλικά Δημήτρης |
#2
| |||
| |||
Καλησπέρα Στην επισυναπτόμενη ΒΔ, μπορούμε να δούμε μια προσέγγιση του ζητούμενου. Περιέχει: 1) Τον πίνακα Example με πεδία [ITEMNR], [BARCODE] και [BARCODE DESCRIPTION]. 2) Το ερώτημα qryExample, το οποίο, εκτός από τα παραπάνω πεδία, περιέχει και το υπολογιζόμενο ConcatenateBarCodeDescription . Στο υπολογιζόμενο πεδίο εμφανίζονται τα ζητούμενα στοιχεία, με τη βοήθεια της συνάρτησης χρήστη Concatenate(). Ελπίζω το παράδειγμα να σε καλύπτει και να μπορέσεις να το προσαρμόσεις στα δεδομένα σου. ΥΓ. Δεν καταλαβαίνω το ανακάτεμα Excel και Access Φιλικά/Γιώργος |
#3
| |||
| |||
Γεια σου Γιώργο και σ' ευχαριστώ για την άμεση απάντηση σου, γι' αυτό οφείλω να σου διευκρινίσω και την απορία σου. Στο συνημμένο .zip θα βρεις ένα αρχείο .accdb, τέσσερα αρχεία .csv και ένα αρχείο .xlsx. Φαντάσου το εξής: τα αρχεία .csv εξάγονται από μία επίσημη εφαρμογή της εταιρείας από SQL Database ή Oracle Database. Ο στόχος είναι να γεμίσει ο πίνακας του Excel αρχείου (το ονόμασα "Ενημερωτικό έντυπο") καταχωρώντας από τον χρήστη μόνο τον κωδικό του είδους. Τα φύλλα που έχουν τα εξωτερικά δεδομένα δεν χρειάζεται καν να τα βλέπει. Απλά πατάει "Ανανέωση όλων" στην κορδέλα δεδομένα, αφού πρώτα έχει σιγουρευτεί ότι έκανε Export από την επίσημη εφαρμογή σε προκαθορισμένο φάκελο. Έτσι τα αρχεία .csv "περνάνε" μέσα από την Access και τα στοιχεία αφού επεξεργαστούν από το ερώτημα ή τα ερωτήματα, τελικά καταλήγουν σε κρυμμένα φύλλα του Excel αρχείου και μάλιστα μόνο επιλεγμένες στήλες. (Τα συνδεδεμένα .csv τα έχω εισάγει και ως κανονικούς πίνακες στην Access απλά για να το κάνω ποιο κατανοητό, ανοίγοντας τους να μπορείς να βλέπεις τα δεδομένα. Διαφορετικά θα πρέπει να ξανακάνεις τις συνδέσεις ανάμεσα στην Access και τα αρχεία .csv). Ο χρήστης ξέρει μόνο την επίσημη εφαρμογή που έχει κάποιο μενού για Export δεδομένων και το αρχείο του Excel και τίποτε άλλο. Φαντάζομαι θα διαπιστώνεις ότι τα ερωτήματα που αφορούν στα άλλα δεδομένα πέρα από τα Barcodes (στους συνδεδεμένους πίνακες δηλαδή) μπορούν να έρθουν στο Excel χωρίς πρόβλημα. Το qryExample όμως δεν μπορεί να έρθει επειδή μεσολαβεί η Function. Άρα θα πρέπει κάποιος να ανοίξει την Access και να τρέξει τα ερωτήματα διαγραφής και ανανέωσης γράφοντας σε κάποιο πίνακα. Εδώ βρίσκεται ο προβληματισμός, αφού όπως σου ανέφερα ο χρήστης ξέρει μόνο δύο πράγματα α) να εξαγάγει δεδομένα και β) να δουλέψει στο Excel. Και πάλι σ' ευχαριστώ για την ανταπόκριση σου. Εάν έχεις κάποια ιδέα είναι ευπρόσδεκτη. Φιλικά Δημήτρης |
#4
| |||
| |||
Καλησπέρα Δημήτρη δες μια πρόταση στο επισυναπτόμενο αρχείο. Επειδή υπάρχουν σύνδεσμοι η αποσυμπίεση του αρχείου θα πρέπει να γίνει στο φάκελο c:\. Θα δημιουργηθεί ο φάκελος FolderFiles με τα ακόλουθα αρχεία:
Το αρχείο Report.xlsm συνδέεται με τα δεδομένα του ερωτήματος qryExcel και περιέχει κώδικα για την αυτόματη δημιουργία της έκθεσης. Ελπίζω να κατάλαβα το ζητούμενο. Κοιτάζοντας την έκθεση βλέπω ότι για κάθε είδος υπάρχει ένας προμηθευτής και μία τιμή. Αυτό ίσως να μη ισχύει. Φιλικά/Γιώργος ΥΓ. Κατά τη γνώμη μου την έκθεση θα έπρεπε να τη δημιουργεί αυτόματα η εφαρμογή της εταιρείας. Επίσης η Access ή το Excel θα μπορούσαν να πάρουν τα δεδομένα κατευθείαν από τη ΒΔ SQL Server. |
#5
| |||
| |||
Γεια σου Γιώργο. Ευχαριστώ για την απάντηση σου. Γενικά αντιλαμβάνομαι, πως κατάλαβες το ζητούμενο. Πράγματι όπως επισημάνεις δεν ισχύει πάντα ότι μία τιμή υπάρχει για έναν προμηθευτή. Επίσης σχετικά με το σχόλιο σου στο υστερόγραφο, οφείλω να πω, ότι έχεις απόλυτο δίκιο. Σχετικά και με λεπτομέρεια τα περιγράφω στο συνημμένο αρχείο. Φυσικά εάν έχεις όρεξη ακόμα να ασχοληθείς με αυτό, να το ρίξεις μια ματιά και να μου πεις τη γνώμη σου. Να είσαι καλά. Δημήτρης |
#6
| |||
| |||
Καλησπέρα Δημήτρη δες μια άλλη πρόταση στο επισυναπτόμενο αρχείο. Επειδή υπάρχουν σύνδεσμοι η αποσυμπίεση του αρχείου θα πρέπει να γίνει στο φάκελο c:\. Θα δημιουργηθεί ο φάκελος FolderFiles με τα ακόλουθα αρχεία:
Φιλικά/Γιώργος ΥΓ. ItemNum θεώρησα τα 7 πρώτα ψηφία. Επίσης απομάκρυνα τις διπλές εγγραφές |
#7
| |||
| |||
Πράγματι τα πρώτα 7 ψηφία είναι το ItemNr (τα υπόλοιπα αφορούν το περιεχόμενο κιβωτίου). Το δοκίμασα και με πραγματικά δεδομένα περίπου 100χιλ. γραμμές και το ολοκλήρωσε σε περίπου 7 λεπτά. Είναι καταπληκτικό! Μου έλεισες τα χέρια. Στην εφαρμογή του θα βρω τρόπο έτσι ώστε οι γραμμές του αρχείου κειμένου να περιορίζονται κάθε φορά για μία ομάδα προϊόντων κι οπότε ο χρόνος ανανέωσης και δημιουργίας του απετελέσματος θα περιοριστεί κατά πολύ. Σε ευχαριστώ πάρα πολύ. Να είσαι καλά. Τα λέμε. Φιλικά Δημήτρης |
#8
| |||
| |||
Καλησπέρα Δημήτρη, τα 7 λεπτά είναι πολλά. Ο μεγάλος χρόνος οφείλεται στο ότι γίνονται εργασίες που θα μπορούσαν να αποφευχθούν, αν το αρχείο κειμένου ήταν καλύτερο. Συγκεκριμένα: 1) Υπολογίζεται το ItemNum από το ITEMNR 2) Οι γραμμές με στήλες ItemNum, BarCode και Description (αυτές μόνο χρειάζονται) που προκύπτουν από το αρχείο κειμένου δεν είναι μοναδικές, οπότε πρέπει να απομακρυνθούν οι περιττές. 3) Επειδή δεν είναι σίγουρη η ταξινόμηση στο αρχείο κειμένου, γίνεται ταξινόμηση ως προς τις στήλες ItemNum, BarCode. Αν συνεπώς το αρχείο κειμένου είχε μόνο τα πεδία ItemNum, BarCode και Desriprion, οι εγγραφές ήταν μοναδικές και ταξινομημένες ως προς τα πεδία ItemNum, BarCode, θα φθάναμε στο ζητούμενο σε χρόνο που κατά τη γνώμη μου δε θα ξεπερνούσε το 1 λεπτό. Νομίζω εύκολα θα μπορούσε να εξαχθεί το αρχείο κειμένου στη μορφή που περιγράφω. Αν δε γίνεται, αν θέλεις, ανέβασε το πραγματικό αρχείο κειμένου. Ίσως με κάποιες αλλαγές στον κώδικα να μπορέσω να βελτιώσω το χρόνο. Φιλικά/Γιώργος |
#9
| |||
| |||
Καλημέρα Δημήτρη, θέλοντας να ελέγξω το χρόνο εκτέλεσης της ζητούμενης εργασίας, δημιούργησα ένα αρχείο κειμένου 200.000 εγγραφών (γραμμών). Αυτό έγινε με αντιγραφή και επικόλληση του δείγματος του αρχείου που ανέβασες. Ο χρόνος εκτέλεσης ήταν 3 δευτερόλεπτα δηλαδή μικρότερος από το 1/100 του χρόνου που χρειάστηκες εσύ. Κατά τη γνώμη μου η διαφορά είναι μεγάλη και δε δικαιολογείται από τη διαφορά των αρχείων και των υπολογιστών. Φιλικά/Γιώργος |
#10
| |||
| |||
Καλημέρα Γιώργο, έχω κάνει κάποια πρόοδο με το φιλτράρισμα και την ταξινόμηση και ο χρόνος κατέβηκε στα 2 λεπτά περίπου. Για να μπορέσω να ανεβάσω τα αρχεία για να τα δεις, χρειάστηκε να χωρίσω το αρχείο EANS.csv (4.923 ΚΒ) σε δύο κομμάτια, καθώς και τα υπόλοιπα τα έκανα ξεχωριστά .zip. Στο αρχείο UpdateEANS.xlsm τρέξε μία φορά την μακροεντολή πατώντας το κουμπί στο φύλλο "Importing Barcodes" για να γεμίσει, αφού για μείωση όγκου του αρχείου άφησα μόνο τις πρώτες γραμμές. Έχω κάνει τα εξής: Τα αρχεία EANS.csv & ITEMS.csv είναι συνδεδεμένα στην DataSource.accdb στο φάκελο "C:\DataSource\". Εκεί μέσα γίνεται το φιλτράρισμα και η ταξινόμηση με querys. Τα στοιχεία από το EANS.csv έχουν έρθει στο UpdateEANS.xlsm σαν εξωτερικά δεδομένα επειδή και αυτά φιλτράρονται καθώς δένονται με τα ITEMS.csv και αναλόγως γίνεται επιλογή από κάποιες στήλες για τιμές που πρέπει να εξαιρεθούν κλπ. Στο ITEMS.csv έχω αφήσει μόνο μία στήλη σαν τέτοιο παράδειγμα, επειδή το αρχείο έχει πάρα πολλές στήλες όπου μπορεί κανείς να φιλτράρει σε διάφορες κατηγορίες (π.χ ομάδα προϊόντων, υπεύθυνος συνεργάτης κλπ.) Στον κώδικα που έγραψες απλά απενεργοποίησα τις κλήσεις στα φιλτραρίσματα και στην ομαδοποίηση, αφού πλέον έρχονται έτοιμα από το query της access και γίνεται μόνο η ανανέωση των στοιχείων πριν συνεχίσει με τις ενέργειες όπως το είχες ετοιμάσει. Α) Βολεύει να "περνάνε" τα στοιχεία μέσα από querys της access γιατί αυτά στη συνέχεια καταλήγουν σε άπειρα αρχεία, έτσι ώστε εάν χρειαστεί να αλλάξει κάτι σε αποτέλεσμα των γραμμών αυτό ρυθμίζεται μέσα στο query μία φορά για όλα τα αρχεία. Β) Αυτό που με προβληματίζει τώρα είναι: 1) το περίεργο μικροκόλλημα που τρώει το αρχείο .xlsm όταν ανοίγει, αλλά μετά συνεχίζει 2) πως θα μπορούσα να συμπεριλάβω σε μπάρα προόδου την διαδικασία που ξαναγράφονται τα στοιχεία στην τελική τους μορφή. Επίσης θα διαπιστώσεις πως σκεφτόμουν να βάλω την όλη διαδικασία να ξεκινάει με το άνοιγμα του αρχείου και όταν τελειώνει να το αποθηκεύει και να το κλείνει. Σε όλη τη χρονική διάρκεια της εκτέλεσης του κώδικα σκεφτόμουν να βάλω να φαίνεται μόνο ένα φύλλο εργασίας, το οποίο στην ουσία θα είναι ένα γκρι φόντο (απόκρυψη στηλών και γραμμών καθώς και των οριζόντιων και κάθετων γραμμών ολίσθησης) και να φαίνεται μόνο η μπάρα προόδου, ώστε ο χρήστης να βλέπει ότι κάτι προχωράει. Σε αυτό το σημείο να σου πω, ότι τα έκανα τα παραπάνω και με προβληματίζει το γεγονός ότι κάποιες φορές φαίνεται συνέχεια η μπάρα προόδου και κάποιες φορές εμφανίζεται ψηλά στην εφαρμογή το (δεν αποκρίνεται) και δεν φαίνεται και η μπάρα. Αυτά τα ολίγα. Εάν έχεις χρόνο και τα κοιτάξεις, είμαι σε αναμονή για προτάσεις βελτίωσης. Καλό μεσημέρι. Δημήτρης. |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[ Εκθέσεις ] Concatenate | devcon | Access - Ερωτήσεις / Απαντήσεις | 0 | 15-05-14 12:56 |
Ευρετήριο θετικών αρνητικών και μηδενικών τιμών σε ερώτημα | louk14 | Access - Ερωτήσεις / Απαντήσεις | 4 | 12-11-13 12:10 |
[Συναρτήσεις] CONCATENATE If Left Or | devcon | Excel - Ερωτήσεις / Απαντήσεις | 17 | 24-05-12 06:45 |
[VBA] If, move and concatenate | devcon | Excel - Ερωτήσεις / Απαντήσεις | 4 | 05-07-11 06:29 |
Η ώρα είναι 08:42.