Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Ενημέρωση Πινάκων από Πίνακα Excel (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1625-enimerosi-pinakon-apo-pinaka-excel.html)

stelianta 09-02-12 12:27

Ενημέρωση Πινάκων από Πίνακα Excel
 
1 Συνημμένο(α)
Αγαπητοί Φίλοι....

Στο αρχείο που ανέβασα υπάρχουν 2 αρχεια... Ενα Αρχείο Excel, και ένα Access

H ΒΔ εχει 4 πίνακες...

α. Τον Πίνακα Persons (Προσωπικα στοιχεία. PK agm)
β. Τον Πινακα Katastasi (Περιγραφη Καταστασεων. PK katastasi_code)
γ. Τον Πίνακα Days (περιεχει ενα πεδίο ΜΟΝΟ. Date)
δ. Toν Πίνακα Programmatismos (3 Πεδία. AGM, Katastasi_code, Date)

To excel ουσιαστικα ειναι ενα ΣΤΑΥΡΟΛΕΞΟ που παρουσιαζει την κατασταση καθε ανθρωπου, καθε ημερα.

Αυτο που θα ηθελα ειναι το εξης....

Αλλαζωντας την κατασταση ενος ανθρωπου σε μια ημερομηνια στο excel, να ενημερωνεται ο πινακας programmatismos της access. Οχι αυτοματα φυσικά. Ας γινεται με ενα command button το οποιο θα εκτελει κάποια σειρά εντολών.

Βλεποντας και τα αρχεια, ισως να καταλαβετε περισσοτερα στο τι εννοώ.

Ευχαριστω εκ τον προτερων

Meteora 09-02-12 17:13

Καλησπέρα

Στέλιο,
1. Ανέβασε το δείγμα της βάση σου σε *.mdb , ώστε περισσότερα μέλη να μπορούν να δουν και να βοηθήσουν. Ελάχιστοι έχουν Access 2010!
2. Τα περιεχόμενα στο αρχείο *.xls βρίσκονται σε κάποιο συγκεκριμένο φύλλο και καταλαμβάνουν -καθε φορά- συγκεκριμένη περιοχή ;

Περιμένουμε ...

Με εκτίμηση
ΝΙκος Δ.

stelianta 09-02-12 17:25

2 Συνημμένο(α)
Παράθεση:

Αρχική Δημοσίευση από Meteora (Μήνυμα 9342)
Καλησπέρα

Στέλιο,
1. Ανέβασε το δείγμα της βάση σου σε *.mdb , ώστε περισσότερα μέλη να μπορούν να δουν και να βοηθήσουν. Ελάχιστοι έχουν Access 2010!
2. Τα περιεχόμενα στο αρχείο *.xls βρίσκονται σε κάποιο συγκεκριμένο φύλλο και καταλαμβάνουν -καθε φορά- συγκεκριμένη περιοχή ;

Περιμένουμε ...

Με εκτίμηση
ΝΙκος Δ.

Αγαπητε Νικο...

Μετετρεψα τα αρχεια οπως με προετρεψες, κ τα την ανεβασα.

Οσον αφορα την αλλη ερωτηση, ας πουμε, οτι θα ειναι παντα το ΦΥΛΛΟ 1, θα ειναι 366 οι στηλες (θα αφορα ενα χρονο δηλ) και οι γραμμες 60...

Υποθετω πως αυτο, θα μπορει να αλλαξει, αν προστεθουν και αλλοι ανθρωποι στον πινακα persons.

Εννοειτε οτι θα τους προσθεσω και στον πινακα του excel

Ευχαριστω για την ανταποκριση

Meteora 09-02-12 21:38

Καλησπέρα Στέλιο

Ρίξε μια ματιά εδώ. Παρουσιάζεται η βασική λογική του περάσματος δεδομένων από Excel σε πίνακα Access. Αν δεν μπορέσεις να βρείς άκρη ...Σαββατοκύριακο έχουμε μπροστά μας!
Τα ξαναλέμε αν χρειστεί.

Με εκτίμηση
Νίκος Δ.

stelianta 09-02-12 21:54

Ευχαριστω πολυ Νικο..

Πραγματικα το forum με εχει κανει ΜΑΓΚΑ...

Θα το κοιταξω αυτο το οποιο μου λες και... We will Be in touch !!!

καλο Βραδυ

Meteora 09-02-12 22:01

Δεν γνωρίζω Αγγλικά! Στην ηλικία που έπρεπε να τα μάθω κυνηγούσα κοτσύφια,,,

stelianta 09-02-12 22:21

Παράθεση:

Αρχική Δημοσίευση από Meteora (Μήνυμα 9362)
Δεν γνωρίζω Αγγλικά! Στην ηλικία που έπρεπε να τα μάθω κυνηγούσα κοτσύφια,,,

Χαχαχαχα

Θα ειμαστε σε επαφη, σημαινει !!!

stelianta 10-02-12 09:31

Νικο Καλημερα...

Κοιταξα το αρθρο που μου προτεινες, εχω ομως καποιες σημαντικες αποριες.

1. Για να απλοποιησω οσο μπορω την διαδικασία, ας υποθεσουμε οτι ο Πινακας που θελω να ενημερωνεται θα ειναι ΑΡΧΙΚΑ γεματος με το καρτεσιανο γινομενο (AGM * Days) και θα ορισω να εχουν σαν κατασταση μια default τιμη (ας υποθεσουμε "Π").

Αυτο θα το πραγματοποιησω με 2 εντολές SQL

INSERT INTO tbl_Programmatismos ( [day], agm )
SELECT Ref_Day.Day, tbl_Persons.agm
FROM tbl_Persons, Ref_day;

ΚΑΙ

UPDATE tbl_Programmatismos
SET tbl_Programmatismos.Katastasi = "Π";

Αντιστοιχο θα ειναι και το excel "ΣΤΑΥΡΟΛΕΞΟ" (Δηλ. Γεματο "Π")

Τωρα....

Εκτιμω οτι πρεπει να δημιουργησω μια UPDATE εντολη SQL η οποια θα αλλαζει το πεδιο Katastasi_Code στον Πίνακα Ref_Katstasi της ACCESS, ανάλογα με τις αλλαγες που εχουν γινει στο excel, ΓΙΑ ημερομηνια 1 ημερα πριν απο σήμερα και μεχρι 40 ημερες μετα.(Δεν υπαρχει λογος να κανω update συνεχως ολο τον πινακα. Οτι περασε δεν αλλαζει, ενω δεν χρειαζεται προγραμματισμος για χρονικο διαστημα > 40 ημερων)

Οποτε έχουμε

UPDATE tbl_Programmatismos p
SET katastasi = "KELI EXCEL"
WHERE "GRAMI EXCEL" = p.agm
AND "STILI EXCEL" < = p.day
AND p.day >= (date() -1)
AND p.day < (date() -40)

Εδω ειναι που χρειαζομαι και την βοηθεια σας.... Στην "GRAMMI EXCEL" και στην "STILI EXCEL"....

Ευχαριστω, και οπως πολυ σωστα έιπες έρχεται Σαββατοκυριακο !!!!!

kapetang 10-02-12 15:36

Καλημέρα στην παρέα

Στέλιο, για τη λύση που επέλεξες (ορισμός της κατάστασης στο excel και ενημέρωση της ΒΔ) σε γενικές γραμμές βρίσκεσαι στο σωστό δρόμο.

Χρειάζεται όμως να λάβεις υπόψη σου τα εξής:

1. Είναι καλύτερα αρχικά στη ΒΔ να μη δώσεις τιμή στο πεδίο «Katastasi» του πίνακα «tbl_Programmatismos».

Δε χρειάζεται, αφού το πεδίο αυτό θα συμπληρωθεί από τα στοιχεία του excel.

Πάντως, αν αποφασίσεις να το συμπληρώσεις, δε χρειάζεται το ερώτημα ενημέρωσης, αρκεί να αλλάξεις το ερώτημα προσάρτησης στο:

INSERT INTO tbl_Programmatismos ( [day], agm,Katastasi )
SELECT Ref_Day.Day, tbl_Persons.agm, “Π”
FROM tbl_Persons, Ref_day

Θα έλεγα ότι δε χρειάζεται να προσθέσεις καμία εγγραφή στον πίνακα «tbl_Programmatismos». Αυτός θα συμπληρώνεται (Insert Into) και θα ενημερώνεται (Upadate) από το excel.

2. Γράφεις «Εκτιμω οτι πρεπει να δημιουργησω μια UPDATE εντολη SQL η οποια θα αλλαζει το πεδιο Katastasi_Code στον Πίνακα Ref_Katstasi της ACCESS».

Το σωστό είναι ότι θα αλλάζουν οι τιμές του πεδίου «Katastasi» του πίνακα «tbl_Programmatismos», όπως φαίνεται και στο σχετικό ερώτημά σου.

Το ερώτημα ενημέρωσης του πίνακα «tbl_Programmatismos»,δε λειτουργεί (δεν συμφωνεί με τη σύνταξη της SQL).

Απλά εκφράζει τη λογική που θα ακολουθεί η ενημέρωση.

Φυσικά θα πρέπει να αλλάξει στο:

UPDATE tbl_Programmatismos p
SET katastasi = "KELI EXCEL"
WHERE "GRAMI EXCEL" = p.agm
AND "STILI EXCEL" = p.day
AND "STILI EXCEL" >= (date() -1)
AND "STILI EXCEL" < (date() +40)

Πιστεύω ότι θα διευκόλυνες όποιον θα προσπαθούσε να γράψει τον κώδικα που απαιτείται για τη συμπλήρωση και ενημέρωση του πίνακα «tbl_Programmatismos», αν ανεβάσεις στο φόρουμ τα αρχεία του excel και της access συμπληρωμένα και κατάλληλα εναρμονισμένα.

Με τον όρο εναρμονισμένα εννοώ:

1. Τίτλος των γραμμών στο excel θα είναι ο κωδικός «agm».

2. Τίτλος των στηλών οι διάφορες ημερομηνίες σε μορφή d/m/yyyy.

3. Στη διασταύρωση θα μπαίνει η κατάσταση ή ο κωδικός της (αριθμός που έχει στον πίνακα «Katastasi», ανάλογα με το τι αποθηκεύεται στον πίνακα «tbl_Programmatismos».

Εκτός από τη μεικτή λύση, που φαίνεται ότι επέλεξες, υπάρχουν και οι λύσεις όλα να γίνονται στο excel ή την access.

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

Φιλικά/Γιώργος

stelianta 10-02-12 16:53

Γιωργο καλησπερα....

Φυσικα και προτιμω, ολη η δουλεια ν γινεται μεσα στην access. Ομως ειχα την εντυπωση οτι κατι τετοιο δεν ειναι εφικτο. Αλλωστε το ειχαμε συζητησει και εδω :
http://www.ms-office.gr/forum/access...merominia.html

Φυσικα αποκλειω την λυση του excel ΜΟΝΟ, διοτι αυτο το κομματι ειναι ενα μερος μιας αρκετα μεγαλης κ πολυπλοκης εφαρμογης.
Απλα την χτιζω κομματι κομματι και παντα με την πολυτιμη βοηθεια των μελων του φορουμ, οι οποιοι οπως ανεφερα και 2-3 ποστ παραπανω με χουν κανει "Μαγκα".

Θα ηθελα λοιπον ν μαθω τον τροπο με τον οποιο μπορω ν το κανω μεσα στην access απ ευθειας.

Στο post Νο 3 τα 2 αρχεια που εχω ανεβασει, νομιζω πως ειναι εναρμονισμενα οπως μου ζητησες. Τηρουνται οι κανονες , παρολο που τα στοιχεια ειναι εικονικα. Εκτος και αν δεν καταλαβα καλα εγω. Χρειαζεται ν βαλω πραγματικα στοιχεια ?

Υστερολογιο. Προφανως ηταν λαθος ο SQL "ψευοκώδικας" που χρησιμοποιησα. Ευχαριστω για την διορθωση

kapetang 10-02-12 20:45

Καλησπέρα στην παρέα

Φίλε Στέλιο έχω την εντύπωση ότι ασχολείσαι με πολλά και δε διαβάζεις προσεκτικά τις απαντήσεις στα μηνύματά σου.

Εκείνο που λέω στο μήνυμα που αναφέρεις είναι ότι μια φόρμα που στηρίζεται σε ερώτημα διασταύρωσης δε μπορεί να χρησιμοποιηθεί για την καταχώρηση στοιχείων.

Στην access θα μπορούσες να καταχωρήσεις τα στοιχεία της κατάστασης με τον κλασικό τρόπο.

Με μία κύρια φόρμα που θα στηρίζεται στον πίνακα «tbl_Persons» και μία δευτερεύουσα που θα στηρίζεται στον πίνακα «tbl_Programmatismos »

Με ένα ανορθόδοξο τρόπο. Μπορούμε να δημιουργήσουμε ένα πίνακα «ProgrammatismosMina» ο οποίος θα περιέχει τα πεδία [agm], [Etos],[Minas], f1, f2, έως f31.

Σε μια φόρμα (μπορεί να περιέχει και καρτέλες για να χωρίζει τις ημερομηνίες σε 15ήμερα) που θα στηρίζεται στον πίνακα θα καταχωρούμε(όπως στο excel) τα στοιχεία και μετά με κώδικα θα τα μεταφέρουμε στον πίνακα «tbl_Programmatismos ».

Απορώ πως θεωρείς τα αρχεία που ανέβασες εναρμονισμένα όταν στο excel αντί για το agm (1,2,3, ) έχεις τους χαρακτήρες Α, Β, Γ, Δ, κλπ.

Τα στοιχεία που ανεβάζουμε μπορεί να είναι εικονικά. Αλλά θα πρέπει να είναι επαρκή και να συμφωνούν με τον τύπο των πεδίων (κείμενο, αριθμός, ημερομηνία, κλπ).

Γιώργος

stelianta 10-02-12 21:13

2 Συνημμένο(α)
Φιλε Γιωργο

Εχεις δικιο οτι ασχολουμαι με πολλα πραγματα ....

Για να ειμαι ειλικρινης, δεν καταλαβα ακριβως τον τροπο τον οποιο μου προτεινεις για να γινει ολη η δουλεια μεσα στην ACCESS.

Οποτε αυτο που θα προτιμησω ειναι να γινει οπως αρχικα ειχα προτεινει, με το excel.

Ξαναανεβαζω τα αρχεια.

Στο excel :

Σαν επικεφαλιδες στηλων εχω τις ημερομηνιες (για ενα μηνα) με μορφη d/m/yyyy

Σαν γραμμες εχω το PK του πινακα persons (AGΜ)

Ελπιζω να ειναι επαρκη.

Ευχαριστω για τον χρονο σου, συγνωμη αν στην προσπαθεια να κανω κατι γινονται καποια λαθη, αλλα ισως να οφειλονται και στην ελειψη γνωσεων

Ευχαριστω και παλι

Meteora 11-02-12 14:49

Καλησπέρα

Όταν ο Γιώργης "σηκώσει τα μανίκια του", πάντα η πρότασή του είναι απολύτως επεξεργασμένη, έχει να κάνει με την σχεδίαση του πονήματος και η λύση που προτείνει ό,τι καλύτερο.
Αγαπητέ μας Στέλιο, βλέπω ότι αποφάσισες να διερευνίσεις την επιλογή περάσματος δεδομένων από το excel σε πίνακα Access, ίσως επειδή η πρόταση του φίλου μου Γιώργου σε φάνηκε δυσκολοκατανόητη.
Έστω...
Η 2η, 3η, ...νιοστή στήλη του excel έχει 15 δεδομένα (κάπου ανέφερες ότι οι γραμμές θα είναι ενδεχομένως 60). Έπομένως χρειάζεσαι πίνακα με 15 πεδία (ή ...60!).
Περιέγραψέ μας ποιά δεδομένα θες να πάνε που. Δώσε ένα παράδειγμα (πέρασε δηλαδή δεδομένα με το χέρι).
Αν μπορώ θα βοηθήσω.
Με εκτίμηση
Νίκος Δ.

stelianta 11-02-12 15:11

Καλησπερα.

Θεωρω οτι το excel αρχειο ειναι ετοιμο. Αν οχι θα παρακαλουσα να μου πειτε τι διορθωσεις χρειαζεται ν κανω.

Αυτο που χρειαζομαι λοιπον ειναι :

Να περασουν τα στοιχεια αυτα (insert) στον πινακα tbl_ programmatismos. Να δημιουργηθει δηλ. Μια γραμμη, στον εν λογο πινακα, για καθε ημερα, για καθε ανθρωπο, και με κατασταση αναλογη με το κελι του σταυρολεξου. Για παραδειγμα ο ανθρωπος 1 για την ημερομηνια 1/1 εχει κατασταση "Π". Ετσι θα πρεπει ν μπουν τοσες γραμμες οσες το γινομενο Γραμμες * στηλες του αρχειου excel.

Οταν η κατασταση ενος ανθρωπου για μια ημερα αλλαξει, να μπορει να γινει update ο πινακας tbl_progammatismos, αλλαζωντας αναλογα την τιμη του πεδιου katastasi, για την συγκεκριμενη εγγραφη (την συγκεκριενη δηλ. ημερα κ τον συγκεκριμενο ανθρωπο)

Αγαπητε Νικο ελπιζω ν το περιεγραψα αρκετα καλα, ωστε να εγινα κατανοητος....

Ευχαριστω πολυ για τον χρονο σας κ τους 2.

kapetang 11-02-12 18:02

1 Συνημμένο(α)
Καλησπέρα στην παρέα

Στέλιο, στη ΒΔ που επισυνάπτω, με τη βοήθεια της φόρμας «ImportFromExcel» και του κώδικα που υπάρχει στη λειτουργική μονάδα «Module1» μπορούμε να μεταφέρουμε δεδομένα από ένα βιβλίο του excel στον πίνακα «tbl_Programmtismos» της access, με τον τρόπο που θέλεις.

Κατά τη λήψη δεδομένων από το excel ακολουθείται ο ακόλουθος κανόνας:

Αν για ένα συγκεκριμένο άτομο και ημερομηνία δεν υπάρχει καταχώρηση στον πίνακα «tbl_Programmtismos» τα στοιχεία προσαρτώνται (Insert Into).

Αν υπάρχει καταχώρηση ενημερώνεται η κατάσταση (Update).

Το συμπιεσμένο αρχείο περιέχει τη ΒΔ και το αρχείο του excel που περιέχει τα δεδομένα.
Για να γίνουν δοκιμές καλό είναι να αποσυμπιεστούν στον ίδιο φάκελο.

Φίλε Νίκο ευχαριστώ.

Η περίπτωση που εξετάζει ο Στέλιος έχει ενδιαφέρον.
Ίσως θα μπορούσε να γίνει καλύτερη σχεδίαση. Αλλά χωρίς να είναι πλήρως γνωστές οι απατήσεις της εφαρμογής δεν είναι δυνατόν να εκφραστεί άποψη.

Φιλικά/Γιώργος

stelianta 11-02-12 18:59

Καλησπερα στην παρεα....

Φιλε Γιωργο ευχαριστω παρα πολυ για την πολυτιμη βοηθεια σου.....

Απο την στιγμη που θεωρεις οτι χρειαζεται να ξερεις ακριβως, τις απαιτησεις της εφαρμογης, και προκειμενου εμεις οι αδαείς να μαθουμε 5 πραγματα παραπανω, απο τους ικανοτερους, το θεμα εχει ως εξης :

Προκειται για την διαχειριση του προσωπικου ενος στρατιωτικου τμηματος. Το προσωπικο μπορει να Εχει καθε ημερα διαφορετικη κατασταση. Μπορει να ειναι παρων, μπορει να εχει αδεια, μπορει να λειπει ταξιδι κλπ κλπ

Οπως αντιλαμβανεσαι ο χειριστης του πραγραμματος που φτιαχνουμε ειναι αυτος που εχει το κοντρολ του προσωπικου, και ο οποιος πρεπει με "μια ματια" στον πινακα (excel) να εχει αποψη για την κατασταση του καθενος, σε συγκεκριμενη ημερομηνια. Επιπροσθετα μεσα απο την "μορφοποιηση υπο ορους" του excel , τα κελια χρωματιζονται αναλογα, την κατασταση. Οποτε πολυ γρηγορα μπορει να δει σε μια περιοδο στο μελλον που εχει πολλες αδειες, που πολλα ταξιδια, και αναλογα, να αλλαξει την κατασταση σε ενα ατομο, προκειμενου να κανει την δουλεια του.

Θα μου πεις τωρα και η access που μπλεκει ? οπως προειπα προκειτε για ενα μερος ενος πολυκοπλου και αρκετα μεγαλου προγραμματος το οποιο χτιζεται βημα βημα. Η acces λοιπον χρησιμοποιειται για την δημιουργια ερωτηματων , εκθεσεων και ακομα την τηρηση μιας db η οποια κραταει, μεταθεσεις, εκπαιδευσεις, κ.α στρατιωτικα στοιχεια.

Επισης αρκετες εκθεσεις στηριζονται στο "ποιος απο τοτε, μεχρι τοτε, εχει ατη την κατασταση"

Ελπιζω να εγινε κατανοητο το θεμα του project και φυσικα εχω αυτια κ ματια ανοικτα σε προτασεις για βελτιωση στην σχεδιαση και την υλοποιηση

Και παλι ευχαριστω απο καρδιας για την βοηθεια

stelianta 12-02-12 11:25

Αγαπητε Γιωργο....

Μολις δοκιμασα αυτο το οποιο εφτιαξες...

ΟΤΙ ΚΑΙ ΝΑ ΠΩ ΕΙΝΑΙ ΛΙΓΟ !!!!

Δεν ειναι καλό. Ειναι ΤΕΛΕΙΟ !!! :thumbup: :thumbup: :thumbup:

1000 ευχαριστω...

Να καταχραστω λίγο τις γνωσεις σου, και την διαθεση σου για βοηθεια ?

1. Εχω την εντυπωση, οτι πλεον ο Πινακας της access Ref_Day δεν χρειαζεται πλεον. Κάνω λάθος ?

2. Υπαρχει δυνατοτητα κατα την μεταφορα των δεδομενων απο το excel στην access να γινεται καποιος ελεγχος, και να ενημερωνεται ο χρηστης αν εχει περασει (στο excel) κατασταση που δεν υπαρχει;

Προσπαθησα να το κανω, συνδεοντας τoυς πίνακες Ref_Katastasi και tbl_Programmatismos, και ενεργοποιωντας την "ακεραιοτητα αναφορων", αλλα αυτο που εγινε ειναι να αποριπτει τις γραμμες, και ετσι ο χρηστης δεν εχει καταλαβει το λαθος του.

Ειλικρινα αυτο που εχεις κανει, ειναι ηδη "too much" οποτε αν δεν μπορεις να βοηθησεις παραπερα, ειναι απολυτα κατανοητό, και σε ευχαριστω για μια ακομη φορα, για αυτο που ηδη εκανες

kapetang 12-02-12 22:19

Καλησπέρα

Φίλε Στέλιο :

1. Ο πίνακας «Ref_Day» δε χρειάζεται

2. Στη ΒΔ πρέπει να υπάρχουν οπωσδήποτε οι αναφορές ακεραιότητας.

3. Οι έλεγχοι για να μη καταχωρηθούν στο excel άτομα και καταστάσεις που δεν υπάρχουν στην access, θα πρέπει να γίνεται στο excel.

Για την οργάνωση του σχετικού φύλλου σκέφτομαι τα εξής:

1. Οι ημερομηνίες να είναι σε μία στήλη και το προσωπικό σε μία γραμμή.
Αυτό βοηθάει επειδή θα μπορούμε να φιλτράρουμε με πολλούς τρόπους τη λίστα που θα δημιουργηθεί και επειδή πιστεύω ότι οι ημερομηνίες θα αυξάνονται με πολύ μεγαλύτερο ρυθμό από το προσωπικό.

2. Οι τιμές των AGM και της κατάστασης θα παίρνονται από δύο πτυσσόμενα πλαίσια που θα ενημερώνονται κατευθείαν από τη ΒΔ, κατά το άνοιγμα του βιβλίου.

Έτσι δε θα υπάρχει δυνατότητα να καταχωρηθούν στοιχεία που δε υπάρχουν στη ΒΔ.

Μάλιστα μπορεί να γίνεται και έλεγχος για να μη καταχωρηθεί κάποιο AGM περισσότερες φορές.
Όλα αυτά απαιτούν κάποιο κώδικα προσαρμοσμένο στη σχεδίαση τόσο της ΒΔ όσο και του excel.

Συμβουλή. Οριστικοποίησε τη σχεδίαση της ΒΔ (Ονομασία πινάκων, ονομασία πεδίων, τύποι δεδομένων, σχέσεις, κλπ) βάλε επαρκή δεδομένα, οργάνωσε το βιβλίο εργασίας του excel (όνομα βιβλίου, φύλλων, καταχώρηση δεδομένων, κλπ) και κάνε σχετικό ερώτημα στο τμήμα του excel του φόρουμ, για την υλοποίηση αυτών που ανέφερα.

Υπάρχουν εκεί άτομα που θα σου δώσουν καταπληκτικές λύσεις.

Φιλικά/Γιώργος

stelianta 13-02-12 06:56

Ευχαριστω πολύ για ακομα μια φορα.

Tasos 13-02-12 21:04

1 Συνημμένο(α)
Καλησπέρα!

Δείτε ένα παράδειγμα που χρησιμοποιεί τη μέθοδο το Γιώργου ( η ενημέρωση των ήδη υπαρχόντων εγγραφών ή εισαγωγή τους αν δεν υπάρχουν) αλλά μέσα από την Excel.

Kατεβάστε τα συνημμένο αρχείο Excel και ανοίξτε το.

Πατήστε το κουμπί [...] .

Στο διάλογο που θα εμφανιστεί επιλέξτε το αρχείο *.mdb (ImportUpdateFromExcel.mdb) και πατήστε ΟΚ.
Η διαδρομή του αρχείου θα εμφανιστεί στο πλαίσιο κειμένου πάνω στο φύλλο εργασίας.

Κατόπιν από την πτυσσόμενη λίστα επιλέξτε τον πίνακα tbl_Programmatismos
και πατήστε το κουμπί "Ενημέρωσε την Access".

Κάντε έλεγχο στα αποτελέσματα στο αρχείο Access

Φιλικά

Τάσος

stelianta 14-02-12 09:45

Τασο, να ευχαριστησω και εσενα για την βοηθεια σου, που με τον Γιωργο καταφερατε να με μπερδεψετε... Δεν ξερω ποια λυση να χρησιμοποιησω. Μου αρεσουν και οι 2 ΤΟΣΟ ΠΟΛΥ !!!

Πριν κανω καποιες ερωτήσεις, θελω να πω κατι...

Ειμαι μέλος σε διαφορα forum (και αλλων θεματικων ενοτητων)... Αυτο το πραγμα που συμβαινει εδω μεσα ΕΙΝΑΙ ΠΡΩΤΟΦΑΝΕΣ !!!! Και πιστεψτε με δεν ανακαλυψα χθες το internet και τα forum (μετραω Τουλαχιστον 15 χρονια)....

Και εξηγουμαι.....

Τρομερο "know how" του αντικειμενου, Τεραστια διαθεση για βοηθεια, Εναλλακτικες λυσεις και διαφορετικες προσεγγισεις, στα προβληματα που ζητουν λυσεις, και πανω απ ολα με τροπο που βοηθα τους λιγοτερο γνωστες να μαθουν 2 πραγματα παραπανω !!! Επιπλεον τρομερη ευγένεια και επιπεδο στις συζητησεις.

Σ Υ Γ Χ Α Ρ Η Τ Η Ρ Ι Α !!!!! Και ειλικρινα αν μπορω με καποιο τροπο να βοηθησω στην προσπαθεια σας, θα το κανω με μεγαλη μου ευχαριστηση !!!!

Τασο να κανω καποιες ερωτησεις σχετικα με το excel που ανεβασες....

1. Λειτουργει με "νεοτερου" τυπου αρχεια access (2010) ή μονο με *.mdb Πρεπει να γινει καποια αλλαγη στον κωδικα ?

2. Ειδα οτι εχεις αποκρυψει καποια κελια τα οποια εχουν περιεχομενο. Θα μπορουσες να μου πεις για παραδειγμα που χρησιμευουν τα περιεχομενα των κελιων Α1, Β1, Α7

3. Oπως καταλαβαινεις, τα δεδομενα (αρα κ τα κελια που χρησιμοποιηθηκαν) ηταν εικονικα για να γινει δοκιμη. Στην περιπτωση που χρειαστει να αλλαξω την Περιοχη εργασιας (πιο πολλα agm δηλαδη και πιο πολλες ημερομηνιες) αλλαζει αυτοματα και η περιοχη που επιλεγεται για να ενημερωσει τον πινακα της access η πρεπει να γινουν καποιες αλλαγες ?

4. Το σημειο στον κωδικα :

With rngData
FinalRow = .Rows.Count
FinalColumn = .Columns.Count
For j = 2 To FinalRow
For i = 2 To FinalColumn

Δηλωνει απο ποια στηλη και απο ποια γραμμη ξεκινανε οι τιμες για το πεδιο Katastasi του tbl_Programmatismos ? Αυτο βεβαια μπορει να το απαντησει και ο Γιωργος , αφου αυτο το κομματι είναι δικός του κώδικας.

Ευχαριστώ και τα λέμε....

Οταν ολοκληρωθει αυτο που φτιαχνω, (επειδη πολλα μελη του φορουμ εχουν βαλει το χερακι τους με τον ενα ή τον άλλο τροπο (Kapetang, Meteora, Tasos, Nasos23, spirosgr sorry αν ξεχναω κάποιον) Θα ανεβει ολοκληρη, ωστε να δουν ΟΛΑ ΤΑ ΜΕΛΗ μια ολοκληρωμενη δουλεια, που θιγει πολλά θέματα.

Tasos 14-02-12 12:11

Καλημέρα Στέλιο!

Το κελί A1 δηλώνει την τελευταία μη κενή γραμμή της στήλης Β.
Δεν χρειάζεται (παρέλειψα να το διαγράψω) αφού την τελευταία γραμμή τη βρίσκω με χρήση κώδικα VBA.

To κελί Β2 φέρει το όνομα dbFullName και είναι συνδεδεμένο με το
πλαίσιο κειμένου txtDbFullName (Απαραίτητο χρησιμοποιείται από τον κώδικα). περιέχει τη διαδρομή της ΒΔ.

Τα κελιά A7:Axxx περιέχουν τα ονόματα των πινάκων της ΒΔ που έχει επιλεγεί χρησιμοποιούνται
την πτυσσόμενη λίστα cbodbTables. (επίσης απαραίτητα).

Μπορείς να χρησιμοποιήσεις όσα agm θέλεις και όσες ημερομηνίες θέλεις ξεκινώντας πάντα από το κελί Β6.
Αρκεί να μην αφήνεις κενές γραμμές η στήλες.

H περιοχή rngData που αναφέρεις στην ερώτηση σου προσδιορίζει τις όποιες διαστάσεις του πίνακα της Excel πχ B6:BM1000.
Δεν έχει σχέση με την Access.

Για να μπορείς να εισάγεις δεδομένα από βάσεις δεδομένων με μορφή *.accdb θα χρειαστεί να κάνεις 2 αλλαγές:

1.
Άλλαξε τη γραμμή :

fld.Filters.Add "Access Databases", "*.mdb"

με τη γραμμή:

fld.Filters.Add "Access Databases", "*.mdb;*.accdb"

Για να επιτρέψεις στο διάλογο επιλογής BΔ. να σου εμφανίσει τα αρχεία *.accdb.


2.
Άλλαξε τη γραμμή:

cn.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source = '" & dbFileName & "'"
Προσοχή! Αυτή η γραμμή υπάρχει 2 φορές στον κώδικα.

με τη γραμμή:

cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & "Data Source = '" & dbFileName & "'"


Καλή συνέχεια!

Φιλικά

Τάσος

stelianta 14-02-12 20:18

1 Συνημμένο(α)
Αγαπητε Τασο, αντιμετωπιζω το ακολουθω προβλημα...

Αυτο που χρειαζομαι είναι σε καθε Φυλλο εργασιας να έχω τα περιεχομενα ενος ετους. Σε μορφη *.xls ομως υπαρχει περιορισμος στις στηλες τις οποιες θα χρησιμοποιησω (δεν μου φτανουν). Μια σκεψη που εκανα ηταν να το σωσω ως xlsx για να ξεπερασω το προβλημα.

Κατα την διαδικασια, το excel με προετρεψε να το σωσω ως xlsm λογω των μακροεντολων που περιεχονται.

Οταν ομως δοκιμασα να το ανοιξω ελαβα το ακολουθο μυνημα

Compile Error :
Method or data member not found

στο σημειο

If Me.cbodbTables.Text = vbNullString Then Exit Sub

μπορεις να δεις κ το συνημμενο αρχειο.

Επιπλέον για λόγους εμφανισης χρειάζομαι επιπλέον 2 Γραμμες πριν την γραμμη 6 και μια στηλη αναμεσα στις στηλες Β & C. Πρεπει να αλλαξει κατι στον κωδικα ?

Ευχαριστω Πολυ

Tasos 14-02-12 21:21

Προφανώς δεν αναγνωρίστηκαν τα στοιχεία ελέγχου κατά τη μετατροπή από *.xls σε *.xlsm.

Συνήθως αυτό το μήνυμα λάθους το παίρνεις μόνο μια φορά όταν η εφαρμογή "προσπαθεί" να κάνει τη μετατροπή/μεταγλώττιση του κώδικα VBA και άλλων αντικειμένων στη νέα δυαδική μορφή που υποστηρίζει το *.xlsm για αντικείμενα VBA, αντικείμενα εκτυπώσεων και άλλα...

Αν μετά από μια επανεκκίνηση του αρχείου συνεχιστεί το πρόβλημα τότε
απομάκρυνε τα στοιχεία ελέγχου από το *.xlsm (που τώρα πια είναι εικόνες) και φρόντισε:

Είτε να δημιουργήσεις καινούργια χρησιμοποιώντας τα ίδια ονόματα
είτε να τα αντιγράψεις από το αρχείο *.xls.έχοντας και τα 2 αρχεία ανοιχτά με Excel 2007.

Μέσα στον κώδικα υπάρχει μια και μοναδική φορά η γραμμή >Set rngData = Range(Range("B6"), Range("B6").End(xlToRight))

Το "B6" είναι η διεύθυνση του κελιού πάνω αριστερά στον πίνακα των δεδομένων
όπως ήταν στο παράδειγμα μου.

Θα πρέπει να το τροποποιήσεις έτσι ώστε να δηλώνει τη νέα διεύθυνση του κελιού αυτού μετά τη μετακίνηση του πίνακα δεδομένων.

Τάσος

stelianta 15-02-12 11:13

Τασο σε ευχαριστω πολυ.

Εχω 3 παρατηρησεις :

1. Για να παιξει χρειαζεται να προσθεσεις στα references του Excel το
"Microsoft ActiveX Data Objects 2.5 Library"

2. Θα ηθελα κατα την ενημερωση , να αγνοει τα κενα κελια (μπορει ενας ανθρωπος να ξεκινησει να "παρακολουθειται" απο μια ημερομηνια κ μετα. Οποτε απο εκεινη την ημερομηνια κ πισω τα κελια ειναι ΚΕΝΑ.

3. Ενώ ακολουθησα τα βηματα που μου ειπες, (δηλαδη εσβησα και ξανδημιουργησα ολα τα στοιχεια ελεγχου) εξακολουθω να περνω το μυνημα λαθους που ανεφερα στο προηγουμενο ποστ μου.

Παρολα αυτα αν απλα κλεισω το παραθυρο της VBA, Η διαδικασία λειτουργει ΣΩΣΤΑ. Τουλαχιστον έτσι δειχνει.

4. Υπαρχει τροπος, σε *.xls (2003) να βγαλεις τον περιορισμο του πληθους των στηλών ?


Και πάλι Ευχαριστώ

Tasos 15-02-12 15:41

1 Συνημμένο(α)
Καλησπέρα!

Το αντικείμενο "Microsoft ActiveX Data Objects 2.x Library" (ADODB) φροντίζει για τη μεταφορά
δεδομένων από την Excel στην Access.
Μπορεί κανείς με μια τροποποίηση στον κώδικα (Late Binding) να το χρησιμοποιήσει και χωρίς την αναφορά στη VBA αλλά στην περίπτωση μας έχει γραφτεί έτσι που
πρέπει να φορτώνεται η βιβλιοθήκη αυτή κατά την εκκίνηση του αρχείου (συμβάλει στην απόδοση της εφαρμογής).

Το λάθος που περιγράφεις ενώ δεν μου το παρουσίασε στην 2007. Μου το παρουσίασε όμως στην 2010!

Η αιτία του κακού: Η ιδιότητα της πτυσσόμενης λίστας: Listfillrange

Σου στέλνω ένα αρχείο σε μορφή *.xlsm με κάποιες τροποποιήσεις στον κώδικα ώστε να μην προκαλείται σφάλμα κατά την εκκίνηση του αρχείου.

Το να εξαιρέσεις τα κενά κελιά από την ενημέρωση της βάσης μπορεί να έχει και επιπτώσεις ως προς την ορθότητα των δεδομένων σου στην Access.
φαντάσου να περάσεις κατά λάθος σε μια στήλη τα δεδομένα μιας άλλης...

Πως θα τα διορθώσεις αν έχουν ήδη περαστεί στην Access, αν δεν επιτρέψεις την ενημέρωση και των κενών κελιών στην Excel;

Εντάξει αυτό το φτιάχνεις με κάποιο τρόπο. Ωστόσο, γιατί πρέπει να υπάρχουν 2 προγράμματα για να γίνει η δουλειά αυτή;

Γιατί δεν τα κάνεις κατευθείαν στην Excel;

Δεν μπορείς να αυξήσεις τις γραμμές ή τις στήλες του υπολογιστικού φύλλου Excel σε οποιαδήποτε έκδοση Office.

Φιλικά

Τάσος

stelianta 15-02-12 17:08

Καλησπερα...

Ευχαριστω για τις διορθωσεις στον κωδικα, κ για το νεο αρχειο που ανεβασες. Οσον αφορα τις ερωτησεις σου...

Στην περιπτωση που ο χρηστης εντοπισει λαθος περασματα (Αν για παραδειγμα περασει τα δεδομενα μια στηλης σε μια αλλη), νομιζω πώς αυτο που εχει να κανει ειναι να διορθωσει την λαθος ημερα, κ να ενημερωσει την access μονο για την ημερα εκεινη.
Δεν ειναι προβλημα ομως να το λειτουργησω κ ετσι, μιας κ θα τις αποκλεισω μετα στα ερωτηματα που θα δημιουργησω στην access. Απλα για να μην γεμιζει η ΒΔ σκουπιδια ή αχρηστη πληροφορια.

Οσον αφορα γιατι χρησιμοποιω 2 προγραμματα, η απαντηση βρισκεται στο post #16 οπου περιγραφω το θεμα του project. Το συγκεκριμενο κομματι ειναι μερος μιας αρκετα μεγαλης κ πολυπλοκης εφαρμογης, της οποιας ο χειριστης, "εχει μαθει" μεχρι σημερα να δουλευει με αυτον τον πινακα του excel.

Τα υπολοιπα ομως γινονται στην access....

stelianta 29-02-12 10:13

2 Συνημμένο(α)
Αγαπητέ Τάσο Καλημέρα....

Καταρχην να σου πω οτι το προβλημα μου το εχω λυσει με τον τροπο που μου προτεινε ο Γιωργος (kapetang).

Προσπαθωντας ομως να προσαρμοσω και την δικη σου λυση, η οποια ειναι "βολικοτερη" για τους χρηστες, χρησιμοποιωντας το τελευταιο αρχειο που ανεβασες, έλαβα μυνηματα λάθους (οπως φαινεται στις συνημμενες εικονες)

Το λάθος το έπαιρνα οταν εδινα την διαδρομη του αρχειου.

Εχεις υποψη σου περι τίνος πρόκειτε ;

Ευχαριστω

Tasos 29-02-12 10:52

Καλημέρα!

Αφαίρεσε τη γραμμή Me.cbodbTables.Text = ""

Παρέλειψα να τη διαγράψω κατά την τροποποίηση του αρχείου σε *.xlsm

Φιλικά

Τάσος

stelianta 29-02-12 13:59

Τασο σε ευχαριστω πολυ.

Δουλεψε τέλεια !


Η ώρα είναι 20:20.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2