Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Ερωτήματα ] Αυτόματη συμπλήρωση εγγραφών (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1454-aytomati-symplirosi-eggrafon.html)

mdragon 26-10-11 13:37

Αυτόματη συμπλήρωση εγγραφών
 
Καλησπέρα σε όλους, και χρόνια πολλά στους Δημήτρηδες.
Έχω σε ένα πίνακα τα εξής πεδία:
Ημ/νία Έναρξης - Ημ/νία Λήξης - Χρονική περίοδος
01/01/2011 - 31/08/2011 - 2(μήνες)

θα ήθελα λοιπόν να δημιουργήσω ένα ερώτημα που να μου δημιουργεί καινούργιες εγγραφές στα πεδία Από & Έως. Πρώτη εγγραφή να δίνεται ανάλογα με την Ημερομηνία Έναρξης και τελευταία ανάλογα με την Ημερομηνία Λήξης σύμφωνα με την Χρονική Περίοδο
Δηλαδή.
Από - Έως
01/01/2011 - 28/02/2011
01/03/2011 - 30/04/2011
01/05/2011 - 30/06/2011
01/07/2011 - 31/08/2011


Ευχαριστώ εκ των προτέρων,
Μάρω

kapetang 26-10-11 18:13

1 Συνημμένο(α)
Μάρω, καλησπέρα!

Στη ΒΔ, που επισυνάπτω, προσπάθησα να προσεγγίσω το ζητούμενο.
Αποτελείται:

1. Από τον πίνακα «Periods» στον οποίο αποθηκεύονται οι περίοδοι (πεδία Από, Έως).
2. Τη φόρμα «frmRunSQL», που χρησιμοποιείται για την καταχώρηση των στοιχείων ορισμού των χρονικών περιόδων και την εκτέλεση του αναγκαίου κώδικα.

Ο κώδικας που δημιουργεί και αποθηκεύει τις χρονικές περιόδους είναι ο εξής:
Κώδικας:

Private Sub cmdRunSQL_Click()
    Dim strSQL As String, startDate As Date, endDate As Date
    If IsDate(Me.txtEnd) And IsDate(Me.txtStart) Then
        If Me.txtEnd <= Me.txtStart Then Exit Sub
        startDate = Me.txtStart
        Do
            endDate = DateAdd("m", Me.txtPeriod, startDate) - 1
            If endDate > Me.txtEnd Then endDate = Me.txtEnd
            strSQL = "INSERT INTO Periods ( Από, Έως ) Values(#" & _
            Format(startDate, "m/d/yyyy") & "#, #" & Format(endDate, "m/d/yyyy") & "# );"
            CurrentDb.Execute strSQL
            startDate = endDate + 1
        Loop Until endDate >= Me.txtEnd
    End If
End Sub

Ελπίζω να είναι αυτό που ζητάς

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

mdragon 27-10-11 09:30

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




Φιλικά,
Μάρω

kapetang 27-10-11 11:11

Μάρω, Καλημέρα

1. Όπως μεταφέρονται ημερομηνίες θα μπορούσαν να μεταφερθούν κείμενα και αριθμοί.
Υπάρχει όμως ένα πρόβλημα.
Αν υποθέσουμε ότι έχουμε ένα πίνακα «Πηγή» με πεδία «Ημερομηνία Έναρξης», «Ημερομηνία Λήξης», «Κείμενο», «Αριθμός».

Η εγγραφή του: 1/1/2011, 31/8/2011, 2, «Πατάτες», 100, σύμφωνα με το ζητούμενο, θα δημιουργήσει 4 εγγραφές στον πίνακα «Προορισμός».
Τι τιμές θα έχουν οι εγγραφές αυτές στα αντίστοιχα πεδία των «Κείμενο» και «Αριθμός»;

2. Για να μη ξαναμεταφερθούν τα δεδομένα μπορούν να ληφθούν κάποια μέτρα, όπως:

2α. Αν τα πεδία του πίνακα «Προορισμός» έχουν μοναδικές τιμές θα μπορούσαμε να ορίσουμε ευρετήρια, που δε θα επιτρέπουν διπλότυπες τιμές.

2β. Να ορίσουμε ένα πεδίο τύπου «Ναι/Όχι» στον πίνακα «Πηγή», που να τσεκάρεται όταν η εγγραφή έχει μεταφερθεί.

Μάρω, έχω τη γνώμη, ότι θα πρέπει να ξεκαθαρίσεις καλύτερα το ζητούμενο ανεβάζοντας και ένα δείγμα ΒΔ.

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

mdragon 27-10-11 11:56

1 Συνημμένο(α)
Γιώργο καλημέρα,
Επειδή τον πίνακα <<Προορισμό>> τον έχω βάλει σαν δευτερεύουσα φόρμα, όταν ενημερώνονται οι ημερομηνίες δεν ενημερώνονται οι Σύνδεσμοι πρωτευόντων πεδίων.
Κάθε γνώμη δεκτή

Το σκέφτηκα να χρησιμοποιήσω μοναδικές τιμές αλλά δεν γίνεται. Άρα καταλήγουμε σε αυτό:
Παράθεση:

2β. Να ορίσουμε ένα πεδίο τύπου «Ναι/Όχι» στον πίνακα «Πηγή», που να τσεκάρεται όταν η εγγραφή έχει μεταφερθεί.

Φιλικά,
Μάρω

kapetang 27-10-11 18:17

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

Έκανα κάποιες τροποποιήσεις στη σχεδίαση της βάσης σου:

1. Πρόσθεσα στον πίνακα «PROMITHEIES» το εξωτερικό κλειδί «idEgguitikis» και έτσι η σύνδεση με τον πίνακα «EGGYHTIKES» γίνεται με το πεδίο αυτό, που είναι σίγουρα μοναδικό στον πίνακα «EGGYHTIKES».

2. Πρόσθεσα στον πίνακα «EGGYHTIKES» το πεδίο «Moved», τύπου Ναι/Όχι.
Έτσι αν είναι τσεκαρισμένο έχουν μεταφερθεί τα στοιχεία.

3. Η σύνδεση της δευτερεύουσας φόρμας με την κύρια γίνεται με το πεδίο «idEgguitikis».

4. Αν και κάποια στοιχεία υπάρχουν στον κύριο πίνακα (Axiografa, MiniaiaPeriodos, κλπ), οπότε θα μπορούσαν να ληφθούν από κει (πχ με ερώτημα), επειδή τα έχεις και στις «PROMITHEIES» τα μεταφέρω και εκεί.

5. Τροποποίησα τον κώδικα, ώστε τα στοιχεία όλων των εγγραφών , που δεν είναι τσεκαρισμένες, να περνούν στον πίνακα «PROMITHEIES» και να εμφανίζονται στη δευτερεύσουσα φόρμα.

Μάρω, δοκίμασε τη ΒΔ που επισυνάπτω καλύτερα και, αν υπάρχει κάποιο πρόβλημα, εδώ είμαστε.

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

mdragon 29-10-11 15:03

Γιώργο μου για άλλη μια φορά σε ευχαριστώ.
Θα μελετήσω την πρότασή σου και θα επανέλθω!!!




Φιλικά,
Μάρω

kapetang 29-10-11 18:08

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

1. Επειδή σκέφτηκα, ένα πιο απλό και περισσότερο ασφαλή τρόπο, για να μη μεταφέρονται δεδομένα που ήδη έχουν μεταφερθεί, τον υλοποίησα στη ΒΔ που επισυνάπτω.
Ο τρόπος αυτός βασίζεται στο ότι κάθε εγγυητική επιστολή χαρακτηρίζεται από τον κωδικό της (idEgguitikis), οπότε αν αυτός υπάρχει στον πίνακα «PROMITHEIES» σημαίνει ότι η εγγραφή έχει μεταφερθεί και αντίστροφα.

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

2. Επειδή, σύμφωνα με τις αρχές σχεδιασμού των βάσεων δεδομένων, δεν είναι σωστό τα ίδια δεδομένα να αποθηκεύονται σε πολλούς πίνακες, αφαίρεσα από τον πίνακα «PROMITHEIES» τα πεδία «Axiografa» και «MiniaiaPeriodos».

Δεν ξέρω τι αποθηκεύει το πεδία «Promitheia». Αν είναι υπολογιζόμενο θα πρέπει να αφαιρεθεί.
Επίσης δεν είναι γνωστό τι αποθηκεύει το πεδίο «Poso». Αν είναι το ποσό της εγγυητικής θα πρέπει να μεταφερθεί στον πίνακα «EGGUITIKES».

Ίσως να χρειαζόταν να προστεθεί η ημερομηνία πληρωμής και το καταβληθέν ποσό και να αφαιρεθεί το πεδίο τύπου Ναι/Όχι «Pliromi».

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

Σε κάθε περίπτωση στις σχέσεις πρέπει να χρησιμοποιείται το πρωτεύον κλειδί του κύριου πίνακα και το αντίστοιχο ξένο (εξωτερικό) του δευτερεύοντα (πίνακα στην πλευρά των πολλών).

4. Δεν ξέρω λεπτομέρειες για τις εγγυητικές επιστολές, τα αξιόγραφα και τις προμήθειες.
Έτσι δεν μπόρεσα να αντιληφθώ αν τα κέντρα κόστους ταυτίζονται με τις τράπεζες, τι εκφράζουν τα ποσοστά, πως υπολογίζεται η προμήθεια, κλπ .

Στη ΒΔ πρόσθεσα ένα ερώτημα «Promithies2» παρόμοιο με το «Promithies», που βρίσκει το ποσοστό χρησιμοποιώντας τη συνάρτηση «MesoPososto», που δημιούργησα με VBA.
Στη συνάρτηση υποθέτω ότι τα ποσοστά (προμήθειας;) για κάθε κέντρο κόστους ισχύουν από την ημερομηνία καθιέρωσης μέχρι την προηγούμενη μέρα της ημερομηνίας ορισμού νέου.
Έτσι ,αν μέσα στο διάστημα [Από, Έως], έχουμε πολλές μεταβολές του ποσοστού η συνάρτηση «MesoPososto» επιστρέφει ένα μέσο.

Μάρω μου, ελπίζω να μη σε μπερδεύω.
Δες τις παραπάνω ιδέες με την άνεσή σου. Σε κάθε περίπτωση εσύ γνωρίζεις καλύτερα το θέμα και εσύ αποφασίζεις.

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


Η ώρα είναι 16:01.

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


Search Engine Optimization by vBSEO 3.3.2