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/1280-pedia-me-periexomeno-xronometriseis.html)

gmax 27-07-11 08:05

Πεδία με περιεχόμενο χρονομετρήσεις
 
Καλημέρα σας. Έχω ένα πίνακα που γράφω χρόνους αθλητών. Πως μπορώ να τους γράφω με τη μορφή: 09:54:98 λλ:δδ:εε και μετά να τους αφαιρώ από κάποιον άλλο χρόνο; Π.Χ αν 11:25:98- 01:30:98 = 09:54:98 που είναι το σωστό και όχι 11:25:98- 01:30:98 = 10:85:98.
Ευχαριστώ

kapetang 27-07-11 11:16

Καλημέρα

Γιώργο, τα δεδομένα του παραδείγματος (:98 και όχι ,98) και το αποτέλεσμα της αφαίρεσης (11:25:98- 01:30:98 = 09:54:98 αντί 09:55:00) με μπέρδεψε.
Αν κατάλαβα καλά, θέλεις να καταχωρείς τρία διψήφια τμήματα τα οποία θα χωρίζονται με άνω και κάτω τελεία (:).
Το πρώτο τμήμα θα εκφράζει χρόνο σε λεπτά, το δεύτερο σε δευτερόλεπτα και το τρίτο σε εκατοστά του δευτερόλεπτου.
Αν είναι έτσι, ο μεγαλύτερος χρόνος που θα μπορούσε να καταχωρηθεί είναι :99:99:99= 1 ώρα, 40 λεπτά και 39,99 δευτερόλεπτα. Στην περίπτωση που έχουμε μεγαλύτερους χρόνους πως θα καταχωρούνται;
Νομίζω ότι χρειάζεται να εξηγήσεις καλύτερα το ερώτημα;

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

gmax 27-07-11 12:48

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

gmax 27-07-11 12:57

1 Συνημμένο(α)
Αυτό είναι το αρχείο.

gmax 27-07-11 13:43

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

kapetang 27-07-11 16:00

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

Γιώργο, στη ΒΔ που επισυνάπτω, προσπάθησα να δώσω μια λύση στο ζητούμενο.
Βασίζεται στη ΒΔ που ανέβασες, αλλά με κάποιες αλλαγές. Τις ακόλουθες:
1) Επειδή το πεδίο «ΔΙΑΦΟΡΑ» είναι υπολογιζόμενο το αφαίρεσα από τον πίνακα, για να μη δημιουργεί προβλήματα ενημέρωσης . Η διαφορά φαίνεται στο ερώτημα και τη σχετική φόρμα.
2) Στα πεδία κειμένου «ΑΡΧΙΚΟΣ ΧΡΟΝΟΣ» και «ΤΕΛΙΚΟΣ ΧΡΟΝΟΣ» καθόρισα μήκος 8 χαρακτήρων και την συνθήκη επικύρωσης: Like "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]".
Επίσης για να μη δημιουργούνται προβλήματα αφαίρεσα τη μάσκα εισαγωγής.
3) Πρόσθεσα τη λειτουργική μονάδα «Module1» και τη συνάρτηση «Diafora», η οποία υπολογίζει τη διαφορά των χρονικών στιγμών «ΑΡΧΙΚΟΣ ΧΡΟΝΟΣ», «ΤΕΛΙΚΟΣ ΧΡΟΝΟΣ» και την αποδίδει στη μορφή: λλ:δδ:εε.
Ο κώδικας της συνάρτησης δίνεται παρακάτω:
Κώδικας:

Public Function Diafora(StartTime As Variant, EndTime As Variant) As String
    Dim S1 As Variant, S2 As Variant
    Dim N As Long, N1 As Long, N2 As Long
   
    If IsNull(StartTime) Or IsNull(EndTime) Then
        Diafora = "": Exit Function
    End If
    S1 = Split(StartTime, ":"): S2 = Split(EndTime, ":")
    'Έναρξη χρονομέτρησης σε εκατοστά του δευτερόλεπτου
    N1 = S1(0) * 6000 + S1(1) * 100 + S1(2)
    'Τέλος χρονομέτρησης σε εκατοστά του δευτερόλεπτου
    N2 = S2(0) * 6000 + S2(1) * 100 + S2(2)
    'Διαφορά σε εκατοστά του δευτερόλεπτου
    N = N2 - N1
    'Μετατροπή της διαφοράς σε μορφή λλ:δδ:εε
    Diafora = Format(N \ 6000, "00") & ":" & Format((N Mod 6000) \ 100, "00") & _
            ":" & Format((N Mod 6000) Mod 100, "00")
           
End Function

Η συνάρτηση χρησιμοποιείται στο ερώτημα και στη φόρμα για τον υπολογισμό των διαφορών.
Κάνε δοκιμές και ενημέρωσέ μας, αν σε καλύπτει.

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

gmax 27-07-11 20:50

Καλησπέρα. Πολύ καλό! Μόνο που πρόσθεσα τη μάσκα εισαγωγής για να μην πληκτρολογώ τις άνω-κάτω τελείες. Ευχαριστώ πολύ.

gmax 28-07-11 22:30

Καλησπέρα. Μια ερώτηση ακόμα. Η βάση δεδομένων που ανεβάσατε ανοίγει αυτόματα τη φόρμα. Δεν βρήκα μακροεντολή που να κάνει αυτή τη δουλειά. Εγώ ανοίγω την όποια φόρμα θέλω με μακροεντολή που την ονομάζω "AUTOEXEC". Από περιέργεια, εδώ πως γίνεται;

kapetang 29-07-11 08:20

Καλημέρα

Υπάρχει δυνατότητα, σε κάθε ΒΔ, να ορίσουμε μία φόρμα, ως φόρμα εκκίνησης.
Στην access 2007 γίνεται ως εξή:
1. Κλικ στο κουμπί του office (πάνω αριστερά)
2. Στο παράθυρο, που ανοίγει, κλικ στο κουμπί «Επιλογές της access».
3. Στο παράθυρο «Επιλογές της access», κλικ στην επιλογή «Τρέχουσα βάση δεδομένων» και στο πτυσσόμενο πλαίσιο «Εμφάνιση φόρμας», επιλογή της φόρμας εκκίνησης.

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

gmax 29-07-11 08:59

Ευχαριστώ!

gmax 08-08-11 10:51

Καλημέρα και πάλι. Μια ερώτηση ακόμα. Το αποτέλεσμα της αφαίρεσης πως μπορώ να το προσθέσω στον πίνακα; Και γενικότερα, ένα πεδίο σε ερώτημα ή φόρμα που έχει κάποια αριθμητική πράξη πως γίνεται να είναι δεσμευμένο και κάπου αλλού; Παράδειγμα: Σε πεδίο φόρμας στις ιδιότητες, στο σημείο "προέλευση στοιχείου ελέγχου" γράφοντας "=Diafora([ΑΡΧΙΚΟΣ ΧΡΟΝΟΣ];[ΤΕΛΙΚΟΣ ΧΡΟΝΟΣ])" στην ουσία είναι αδέσμευτο. Δεν ξέρω αν είμαι κατανοητός.
Ευχαριστώ.

kapetang 09-08-11 08:56

Καλημέρα
Η προσθήκη σε πίνακες υπολογιζόμενων πεδίων (πεδίων που οι τιμές τους μπορούν να υπολογιστούν από τις τιμές άλλων πεδίων) παραβιάζει τους κανόνες σωστής σχεδίασης των σχεσιακών βάσεων δεδομένων.
Δεν πρέπει να υπάρχουν υπολογιζόμενα πεδία στους πίνακες:
1. Επειδή είναι περιττά. Χωρίς να υπάρχουν στους πίνακες, μπορούμε να εμφανίσουμε τις τιμές τους σε αδέσμευτα στοιχεία ελέγχου φορμών και εκθέσεων, αλλά και σε ερωτήματα.
2. Καταναλώνουν χώρο στο σκληρό δίσκο.
3. Είναι επικίνδυνα. Μπορούν να παρουσιάζουν τιμές που δε συμφωνούν με τις υπολογιζόμενες. Για παράδειγμα ένας χρήστης (κακόπιστος ή άπειρος) μπορεί να ανοίξει τον πίνακα σε προβολή φύλλου δεδομένων και να κάνει αλλαγές στα πεδία [ΑΡΧΙΚΟΣ ΧΡΟΝΟΣ], [ΤΕΛΙΚΟΣ ΧΡΟΝΟΣ] και [ΔΙΑΦΟΡΑ] με αποτέλεσμα η τιμή του πεδίου [ΔΙΑΦΟΡΑ] να διαφέρει από τη διαφορά των δύο άλλων.
4. Απαιτούν περισσότερο και δυσκολότερο κώδικα για το χειρισμό τους.
Ελπίζω να σε έπεισα, αλλά για την περίπτωση που ακολουθήσεις άλλο δρόμο:
1. Στη φόρμα στο στοιχείο ελέγχου «ΔΙΑΦΟΡΑ» διέγραψε τον τύπο και σύνδεσέ το με το πεδίο [ΔΙΑΦΟΡΑ] του πίνακα.
2. Στη φόρμα πρόσθεσε και τον κώδικα
Κώδικας:

Private Sub ΑΡΧΙΚΟΣ_ΧΡΟΝΟΣ_Exit(Cancel As Integer)
    Me.ΔΙΑΦΟΡΑ = Diafora(Me.ΑΡΧΙΚΟΣ_ΧΡΟΝΟΣ, Me.ΤΕΛΙΚΟΣ_ΧΡΟΝΟΣ)
End Sub

Private Sub ΤΕΛΙΚΟΣ_ΧΡΟΝΟΣ_Exit(Cancel As Integer)
    Me.ΔΙΑΦΟΡΑ = Diafora(Me.ΑΡΧΙΚΟΣ_ΧΡΟΝΟΣ, Me.ΤΕΛΙΚΟΣ_ΧΡΟΝΟΣ)
End Sub

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

gmax 09-08-11 14:46

Καλησπέρα. Αυτό που μ' αρέσει πιο πολύ, είναι οι επεξηγηματικές απαντήσεις σας. Ευχαριστώ πολύ. Θα τα λάβω όλα υπ' όψιν μου.


Η ώρα είναι 23:10.

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


Search Engine Optimization by vBSEO 3.3.2