Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > [ Συναρτήσεις ] Ημερομηνία

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #11  
Παλιά 13-11-10, 16:00
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

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

Η βάση δεδομένων «TestDates.mdb», που επισυνάπτεται σε προηγούμενο μήνυμά μου, ενσωματώνει κάποιες διαπιστώσεις του φίλου μου Νίκου (meteora) και δικές μου, σχετικά με το σωστό χειρισμό των ημερομηνιών, στην acces, και δίνει δυνατότητες πειραματισμού.
Μετά την παρέμβαση και του φίλο μου του Τάσου, ασχολήθηκα κάπως περισσότερο με την τρέχουσα ημερομηνία και τις σχετικές δοκιμές τις ενσωμάτωσα στη φόρμα «frmCurrentDate», της συνημμένης βάσης «testDates2.mdb», που περιλαμβάνει και την «TestDates.mdb», έτσι ώστε όλος ο προβληματισμός να βρίσκεται σ’ ένα αρχείο.
Η λειτουργικότητα της φόρμας «frmCurrentDate» οφείλεται στον παρακάτω κώδικα.
Κώδικας:
Private Sub cmdDate1_Click()
    'Επιστρέφει την αφετηρία μέτρησης των ημερομηνιών (0=30/12/1899), της access
    'Αν υποθέσουμε ότι η τρέχουσα ημερομηνία είναι 13/11/2010 η μέθοδος .execute
    'εκτελεί την πρόταση:INSERT INTO [tblDates] ( [TestDates] ) values(13/12/2010)
    'η παράσταση 13/12/2010 είναι ένα πηλίκο με τιμή 0,0005 που ισοδυναμεί με την 30/12/1899
    
    CurrentDb.Execute "INSERT INTO [tblDates] ( [TestDates] ) values(" & Date & ")", dbFailOnError
    Me.Requery
    Me.Recordset.MoveLast
End Sub


Private Sub cmdDate2_Click()
    'Επιστρέφει σωστό αποτέλεσμα, μολονότι η ημερομηνία εισάγεται ως κείμενο
    'Αν υποθέσουμε ότι η τρέχουσα ημερομηνία είναι 13/11/2010 η μέθοδος .execute
    'εκτελεί την πρόταση:INSERT INTO [tblDates] ( [TestDates] ) values('13/12/2010')
    'Από την SQL και τη μέθοδο .execute η '13/12/2010' ερμηνεύεται σωστά

    CurrentDb.Execute "INSERT INTO [tblDates] ( [TestDates] ) values('" & Date & "')", dbFailOnError
    Me.Requery
    Me.Recordset.MoveLast
End Sub

Private Sub cmdDate3_Click()
    'Η μέθοδος .execute εκτελεί την πρόταση:
    'INSERT INTO [tblDates] ( [TestDates] ) values(Date)
     'Η Date δεν αναγνωρίζεται ως συνάρτηση και επιστρέφεται λάθος

    On Error GoTo err_trap
    CurrentDb.Execute "INSERT INTO [tblDates] ( [TestDates] ) values(Date)", dbFailOnError
    Me.Requery
    Me.Recordset.MoveLast
err_exit:
    Exit Sub
err_trap:
    MsgBox Err.Description
    GoTo err_exit
End Sub

Private Sub cmdDate4_Click()
    'Η μέθοδος .execute εκτελεί την πρόταση:
    'INSERT INTO [tblDates] ( [TestDates] ) values(Date())
    'Η Date() αναγνωρίζεται ως συνάρτηση και επιστρέφεται σωστό αποτέλεσμα

    CurrentDb.Execute "INSERT INTO [tblDates] ( [TestDates] ) values(Date())", dbFailOnError
    
    'Ίδια πρόταση SQL μπορούμε να δομίσουμε με πολλούς τρόπους, όπως
    'CurrentDb.Execute "INSERT INTO [tblDates] ( [TestDates] )" & " values(Date())", dbFailOnError
    
    Me.Requery
    Me.Recordset.MoveLast

End Sub

Private Sub cmdDate5_Click()
    'Αν υποθέσουμε ότι η τρέχουσα ημερομηνία είναι 10/11/2010 η μέθοδος .execute
    'εκτελεί την πρόταση:INSERT INTO [tblDates] ( [TestDates] ) values(#10/11/2010#)
    'Επειδή θεωρείται ότι η ημερομηνία είναι σε μορφή ΗΠΑ (mm/dd/yyyy)αποθηκεύυεται
    'η ημερομηνία 11/10/2010. Το περίεργο είναι ότι αν η μέρα είναι πάνω από 12
    '(μέγιστη τιμή μήνα), αντί να εμφανιστεί κάποιο λάθος, δε γίνεται η εναλλαγή
    
    CurrentDb.Execute "INSERT INTO [tblDates] ( [TestDates] ) values(#" & Date & "#)", dbFailOnError
    Me.Requery
    Me.Recordset.MoveLast
End Sub

Private Sub cmdDate6_Click()
    'Αν υποθέσουμε ότι η τρέχουσα ημερομηνία είναι 10/11/2010 η μέθοδος .execute
    'εκτελεί την πρόταση:INSERT INTO [tblDates] ( [TestDates] ) values(#11/10/2010#)
    'Επειδή η ημερομηνία είναι η ελληνική σε σωστή μορφή ΗΠΑ (mm/dd/yyyy)αποθηκεύυεται
    'και εμφανίζεται σωστά (11/10/2010).

    CurrentDb.Execute "INSERT INTO [tblDates] ( [TestDates] ) values(#" & Format(Date, "mm/dd/yyyy") & "#)", dbFailOnError
    Me.Requery
    Me.Recordset.MoveLast

End Sub
Στα σχόλια του κώδικα προσπάθησα να δώσω μία λογική ερμηνεία στον τρόπο που δομούνται οι προτάσεις SQL στο περιβάλλον της VBA και πως τις αποτιμά η access (μέθοδος .execute), όταν περιέχουν την τρέχουσα ημερομηνία.
Η ερμηνεία είναι προσωπική και βασίζεται στη διαμόρφωση της πρότασης SQL τη στιγμή της εκτέλεσης. Διαφορετικές συνεπώς απόψεις είναι ευπρόσδεκτες.
Για να γίνει σωστή δοκιμή των διάφορων περιπτώσεων θα πρέπει η ημερομηνία να ρυθμιστεί (προσωρινά) σε μία ημερομηνία μικρότερη από 11/11/2010.
Τάσο η λύση που προτείνεις για την εισαγωγή μιας εγγραφής με την τρέχουσα ημερομηνία λειτουργεί σωστά.

Φιλικά/Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb TestDates2.mdb (360,0 KB, 29 εμφανίσεις)
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Excel07] Ημερομηνία στο Excel George R Excel - Ερωτήσεις / Απαντήσεις 4 05-01-17 06:23
[Γενικά] Σχετικά με ημερομηνία xristos Excel - Ερωτήσεις / Απαντήσεις 7 09-01-14 12:16
[ Φόρμες ] Ημερομηνία με Calendar stavross Access - Ερωτήσεις / Απαντήσεις 4 29-10-12 17:38
[ Φόρμες ] Ημερομηνία σε φόρμα xristos Access - Ερωτήσεις / Απαντήσεις 6 22-04-12 17:56
[Μορφοποίηση] Ημερομηνία και Μορφοποίηση ikaros80 Excel - Ερωτήσεις / Απαντήσεις 2 06-04-11 21:23


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