Εμφάνιση ενός μόνο μηνύματος
  #5  
Παλιά 31-08-10, 07:11
Το avatar του χρήστη Tasos
Tasos Ο χρήστης Tasos δεν είναι συνδεδεμένος
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

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

Γιώργο, ένα κοινό ερώτημα επιλογής, μπορεί να επεξεργαστεί κριτήρια όπως [Forms]![frmOpenQry]![txtStart] και δε χρειάζεται παραμέτρους
όπως: PARAMETERS [Δώσε ημερομηνία από] DateTime, [Δώσε ημερομηνία μέχρι] DateTime;

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

Αυτό που μπορούμε να κάνουμε είναι

Αντί για :PARAMETERS [Δώσε ημερομηνία από] DateTime, [Δώσε ημερομηνία μέχρι]

να περάσουμε: PARAMETERS [Forms]![frmOpenQry]![txtStart] DateTime, [Forms]![frmOpenQry]![txtEnd] DateTime;

και στα κριτήρια του ερωτήματος:
....WHERE ((([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΗΜΕΡΟΜΗΝΙΑ) Between [Forms]![frmOpenQry]![txtStart] And [Forms]![frmOpenQry]![txtEnd]))

Με άλλα λόγια αυτό ο παρακάτω κώδικας SQL επιτρέπει την δυναμική παραμετροποίηση σε ερωτήματα τύπου διασταύρωσης:
Κώδικας:
PARAMETERS [Forms]![frmOpenQry]![txtStart] DateTime, [Forms]![frmOpenQry]![txtEnd] DateTime;
TRANSFORM Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS ΠλήθοςΤουΜΗΤΡΩΟ
SELECT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ, Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS [Σύνολο από ΜΗΤΡΩΟ]
FROM [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ]
WHERE ((([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΗΜΕΡΟΜΗΝΙΑ) Between [Forms]![frmOpenQry]![txtStart] And 
[Forms]![frmOpenQry]![txtEnd]))
GROUP BY [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ
PIVOT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΔΙΕΥΘΥΝΣΗ;
Σημείωση: H Access 2010 μας δίνει τη δυνατότητα είτε από μη μακροεντολή είτε από κώδικα VBA να περάσουμε τις παραμέτρους προγραμματιστικά.

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση