Ms-Office Γενικές ερωτήσεις για τις εφαρμογές του Microsoft Office. |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Αντιγραφή / μεταφορά δεδομένων Access 2007 σε Excel 2007
Γεια σας! Στο αρχείο Data.accdb έχω ένα πίνακα με το όνομα KinoTable με 212.000 records και 82 πεδία + 1 αναγνωριστικό που μεταφέρω σε ένα φύλλο Excel 2007 για να κάνω διαφόρους υπολογισμούς. To κάνω με τις ενσωματωμένες μακροεντολές του Access που κάποιες φορές γίνεται με επιτυχία αλλά και πολύ μεγάλη καθυστέρηση και κάποιες άλλες παγώνουν τα πάντα στον υπολογιστή! Η ερώτηση μου είναι: Υπάρχει κάποιος τρόπος να μεταφέρω τα δεδομένα αυτά χωρίς πρόβλημα και χωρίς να περιμένω κάθε φορά 8-10 λεπτά; Ευχαριστώ για το χρόνο σας. Νίκος |
#2
| ||||
| ||||
Δημιουργησε ενα κουμπι εντολης σε μια φορμα και στο κλικ event περασε την παρακατω εντολη: docmd.hourglass true DoCmd.TransferSpreadsheet acExport, , "KinoTable", "C:\KinoTable.xls", True docmd.hourglass false MsgBox "TableKino Transfer to Excel complete.", vbInformation, "Transfer to EXCEL" Η Εντολη σου στελνει το αρχειο στο C:\ Ενημερωσε εαν αυτο κανει την δουλεια σου... Τελευταία επεξεργασία από το χρήστη editolis : 26-01-10 στις 16:58. |
#3
| |||
| |||
Φίλε Τόλη, σ ευχαριστώ για την άμεση απάντηση, αυτό χρησιμοποιώ (μετάτρεψα τη μακροεντολή σε λειτουργική μονάδα και απ ότι είδα περιείχε το Comand TransferSpreadsheet) με τη διαφορά ότι αποθηκεύω σε *.xlsx (212.000+ records) Το πρόβλημα μου είναι ότι πως θα μειώσω τον χρόνο μεταφοράς και παράλληλα να μη μου κρεμάει το Excel ή ο υπολογιστής. Και πάλι ευχαριστώ |
#4
| ||||
| ||||
Φίλε Νίκο, καλησπέρα! Το φύλλο προορισμού περιέχει τύπους; Αν ναι ίσως θα πρέπει να θέσεις τον υπολογισμό του σε μη αυτόματο("χειροκίνητο") γιατί υποψιάζομαι ότι εκεί οφείλεται η καθυστέρηση.
__________________ Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...! ----------------------------------------------- Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης. Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά! |
#5
| |||
| |||
Καλησπερα σε ολους Φιλε Νικο δες και αυτο το post http://www.ms-office.gr/forum/access...-proxeiro.html
__________________ Φιλικά Χρήστος ___________________________ Αυτά που δεν ξέρεις φτιάχνουν μία βιβλιοθήκη που καθένας μας θα ήταν υπερήφανος να έχει. Αν η γνώση δημιουργεί προβλήματα,η άγνοια σίγουρα δεν μπορεί να τα λύσει. |
#6
| ||||
| ||||
Καλησπέρα κι από μένα! Όπως είπε κι ο Γιάννης, διακόπτοντας τον αυτόματο υπολογισμό στην Excel τα αποτελέσματα θα βελτιωθούν αισθητά. Αλλά σε περιπτώσεις όπως του Νίκου, ο χρόνος μεταφοράς δεδομένων μειώνεται σημαντικά αν εισάγουμε τα δεδομένα από την επιφάνεια εργασίας της Excel, όχι με τις μεθόδους εξαγωγής που προσφέρει η Access. Αν μέσα από ένα βιβλίο Excel τύπου *.xlsb (πολύ σημαντικό - το είχε αναφέρει και ο Χρήστος xele3628iw) δημιουργήσουμε μια σύνδεση εξωτερικών δεδομένων Access και ταυτόχρονα εφαρμόσουμε κάποια “Trick“ για να αυξήσουμε την απόδοση του φύλλου, ο χρόνος εισαγωγής θα πέσει στο 1/10 !! Ακόμα καλύτερα είναι τα πράγματα αν χρησιμοποιήσουμε μια αυτοματοποίηση γι αυτή την διαδικασία δηλαδή: Τρέχουμε κώδικα που φιλοξενείται σε μια λειτουργική μονάδα στην Access o οποίος δημιουργεί ένα αρχείο *.xlsb και στη συνέχεια του δίνει εντολές να εισάγει δεδομένα από τον πίνακα "KinoTable". Δείτε στο συνημμένο ένα παράδειγμα κώδικα. Σε μένα χρειάζονται 5 δευτερόλεπτα για 210.000 εγγραφές και 83 στήλες (CPU:Intel i5 750 2.67 GHZ; 3GB Ram) Φιλικά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών Τελευταία επεξεργασία από το χρήστη Tasos : 27-01-10 στις 09:46. |
#7
| |||
| |||
Καλημέρα σε όλους. Δε βρίσκω λόγια να σας ευχαριστήσω όλους με τις πολύτιμες συμβουλές σας! Δεν είχα φανταστεί ότι to Excel είναι γρηγορότερο από τo Access. Με το Sub ExportTableToXLSB o χρόνος μεταφοράς κατέβηκε σε κάτι λιγώτερο από 1 λεπτό. Χίλια ευχαριστώ! Με εκτίμηση Νίκος Τελευταία επεξεργασία από το χρήστη Galileo : 27-01-10 στις 10:55. |
#8
| ||||
| ||||
Αγαπητέ Νίκο, δεν είναι πιο γρήγορη η Excel από την Access. Απλά η Excel υποστηρίζει πολυνηματικό υπολογισμό (Multithread) κάτι που δεν υπάρχει στην Access. Αυτό ακριβώς το πλεονέκτημα εκμεταλλευόμαστε και... πετυχαίνουμε καλύτερους χρόνους. Έτσι, σε έναν υπολογιστή με τετραπύρηνο επεξεργαστή η Access μπορεί να δεσμεύσει έναν, ενώ η Excel και τους 4 με αποτέλεσμα να υπολογίζει γρηγορότερα. Σε έναν υπολογιστή με απλό μονοπύρηνο επεξεργαστή (σπάνιο φαινόμενο πια), η διαφορά στους χρόνους μεταφοράς δεδομένων δεν θα είναι τόσο μεγάλη. Τέλος, το *.xlsb το χρησιμοποιούμε γιατί φορτώνεται η αποθηκεύεται σε πολύ λιγότερο χρόνο απ ότι άλλες μορφές αρχείων της Excel. Φιλικά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών Τελευταία επεξεργασία από το χρήστη Tasos : 27-01-10 στις 10:30. |
#9
| ||||
| ||||
Γεια σας και πάλι! Πέρα από το Multithreading, βασική παράμετρος στην απόδοση του κάθε συστατικού του Automation (COM), είναι ο τρόπος με τον οποίο λειτουργεί μέσα σε μια εφαρμογή. Επειδή όλες οι εφαρμογές του MS Office ανήκουν στην κατηγορία “Out-Of-Process Servers”, όταν τις χρησιμοποιούμε ως server, το αντίγραφο της κλάσης τους αποθηκεύεται σε διαφορετική περιοχή μνήμης από αυτό της client εφαρμογής. Για παράδειγμα, όταν ελέγχουμε το Excel μέσα από την Access, η εφαρμογή της Access λειτουργεί ως client ενώ το Excel ως server και η περιοχή διεργασιών(processes) του Excel δεν είναι στην ίδια περιοχή με αυτή της Access. Αυτό έχει ως αποτέλεσμα τη διαχείριση των δεδομένων αλλά και την επικοινωνία μεταξύ των δυο περιοχών διεργασιών να τις αναλαμβάνει το λειτουργικό σύστημα και να μειώνεται έτσι η συνολική απόδοση της εφαρμογής μας. Εκείνο που εμείς μπορούμε να κάνουμε σε τέτοιες περιπτώσεις είναι να αποφεύγουμε τις επαναλαμβανόμενες αναφορές στα συστατικά (αντικείμενα, μεθόδους και ιδιότητες) της server εφαρμογής ή να της δίνουμε εντολές ώστε να εκτελεί μόνη της τις δικές της διεργασίες όπως πολύ έξυπνα μας έδειξε ο Τάσος με το παράδειγμά του. Παρακάτω φαίνεται ο τρόπος με τον οποίο μπορούμε να "μιλήσουμε" "λακωνικά" στο Excel μέσα από την Access και να περάσουμε τα δεδομένα ενός πίνακα σε μια περιοχή ενός φύλλου του Excel με μια και μόνο εντολή: Κώδικας: varData = Rs.GetRows With objWB.worksheets(1) .range(.cells(1), .cells(UBound(varData, 2) + 1, _ UBound(varData) + 1)) = .Parent.Parent.transpose(varData) End With με την μέθοδο GetRows του Rs και στην συνέχεια στα κελιά μιας περιοχής (ίδιων διαστάσεων με το πλέγμα του Rs) του πρώτου φύλλου του βιβλίου objWB (αντικείμενο Workbook). Ένας ακόμη πιο γρήγορος τρόπος είναι η κλήση μιας μεθόδου η ο οποία βρίσκεται αποθηκευμένη σε ένα υπάρχον βιβλίο εργασίας. Από την πλευρά της Access μπορούμε καλέσουμε τη αποθηκευμένη μέθοδο GetData του αντικειμένου objWB ως εξής : Κώδικας: objWB.Parent.Run "Test.xls!GetData", Rs Κώδικας: Sub GetData(objRS As Object) Dim varData As Variant varData = objRS.GetRows With ThisWorkbook.Worksheets(1) .Range(.Cells(1), .Cells(UBound(varData, 2) + 1, UBound(varData) + 1, = _ Application.WorksheetFunction.Transpose(varData) .Parent.Save End With End Sub και την επικοινωνία μεταξύ των εφαρμογών του Office. Τα λέμε! Γιάννης.
__________________ Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...! ----------------------------------------------- Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης. Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά! Τελευταία επεξεργασία από το χρήστη nisgia : 27-01-10 στις 23:26. |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[ Ασφάλεια] Ασφάλεια δεδομένων σε ACCESS 2007 | eliok | Access - Ερωτήσεις / Απαντήσεις | 20 | 18-04-15 13:25 |
[Excel07] Εισαγωγή εξωτερικών δεδομένων σε 2007 | jockey17 | Excel - Ερωτήσεις / Απαντήσεις | 4 | 01-04-14 20:37 |
Μεταφορά δεδομένων από Word σε Excel ή Access | marpapa | Word - Ερωτήσεις / Απαντήσεις | 10 | 10-05-12 21:05 |
[VBA] Μεταφορά δεδομένων από Excel σε Access | Tasos | Excel samples - Χρήσιμα αρχεία & παραδείγματα | 0 | 11-04-12 07:38 |
Απενεργοποίηση της Ασφάλειας Μακροεντολών σε Access 2003 και Access 2007 | Ms-Office-Development Team | Access samples - Χρήσιμα αρχεία & παραδείγματα | 0 | 28-11-09 17:16 |
Η ώρα είναι 11:50.