Εμφάνιση ενός μόνο μηνύματος
  #5  
Παλιά 29-11-10, 15:23
Το avatar του χρήστη nisgia
nisgia Ο χρήστης nisgia δεν είναι συνδεδεμένος
Super Moderator
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 12-10-2009
Περιοχή: Ηγουμενίτσα
Μηνύματα: 161
Προεπιλογή

Καλησπέρα guys!

Η προσωπική μου γνώμη είναι πως αντί για αναφορές σε χειριστήρια φόρμας, πιο αξιόπιστη μέθοδος
χρήσης δυναμικών παραμέτρων σε ερωτήματα είναι η χρήση προσαρμοσμένων συναρτήσεων.

Στην περίπτωσή σου λοιπόν φίλε Μιχάλη, θα μπορούσαμε να διατηρούμε σε μια μονάδα κώδικα τα εξής:
Κώδικας:
Option Compare Database
Option Explicit

Private mdtmDateFrom As Date
Private mdtmDateTo As Date

Function DateFrom(Optional dtmDate As Date = 0) As Date
    If dtmDate > 0 Then mdtmDateFrom = dtmDate
    DateFrom = mdtmDateFrom
End Function

Function DateTo(Optional dtmDate As Date = 0) As Date
    If dtmDate > 0 Then mdtmDateTo = dtmDate
    DateTo = mdtmDateTo
End Function
Ενώ στη λειτουργική μονάδα κώδικα της φόρμας "energeies" τις παρακάτω εκφράσεις:
Κώδικας:
Private Sub Form_Load()
    txt_box_apo_AfterUpdate
    txt_box_ews_AfterUpdate
End Sub

Private Sub txt_box_apo_AfterUpdate()
    DateFrom Nz(Me.txt_box_apo, 0)
End Sub

Private Sub txt_box_ews_AfterUpdate()
    DateTo Nz(Me.txt_box_ews, 0)
End Sub
Έτσι, το ερώτημα "qry2" πλέον υλοποιείται με το παρακάτω SQL κείμενο:
Κώδικας:
SELECT qry1.customer_code, qry1.surname, qry1.name1, qry1.number1, 
status_energeiwn.action_code, activity_codes.activity_name, status_energeiwn.action_date
FROM activity_codes INNER JOIN (qry1 INNER JOIN status_energeiwn 
ON qry1.number1=status_energeiwn.ypothesi_id) 
ON activity_codes.activity_code=status_energeiwn.action_code
WHERE (((status_energeiwn.action_date) Between DateFrom() And DateTo()));
Το πλεονέκτημα είναι πως οι συναρτήσεις DateFrom() και DateTo() είναι προσβάσιμες από οποιοδήποτε σημείο της εφαρμογής
ενώ οι μεταβλητές επιπέδου μονάδας mdtmDateFrom και mdtmDateTo διατηρούν τις τελευταίες επιλογές μας.
Έτσι οι παράμετροι στα ερωτήματα θα έχουν πάντα μια τιμή ημερομηνίας, ακόμη κι αν αυτή είναι μηδενική,
χωρίς πια να μας απασχολεί αν είναι ανοιχτή η φόρμα που την έθεσε ή όχι.

Επίσης, για τη συνένωση των τιμών ενός πεδίου, θα μπορούσες να χρησιμοποιήσεις και τη μέθοδο
GetString() του αντικειμένου ADODB.Recordset.

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

Φιλικά, Γιάννης.
Συνημμένα Αρχεία
Τύπος Αρχείου: zip FunctionsInParameters.zip (40,9 KB, 22 εμφανίσεις)
__________________
Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...!
-----------------------------------------------
Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης.
Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά!
Απάντηση με παράθεση