Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Δομή ημερομηνίας σε SQL πρόταση (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1316-domi-imerominias-se-sql-protasi.html)

gregory_m 20-08-11 20:51

Δομή ημερομηνίας σε SQL πρόταση
 
Καλησπέρα στο φόρουμ.
Η ερώτηση είναι η εξής:

Έχουμε ένα ερώτημα το οποίο παράγει ένα αποτέλεσμα Α΄
πχ: Ημερομηνία Λήξης Κλιμακίου: DateAdd("μ";24;[Ημερομηνία Έναρξης Κλιμακίου])
και μας δίνει το αποτέλεσμα δύο χρόνια μετά.
Εάν αυτό αλλάξει και τα δύο χρόνια γίνουν τρία πως τροποποιούμε αυτό το ερώτημα
ώστε μόνο οι νέες εγγραφές να ενημερώνονται και οι παλιές να μένουν ως έχουν;

Ευχαριστώ.

dimmag 20-08-11 20:59

Νομίζω αρκεί να αλλάξεις το 24=24 μήνες=2 χρόνια σε 36

nasos23 21-08-11 09:10

Καλημέρα Γρηγόρη.
Έστω ότι έχουμε στο Πίνακα1 τις εγγραφές μας.Δηλ. Ονοματεπώνυμο και Ημερομηνία Έναρξης Κλιμακίου.
Εάν θεωρήσουμε ότι απο 01/07/11 αλλάζει το κλιμάκιο για νέες εγγραφές ανά 3 χρόνια τότε στο ερώτημα έχουμε:
Κώδικας:

SELECT Πίνακας1.Ονοματεπώνυμο, Πίνακας1.[Ημερομηνία Έναρξης Κλιμακίου],
IIf([Ημερομηνία Έναρξης Κλιμακίου]<#7/1/2011#,DateAdd("m",24,[Ημερομηνία Έναρξης Κλιμακίου]),
DateAdd("m",36,[Ημερομηνία Έναρξης Κλιμακίου])) AS [Ημερομηνία Λήξης Κλιμακίου]
FROM Πίνακας1;


Meteora 21-08-11 09:19

Καλημέρα

Γιατί φίλοι μου, αυτή η συζήτηση με τα ΜΚ; Είναι κάτι που με διαφεύγει; Αναμένονται αλλαγές;

Με εκτίμηση σε όλους σας

Νίκος Δ.

gregory_m 21-08-11 10:04

Καλημέρα σε όλους
Νάσο ευχαριστώ για την λύση του προβλήματος η οποία και δούλεψε.
Όσον αφορά το θέμα για τα ΜΚ αν και δεν είμαι δημόσιος θα αλλάξει, η αλλαγή κλιμακίου θα γίνεται κάθε τρία χρόνια και όχι δύο.
ΜΕΣΟΠΡΟΘΕΣΜΟ!!!

Meteora 21-08-11 16:35

Επιτρέψτε με ένα σχόλιο.
Αν διαβάσουμε με προσοχή την απάντηση του Νάσου, θα δούμε ότι την ημερομηνία 01/07/2011 την εμφανίζει μέσα στην select του(που είναι μια SQL πρόταση!), ως #7/1/2011#. Αυτό γίνεται διότι ο υπολογιστής με δομή ηη/μμ/εεεε, τις προτάσεις SQL, όταν τις τρέχει αντιστρέφει στην ημερομηνία ημέρες και μήνες (εκτός αν ημέρες>12) και έτσι στην περίπτωσή μας, θα εργαστεί με την 01/07/2011 ! (Έτσι δεν είναι Νάσο;)

Η πρότασή μου είναι να γράψουμε την ημερομηνία ως εξής:

  • Γράφουμε στην πρόταση SQL(*)Format(#01/07/1980#, ‘mm/dd/yyyy') , η οποία θα δουλέψει σωστά σε υπολογιστή με Ευρωπαϊκή δομή ημερομηνίας ηη/μμ/εεεε δηλαδή ο υπολογιστής θα καταλάβει οτι η δοσμένη ημερομηνία αφορά την 1η του μήνα Ιουλίου.
  • Κάνουμε χρήση της Dateserial(2011,7,1) που θα δουλέψει σε οποιοδήποτε υπολογιστή!!!
(*) Και τώρα να σας "μπερδέψω" λίγο. Είμαι σε περιβάλλον σχεδίασης ερωτήματος και σε κάποιο πεδίο θέλω κριτήριο ημερομηνίες μεγαλύτερες από 01/07/2011. Πώς θα το γράψω αυτό το κριτήριο;
Απάντηση: Θα γράψω >Format(#7/1/2011#;'μμ/ηη/αααα') και η SQL δομή στο ερώτημα θα έχει γράψει >Format(#1/7/2011#,'mm/dd/yyyy')!!!!!!!

Συμπέρασμα λοιπόν: Αν γράψεις SQL σε VBA κώδικα τότε γράψε την ημερομηνία όπως πραγματικά είναι δηλ. για την 01/07/2011 γράψε >Format(#1/7/2011#,'mm/dd/yyyy'). Αν πάλι γράφεις σε περιβάλλον ερωτήματος, τότε δούλεψε την ημερομηνία σε περιβάλλον SQL, σαν να γράφεις VBA και άσε την Access να γράφει τα τρελά της στο περιβάλλον σχεδίασης του ερωτήματος.

Αυτά φίλοι μου

Με εκτίμηση
Νίκος Δ.


ΥΣτερολόγιο: Άλλαξα τον τίτλο της αρχικης ανάρτησης, ώστε στο μέλλον οι επισκέπτες και τα μέλη να μπορούν με ευχέρεια να εντοπίζουν βοήθεια σε δομή ημερομηνιών...









Η ώρα είναι 14:09.

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


Search Engine Optimization by vBSEO 3.3.2