ms-office.gr > Forum > Microsoft Office > Ms-Office > Αντιγραφή / μεταφορά δεδομένων Access 2007 σε Excel 2007

Ms-Office Γενικές ερωτήσεις για τις εφαρμογές του Microsoft Office.

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 26-01-10, 15:21
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 11-01-2010
Μηνύματα: 7
Question Αντιγραφή / μεταφορά δεδομένων Access 2007 σε Excel 2007

Γεια σας!

Στο αρχείο Data.accdb έχω ένα πίνακα με το όνομα KinoTable με 212.000 records
και 82 πεδία + 1 αναγνωριστικό που μεταφέρω σε ένα φύλλο Excel 2007
για να κάνω διαφόρους υπολογισμούς.

To κάνω με τις ενσωματωμένες μακροεντολές του Access που κάποιες φορές γίνεται με επιτυχία
αλλά και πολύ μεγάλη καθυστέρηση και κάποιες άλλες παγώνουν τα πάντα στον υπολογιστή!

Η ερώτηση μου είναι: Υπάρχει κάποιος τρόπος να μεταφέρω τα δεδομένα αυτά χωρίς πρόβλημα και χωρίς να περιμένω κάθε φορά 8-10 λεπτά;

Ευχαριστώ για το χρόνο σας.

Νίκος
Απάντηση με παράθεση
  #2  
Παλιά 26-01-10, 16:55
Το avatar του χρήστη editolis
Super Moderator
Όνομα: Τολης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 02-01-2010
Περιοχή: ATHENS-GREECE
Μηνύματα: 199
Προεπιλογή

Δημιουργησε ενα κουμπι εντολης σε μια φορμα και στο κλικ 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  
Παλιά 26-01-10, 17:59
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 11-01-2010
Μηνύματα: 7
Προεπιλογή

Φίλε Τόλη, σ ευχαριστώ για την άμεση απάντηση, αυτό χρησιμοποιώ (μετάτρεψα τη μακροεντολή σε λειτουργική μονάδα και απ ότι είδα περιείχε το Comand TransferSpreadsheet) με τη διαφορά ότι αποθηκεύω σε *.xlsx (212.000+ records)
Το πρόβλημα μου είναι ότι πως θα μειώσω τον χρόνο μεταφοράς και παράλληλα να μη μου κρεμάει το Excel ή ο υπολογιστής.

Και πάλι ευχαριστώ
Απάντηση με παράθεση
  #4  
Παλιά 26-01-10, 19:05
Το avatar του χρήστη nisgia
Super Moderator
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 12-10-2009
Περιοχή: Ηγουμενίτσα
Μηνύματα: 186
Προεπιλογή

Φίλε Νίκο, καλησπέρα!

Το φύλλο προορισμού περιέχει τύπους;
Αν ναι ίσως θα πρέπει να θέσεις τον υπολογισμό του σε μη αυτόματο("χειροκίνητο")
γιατί υποψιάζομαι ότι εκεί οφείλεται η καθυστέρηση.
__________________
Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...!
-----------------------------------------------
Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης.
Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά!
Απάντηση με παράθεση
  #5  
Παλιά 26-01-10, 19:15
Όνομα: Χρήστος Ελευθερίου
Έκδοση λογισμικού Office: Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 26-11-2009
Περιοχή: Άρτεμις
Μηνύματα: 136
Προεπιλογή

Καλησπερα σε ολους

Φιλε Νικο δες και αυτο το post

http://www.ms-office.gr/forum/access...-proxeiro.html
__________________
Φιλικά

Χρήστος
___________________________
Αυτά που δεν ξέρεις φτιάχνουν μία βιβλιοθήκη που καθένας μας θα ήταν υπερήφανος να έχει.
Αν η γνώση δημιουργεί προβλήματα,η άγνοια σίγουρα δεν μπορεί να τα λύσει.
Απάντηση με παράθεση
  #6  
Παλιά 26-01-10, 19:48
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.249
Προεπιλογή

Καλησπέρα κι από μένα!
Όπως είπε κι ο Γιάννης, διακόπτοντας τον αυτόματο υπολογισμό στην 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)

Φιλικά

Τάσος
Συνημμένα Αρχεία
Τύπος Αρχείου: txt ExportAccTableToXlsb.txt (4,8 KB, 85 εμφανίσεις)
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 27-01-10 στις 09:46.
Απάντηση με παράθεση
  #7  
Παλιά 27-01-10, 10:10
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 11-01-2010
Μηνύματα: 7
Thumbs up

Καλημέρα σε όλους.

Δε βρίσκω λόγια να σας ευχαριστήσω όλους με τις πολύτιμες συμβουλές σας!
Δεν είχα φανταστεί ότι to Excel είναι γρηγορότερο από τo Access.

Με το Sub ExportTableToXLSB o χρόνος μεταφοράς κατέβηκε σε κάτι λιγώτερο από 1 λεπτό.

Χίλια ευχαριστώ!

Με εκτίμηση

Νίκος

Τελευταία επεξεργασία από το χρήστη Galileo : 27-01-10 στις 10:55.
Απάντηση με παράθεση
  #8  
Παλιά 27-01-10, 10:24
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.249
Προεπιλογή

Αγαπητέ Νίκο, δεν είναι πιο γρήγορη η Excel από την Access.

Απλά η Excel υποστηρίζει πολυνηματικό υπολογισμό (Multithread) κάτι που δεν υπάρχει στην Access.
Αυτό ακριβώς το πλεονέκτημα εκμεταλλευόμαστε και... πετυχαίνουμε καλύτερους χρόνους.

Έτσι, σε έναν υπολογιστή με τετραπύρηνο επεξεργαστή η Access μπορεί να δεσμεύσει έναν, ενώ η Excel και τους 4
με αποτέλεσμα να υπολογίζει γρηγορότερα.
Σε έναν υπολογιστή με απλό μονοπύρηνο επεξεργαστή (σπάνιο φαινόμενο πια), η διαφορά
στους χρόνους μεταφοράς δεδομένων δεν θα είναι τόσο μεγάλη.
Τέλος, το *.xlsb το χρησιμοποιούμε γιατί φορτώνεται η αποθηκεύεται σε πολύ λιγότερο χρόνο απ ότι άλλες μορφές αρχείων της Excel.
Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 27-01-10 στις 10:30.
Απάντηση με παράθεση
  #9  
Παλιά 27-01-10, 23:23
Το avatar του χρήστη nisgia
Super Moderator
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 12-10-2009
Περιοχή: Ηγουμενίτσα
Μηνύματα: 186
Προεπιλογή

Γεια σας και πάλι!

Πέρα από το 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
Τα δεδομένα τα οποία βρίσκονται στο αντικείμενο ADODB.Recordset Rs περνάνε σε μια διάταξη τύπου Variant (varData)
με την μέθοδο GetRows του Rs και στην συνέχεια στα κελιά μιας περιοχής (ίδιων διαστάσεων με το πλέγμα του Rs)
του πρώτου φύλλου του βιβλίου objWB (αντικείμενο Workbook).

Ένας ακόμη πιο γρήγορος τρόπος είναι η κλήση μιας μεθόδου η ο οποία βρίσκεται αποθηκευμένη σε ένα υπάρχον βιβλίο εργασίας.
Από την πλευρά της Access μπορούμε καλέσουμε τη αποθηκευμένη μέθοδο GetData του αντικειμένου objWB ως εξής :

Κώδικας:
    objWB.Parent.Run "Test.xls!GetData", Rs
Eνώ η μέθοδο GetData από την πλευρά του Excel, θα μπορούσε να έχει ως εξής:

Κώδικας:
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
Ελπίζω να βάζω και εγώ με τα παραπάνω ένα λιθαράκι στη γνώση για την τεχνολογία Automation
και την επικοινωνία μεταξύ των εφαρμογών του Office.

Τα λέμε!
Γιάννης.
__________________
Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...!
-----------------------------------------------
Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης.
Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά!

Τελευταία επεξεργασία από το χρήστη nisgia : 27-01-10 στις 23:26.
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός 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.