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/826-hmerominia.html)

Meteora 10-11-10 14:35

Ημερομηνία
 
Καλησπέρα...
Δεν μπορώ να εξηγήσω πως η εντολή :
Κώδικας:

DoCmd.RunSQL "insert into tbldanio ([imeraarxi]) values (#" & Format(Date, "dd/mm/yyyy") & "#)"
γράφει στο πεδίο [imeraarxi] σήμερα (10/11/2010) την τιμή 11/10/2010 !!

Τι φταίει ;

Αν πάλι γράψω :
Κώδικας:

DoCmd.RunSQL "insert into tbldanio ([imeraarxi]) values (#" & Format(Date, "yyyy/mm/dd") & "#)"
τότε γράφει τη πρέπουσα δηλ. 10/11/2010 !!

και τα περίεργα δεν σταματουν εδώ...:crazy2:
Νίκος Δ.

Υστερολόγιο : Δέν έκανα δοκιμή σε άλλο υπολογιστή.

kapetang 10-11-10 17:26

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

Ο υπολογιστής μου, που είναι ρυθμισμένος να εμφανίζει την ημερομηνία στην ελληνική μορφή («dd/mm/yyyy»), παρουσιάζει το ίδιο πρόβλημα.
Ύστερα από δοκιμές κατέληξα ότι, όταν δημιουργούμε στον κώδικα εκφράσεις με ημερομηνίες (πχ σε ερωτήματα, φίλτρα), θα πρέπει να χρησιμοποιούμε μορφοποίηση ΗΠΑ («mm/dd/yyyy»).
Στα αποθηκευμένα ερωτήματα η χρησιμοποίηση της ελληνικής μορφοποίησης ερμηνεύεται σωστά και δε δημιουργεί πρόβλημα.
Επειδή το θέμα είναι σοβαρό πιστεύω ότι απαιτεί διεξοδικότερη παρουσίαση.

Γιώργος

Meteora 10-11-10 18:20

Γιώργο μου σε ευχαριστώ.
Κάτι με θυμίζει αυτό το Format που αναφέρεις... Ίσως μια συζήτηση στο παρόν Forum...
Δοκίμασα την πρότασή σου σε μια εφαρμογή μου, όπου τα περιεχόμενα του πίνακα tbldanio τα εμφανίζω σε φόρμα.
Η μορφή της ημερομηνίας στη φόρμα είναι στη γνώριμη έκφραση dd/mm/yyyy οπότε έφτασα σε επιθυμητό αποτέλεσμα !

Η εντολή :
Κώδικας:

DoCmd.RunSQL "INSERT INTO tbldanio ([kodbiblio],[imeraarxi],[imeratelos],[idpelati],[epistrofi]) VALUES (" & x &  _
", #" & Format(Date, "yyyy/mm/dd") & "#, #" & Format(DateAdd("d", 15, Date), "yyyy/mm/dd") & "# ," & c & ", '" & d & "')"

  • Τοποθετεί τις ημερομηνίες σε μορφή ημέρα/μήνας/έτος στον πίνακα ( ...? )
  • Είναι ορατές στον πίνακα ( αν στην καρτέλα General του πεδίου σε περιβάλλον σχεδίασης επιλέξουμε Format "Short Date"
  • Εμφανίζονται σωστά και στη φόρμα
... όμως δεν μπορώ να εξηγήσω τι συμβαίνει.

Αν στον υπολογιστή σου ζητήσεις αποθήκευση με Format yyyy/mm/dd τι αποτέλεσμα έχεις στον πίνακα ;
Φιλικά / Νίκος Δ.

kapetang 10-11-10 20:37

Καλησπέρα

Νίκο τα παρακάτω ίσως βοηθήσουν στην εξήγηση των προβλημάτων που δημιουργούν οι ημερομηνίες και οι ώρες, σε σχέση και με τις τοπικές ρυθμίσεις.
Στην access, αλλά και γενικά, η ημερομηνία και η ώρα σε μία χρονική στιγμή ισούται με το χρόνο που πέρασε από μία άλλη, που θεωρείται αφετηρία.
Ο χρόνος αυτός μετράται σε μέρες και εκφράζεται με ένα δεκαδικό αριθμό διπλής ακρίβειας στον οποίο το ακέραιο μέρος αντιστοιχεί στην ημερομηνία και το δεκαδικό στην ώρα.
Οι ημερομηνίες και οι ώρες στον υπολογιστή ουσιαστικά αποθηκεύονται ως δεκαδικοί αριθμοί. Επίσης οι πράξεις με ημερομηνίες και ώρες είναι πράξεις με δεκαδικούς.
Στην καθημερινή ζωή, ανάλογα και με την περιοχή, η ημερομηνία και η ώρα εκφράζεται με μορφές «dd/mm/yyyy» (πχ Ελλάδα), «mm/dd/yyyy»(πχ Αμερική) και όχι ως δεκαδικός αριθμός.
Αυτό δημιουργεί το ερώτημα σε ποια μορφή πρέπει να δώσουμε την ημερομηνία και την ώρα για να αποθηκευτεί ο σωστός δεκαδικός;
Από ότι κατάλαβα σε ένα υπολογιστή ρυθμισμένο στην ελληνική ημερομηνία πρέπει:
  1. Στις συνδεδεμένες φόρμες και τα αποθηκευμένα ερωτήματα να δίνεται στην ελληνική μορφοποίηση (dd/mm/yyyy).
  2. Στις εκφράσεις που δημιουργούνται με κώδικα VBA στην αμερικάνικη (mm/dd/yyyy).
Από τη στιγμή που αποθηκευτεί ο σωστός δεκαδικός για την ημερομηνία και την ώρα μπορούμε να τον εμφανίσουμε (σε ερώτημα, φόρμα, έκθεση) σε οποιαδήποτε μορφή θέλουμε (πχ yyyy/mm/dd).

Φιλικά/Γιώργος
ΥΓ Κατά τη γνώμη μου απαιτείται μια αναλυτικότερη παρουσίαση από κάποιον που γνωρίζει καλά το θέμα.

kapetang 11-11-10 16:22

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

Στη βάση δεδομένων που επισυνάπτεται παρουσιάζονται οι συνηθέστερες μορφές ημερομηνίας μαζί με τις εκφράσεις που πρέπει να χρησιμοποιούνται, ώστε οι ημερομηνίες να αποθηκεύονται και να εμφανίζονται σωστά.
Αφορμή για τη δημιουργία της αποτέλεσε σχετικό μήνυμα του φίλου μου Νίκου (meteora).
Οι εκφράσεις (τύποι) προέκυψαν από δοκιμές του Νίκου και δικές μου και αφορούν συστήματα (PC) στα οποία η ημερομηνία έχει καθοριστεί (στις τοπικές ρυθμίσεις) στη μορφή (dd/mm/yyyy).
Η ΒΔ αποτελείται από μία φόρμα «frmDates» δεσμευμένη στον πίνακα «tblDates» και ένα ερώτημα προσθήκης «qryAddDates».
Με τη βοήθεια των στοιχείων ελέγχου της φόρμας μπορούμε να προσθέσουμε στον πίνακα ημερομηνίες, με διαφορετικές μορφοποιήσεις και να τις εμφανίσουμε στο δεσμευμένο πλαίσιο κειμένου, στην ελληνική μορφοποίηση «dd/mm/yyyy».
Στη φόρμα επίσης μπορούν να γίνουν και κάποιες πράξεις με ημερομηνίες και να εμφανιστούν τα αποτελέσματα.
Η λειτουργικότητα της φόρμας οφείλεται στο ερώτημα προσθήκης «qryAddDates», στους τύπους που υπάρχουν στην προέλευση στοιχείου στα τελευταία πλαίσια κειμένου που εμφανίζουν τα αποτελέσματα των πράξεων με ημερομηνίες και στον παρακάτω κώδικα.
Κώδικας:

Private Sub cmdDMY2_Click()
    'Προσθήκη ημερομηνίας με πρόταση SQL
    'Η μορφή της ημερομηνίας από ελληνική μετατρέπεται σε αμερικάνικη
    DoCmd.RunSQL "Insert Into tblDates Values (#" & Format(Me!txtDMY2, "mm/dd/yyyy") & "#);"
    Me.Requery
    Me.Recordset.MoveLast
End Sub

Private Sub cmdMDY_Click()
    'Προσθήκη ημερομηνίας με πρόταση SQL
    'Η μορφή της ημερομηνίας επειδή είναι σε μορφή ΗΠΑ δε μετατρέπεται

    DoCmd.RunSQL "Insert Into tblDates Values (#" & Me!txtMDY & "#);"
    Me.Requery
    Me.Recordset.MoveLast
End Sub

Private Sub cmdYMD_Click()
    'Προσθήκη ημερομηνίας με πρόταση SQL
    'Η μορφή της ημερομηνίας yyyy/mm/dd αναγνωρίζεται σωστά χωρίς μετατροπή

    DoCmd.RunSQL "Insert Into tblDates Values (#" & Me!txtYMD & "#);"
    Me.Requery
    Me.Recordset.MoveLast
End Sub

Παρατηρήσεις, διορθώσεις και βελτιώσεις είναι ευπρόσδεκτες.

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

Meteora 11-11-10 16:53

Καλησπέρα σε όλους μας...
Γιώργο, δουλειές σαν αυτή που μας πρόσφερες, τις χαρακτηρίζω χρόνια τώρα ως "Μουσκεμένο παξιμάδι", έχοντας-κάθε φορά- στο νου μου την μάνα που μασάει την τροφή για να τη προσφέρει στο μωρό της...
Θερμά σε ευχαριστώ / Φιλικά Νίκος Δ.

kapetang 11-11-10 18:59

Φίλε Νίκο στους επαίνους σου πάντα γενναιόδωρος. Ευχαριστώ.

Tasos 12-11-10 12:53

Καλησπέρα Νίκο και Γιώργο!

Μπορούμε να το κάνουμε και έτσι:


Κώδικας:

Sub test()
    CurrentDb.Execute "INSERT INTO [tbldanio] ( [imeraarxi] ) SELECT Date() AS TheDate FROM [tbldanio]", dbFailOnError
End Sub

Το CurrentDb.Execute είναι κατά πολύ γρηγορότερο από την εντολή RunSQL.

Φιλικά

Τάσος

kapetang 12-11-10 18:21

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

Φίλε Τάσο, ο Νίκος και εγώ στα προηγούμενα μηνύματα ασχοληθήκαμε με τον περίεργο χειρισμό των ημερομηνιών από την access, στα σύστημα (PC) που είναι ρυθμισμένα στα ελληνικά.
Η περίεργη αυτή συμπεριφορά εμφανίζεται και στον κώδικα που προτείνεις:
Αν τρέξουμε τη διαδικασία η τρέχουσα ημερομηνία (Date) αποθηκεύεται σωστά, αλλά όπως είναι φυσικό αποθηκεύονται πολλές εγγραφές, όσες είναι οι αρχικές εγγραφές του πίνακα (From tbldanio).
Η CurrentDb.Execute "INSERT INTO [tblDates] ( [TestDates] ) values(" & Date & ")", dbFailOnError, αποθηκεύει μία εγγραφή αλλά η ημερομηνία που αποθηκεύεται (αυτή εμφανίζεται όταν ανοίγω τον πίνακα) είναι 30/12/1899.
Μόνο η εντολή: CurrentDb.Execute "INSERT INTO [tblDates] ( [TestDates] ) values(#" & Format(Date, "mm/dd/yyyy") & "#)", dbFailOnError, δίνει σωστό αποτέλεσμα
Υπάρχει εξήγηση;

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

admin 12-11-10 18:53

Καλησπέρα φίλε μου!

30/12/1899 = 0 επειδή:

Μέσα στη συμβολοσειρά που (που η γλώσσα προγραμματισμού είναι SQL και όχι VB)
χρησιμοποιείς το Date που δεν αναγνωρίζεται από την SQL άρα επιστρέφεται η μηδενική τιμή ( 0 ).
Δοκίμασε:
CurrentDb.Execute "INSERT INTO [tblDates] ( [TestDates] ) values(Date())", dbFailOnError

Τα λέμε...

Τάσος


Η ώρα είναι 17:18.

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


Search Engine Optimization by vBSEO 3.3.2