Forum

Αναζήτηση στο ms-office.gr

Πάμε!
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > [ Ερωτήματα ] Πρόβλημα με ημερομηνία σε sql ερώτημα

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 11-02-20, 02:40
Όνομα: Δημητρης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 29-07-2015
Μηνύματα: 26
Προεπιλογή Πρόβλημα με ημερομηνία σε sql ερώτημα

Καλημέρα στην κοινότητα. Θα ήθελα την βοήθειά σας. Έχω το παρακάτω sql ερώτημα:
Κώδικας:
sql = "SELECT * FROM ΠΙΝΑΚΑ" _
        & " WHERE ΠΕΔΙΟ_Α= '" & cntro & "' AND" _
        & " ΠΕΔΙΟ_Β='" & kdkos & "' AND ΠΕΔΙΟ_Γ='" & eds & "' AND" _
        & " ΠΕΔΙΟ_Δ='" & tm & "' AND ΗΜΕΡΟΜΗΝΙΑ= #" & Format(DDate, "dd/mm/yyyy") & "#"
Το ερώτημα δεν λειτουργεί σωστά όταν έχω την ημερομηνία. Όταν διαγράφω την ημερομηνία τρέχει μία χαρά. Ο τύπος της ημερομηνίας στη βάση μου είναι Ημερομηνία/Ώρα.
Συντακτικά δε βλέπω κάποιο λάθος. Έχει κάποιος φίλος κάποια ιδέα τι μπορεί να φταίει;
Επίσης έχω δοκιμάσει και αυτή την εκδοχή αλλά και πάλι χωρίς αποτέλεσμα.
Κώδικας:
sql = "SELECT * FROM ΠΙΝΑΚΑ" _
        & " WHERE ΠΕΔΙΟ_Α= '" & cntro & "' AND" _
        & " ΠΕΔΙΟ_Β='" & kdkos & "' AND ΠΕΔΙΟ_Γ='" & eds & "' AND" _
        & " ΠΕΔΙΟ_Δ='" & tm & "' AND ΗΜΕΡΟΜΗΝΙΑ= DateValue(DDate) & "#"
Σημ. Όλες οι μεταβλητές είναι κανονικά δηλωμένες με τους σωστούς τύπους, ενώ η DDate είναι τύπου string.
Ευχαριστώ.
Απάντηση με παράθεση
  #2  
Παλιά 11-02-20, 19:59
Το avatar του χρήστη Meteora
Συντονιστής
Όνομα: Νίκος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 28-12-2008
Περιοχή: Θεσσαλονίκη
Μηνύματα: 1.085
Προεπιλογή

Καλησπέρα
Παράθεση:
Όλες οι μεταβλητές είναι κανονικά δηλωμένες με τους σωστούς τύπους, ενώ η DDate είναι τύπου string
.
Η ημερομηνία δεν είναι string, αλλά τύπου date. Τι σε απαντάει access όταν ρωτάς -εκεί στο Immediate παράθυρο
Κώδικας:
Format(DDate, "dd/mm/yyyy")
;

Εδώ να εστιάσεις την προσοχή σου.
Απάντηση με παράθεση
  #3  
Παλιά 11-02-20, 20:12
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.066
Προεπιλογή

Καλησπέρα σε όλους!

Δημήτρη στην SQL, η ημερομηνία σ' αυτή τη μορφή: "d/m/yyyy" δεν αναγνωρίζεται σωστά.

Δοκίμασε:

Κώδικας:
sql = "SELECT * FROM ΠΙΝΑΚΑ" _
        & " WHERE ΠΕΔΙΟ_Α= '" & cntro & "' AND" _
        & " ΠΕΔΙΟ_Β='" & kdkos & "' AND ΠΕΔΙΟ_Γ='" & eds & "' AND" _
        & " ΠΕΔΙΟ_Δ='" & tm & "' AND ΗΜΕΡΟΜΗΝΙΑ= #" & Format(DDate, "m\/d\/yyyy") & "#"
Καλή συνέχεια!

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών σε VB.Net, Access, Excel, Outlook, Word

Τελευταία επεξεργασία από το χρήστη Tasos : 11-02-20 στις 20:30.
Απάντηση με παράθεση
  #4  
Παλιά 11-02-20, 23:35
Όνομα: Δημητρης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 29-07-2015
Μηνύματα: 26
Προεπιλογή

Σας ευχαριστώ για τις απαντήσεις σας. Το πρόβλημα λύθηκε μετατρέποντας την ημερομηνία στην μορφή yyyy/mm/dd., δηλαδή
Format (DateValue(DDate), "yyyy/mm/dd").
Απάντηση με παράθεση
  #5  
Παλιά 12-02-20, 00:29
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.066
Προεπιλογή

Αγαπητέ Δημήτρη θέλω αρχικά να με συγχωρέσεις για την παρέμβαση μου.

Δεν το συνηθίζω αλλά η ορθότητα της λύσης το επιβάλλει.
.
Η μορφή "m/d/yyyy" ή για περισσότερη συμβατότητα "m\/d\/yyyy" λειτουργεί στην SQL ακριβώς όπως η "yyyy/mm/dd" ή η "yyyy/m/d".

Πές μου αν θέλεις: Γιατί χρησιμοποιείς την DateValue ??

Θα είχε νόημα να τη χρησιμοποιήσεις αν το πεδίο DDate είναι τύπου κειμένου και όχι ημερομηνίας.

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

Τι εννοώ:

Σε υπολογιστή με αγγλική(USA) μορφή ημερομηνίας η DateValue("12/1/2020") θα επιστρέψει 1 Δεκεμβρίου 2020
ενώ υπολογιστή με ελληνική μορφή ημερομηνίας η DateValue("12/1/2020") θα επιστρέψει 12 Ιανουαρίου 2020

Αν πάλι το πεδίο DDate είναι τύπου ημερομηνίας η DateValue δεν χρειάζεται.

Ευχαριστώ

Με εκτίμηση

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών σε VB.Net, Access, Excel, Outlook, Word
Απάντηση με παράθεση
  #6  
Παλιά 13-02-20, 23:24
Όνομα: Δημητρης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 29-07-2015
Μηνύματα: 26
Προεπιλογή

Αγαπητέ Τάσο σε ευχαριστώ και πάλι για το σχόλιο σου. Η DDate είναι τύπου string (κειμένου) και το αναφέρω στο τέλος της αρχικής μου ανάρτησης, για αυτό χρησιμοποίησα την DateValue. Το επίπεδο μου στη VBA είναι μέτριο θα έλεγα, ως αυτοδίδακτος, εάν υπάρχει κάποια ορθότερη λύση από αυτή πολύ ευχαρίστως να τη χρησιμοποιήσω για πάω και ένα βήμα πιο πέρα.
Και πάλι ευχαριστώ για βοήθεια σας.
Απάντηση με παράθεση
  #7  
Παλιά 14-02-20, 00:55
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.066
Προεπιλογή

Συγνώμη Δημήτρη. Δεν πρόσεξα ότι η DDate ήταν τύπου κειμένου.

Ωστόσο για περισσότερη συμβατότητα ειδικά αν το πρόγραμμα μας πρόκειται να τρέξει σε άγνωστο υπολογιστικό περιβάλλον όσον αφορά τη μετατροπή της συμβολοσειράς DDate και αφού γνωρίζουμε ότι η μορφή ημερομηνίας του πεδίου DDate είναι "d/M/yyyy" ή dd/MM/yyyy", είναι προτιμότερο να χρησιμοποιήσουμε μια συνάρτηση φτιαγμένη στα μέτρα μας.

Παράδειγμα:

Κώδικας:
Private Function ConvertToSQLDate(DateString As Variant) As String
    Dim DateParts() As String
    If InStr(1, DateString, "/") = 0 Then
        ConvertToSQLDate = "IS NULL"
        Exit Function
    End If
    DateParts = Split(DateString, "/")
    ConvertToSQLDate = "= #" & DateParts(1) & "\/" & DateParts(0) & "\/" & DateParts(2) & "#"
'    Debug.Print ConvertToSQLDate
End Function

'Χρήση της συνάρτησης:

Dim strSQL As String
strSQL = "SELECT * FROM ΠΙΝΑΚΑ" _
        & " WHERE ΠΕΔΙΟ_Α= '" & cntro & "' AND" _
        & " ΠΕΔΙΟ_Β='" & kdkos & "' AND ΠΕΔΙΟ_Γ='" & eds & "' AND" _
        & " ΠΕΔΙΟ_Δ='" & tm & "' AND ΗΜΕΡΟΜΗΝΙΑ " & ConvertToSQLDate(dDate)
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών σε VB.Net, Access, Excel, Outlook, Word
Απάντηση με παράθεση
  #8  
Παλιά 15-02-20, 20:09
Όνομα: Δημητρης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 29-07-2015
Μηνύματα: 26
Προεπιλογή

Ευχαριστώ Τάσο για τη χρήσιμη παρατήρησή σου. Θα κάνω τη σχετική αλλαγή.
Απάντηση με παράθεση
  #9  
Παλιά 15-02-20, 20:26
Όνομα: Δημητρης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 29-07-2015
Μηνύματα: 26
Προεπιλογή

Αγαπητέ Τάσο έκανα την αλλαγή που πρότεινες αλλά με μία μικρή τροποποίηση γιατί μου έδινε Runtime error 3075. Άλλαξα το :
ConvertToSQLDate = "= #" & DateParts(1) & "/" & DateParts(0) & "/" & DateParts(2) & "#"
Με την παραπάνω αλλαγή τρέχει κανονικά.
Ευχαριστώ.
Απάντηση με παράθεση
  #10  
Παλιά 15-02-20, 23:31
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2010, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.066
Προεπιλογή

Να είσαι καλά Δημήτρη μου!
Το σφάλμα 3075 προκαλείται όταν η μεταβλητή strSQL χρησιμοποιηθεί για φιλτράρισμα φόρμας ή έκθεσης. Έπρεπε να το διευκρινίσω.

Αν η strSQL με τα διαχωριστικά "\/" χρησιμοποιηθεί για ερώτημα θα λειτουργήσει κανονικά. Το έχω κάνει πάρα πολλές φορές.

Καλή συνέχεια!
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών σε VB.Net, Access, Excel, Outlook, Word
Απάντηση με παράθεση
Απάντηση στο θέμα

Εργαλεία Θεμάτων
Τρόποι εμφάνισης

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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[ Ερωτήματα ] πρόβλημα σε ερώτημα blxnikos Access - Ερωτήσεις / Απαντήσεις 0 10-01-20 16:08
Πρόβλημα με ερώτημα mikekal1oo Access - Ερωτήσεις / Απαντήσεις 4 30-03-16 19:19
[ Εκθέσεις ] Πρόβλημα στο άνοιγμα έκθεσης με κριτήριο την ημερομηνία ΤΙΜΟΣ Access - Ερωτήσεις / Απαντήσεις 3 10-11-15 09:17
[ Εκθέσεις ] Πρόβλημα με συνάρτηση format και ημερομηνία. George Thassos Access - Ερωτήσεις / Απαντήσεις 5 18-07-15 14:41
Πρόβλημα σε ερώτημα! naxos Access - Ερωτήσεις / Απαντήσεις 2 11-10-12 14:27


Η ώρα είναι 21:38.