Καλημέρα σε όλους!
Γιώργο, ένα κοινό ερώτημα επιλογής, μπορεί να επεξεργαστεί κριτήρια όπως
[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 να περάσουμε τις παραμέτρους προγραμματιστικά.
Φιλικά
Τάσος