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

Καλημέρα Τζίμη!
Βεβαίως!

Κώδικας:
Option Compare Database
Option Explicit

Const strSQL1 As String = "SELECT DEGR.ID, DEGR.DE, DEGR.GR FROM DEGR WHERE DEGR.DE Like '"
Const strSQL2 As String = "' & ""*"""
Const strSQL3 As String = " ORDER BY DEGR.[DE], DEGR.[GR]"


Private MyList As Access.ListBox

''Ο χρόνος απόκρισης της μεταβλητής  "MyList" είναι κατά πολύ μικρότερος από το χρόνο 
'απόκρισης αντικειμένων της φόρμας (πχ. Me.ListDict).

'Αν βάλω τη μεταβλητή μέσα στο   txtSearch_Change()
'θα πρέπει σε κάθε εκτέλεση του συμβάντος να αναζητείται το   Me.ListDict και να φορτωθεί 
'στη μνήμη.

'Για μένα δεν έχει νόημα να την φορτώνω κάθε φορά εκ νέου (όχι ιδιαιτέρα στο παράδειγμα μας
'αλλά σε διαδικασίες με πολλά Loop). 

'Την φορτώνω μόνο μια φορά όταν φορτώνεται η φόρμα στην κορυφή του κώδικα για να είναι 
'προσβάσιμο από όλες τις διαδικασίες που βρίσκονται στην ίδια λειτουργική μονάδα και έτσι 
'κερδίζω το χρόνο διαχείρισης της μεταβλητής.


'Το ίδιο γίνεται και με τις σταθερές  strSQL1, strSQL2, strSQL3 
'Αν τις βάλω στο txtSearch_Change() θα πρέπει κάθε φορά που εκτελείται να φορτώνονται εκ 
'νέου στη μνήμη.


Private Sub Form_Load()
    Set MyList = Me.ListDict
End Sub


Private Sub txtSearch_Change()
    MyList.RowSource = strSQL1 & Me.txtSearch.Text & strSQL2 & strSQL3
    
    'Για να δείς τα αποτελέσματα πρόσθεσε αφαίρεσε την απόστροφο από αυτή την παρακάτω γραμμή
    'Debug.Print strSQL1 & Me.txtSearch.Text & strSQL2 & strSQL3
    'Για να εμφανίσεις το παραπάνω αποτέλεσμα πάτησε τα πλήκτρα CTRL+G
    

End Sub

'RowSource = Προέλευση γραμμής του πλαισίου λίστας.

'Me.txtSearch.Text = Το κείμενο που περιέχεται  στο πεδίο όταν πληκτρολογείται.

'Η ιδιότητα "Text" ενός πεδίου κειμένου είναι διαθέσιμη μόνο όταν το πεδίο έχει την εστίαση 
'(Όταν ο κέρσορας είναι μέσα στο πεδίο).

Έτσι λοιπόν έχουμε:

 'MyList.RowSource = strSQL1 & Me.txtSearch.Text & strSQL2 & strSQL3
 'όπου Me.txtSearch.Text ) = το κείμενο προς αναζήτηση πχ. "Bevor"

'που σημαίνει ορίζουμε την Προέλευση γραμμής του πλαισίου λίστας εκ νέου

'με τη συμβολοσειρά  strSQL1 & Me.txtSearch.Text & strSQL2 & strSQL3

'που αν την μετατρέψουμε σε απλό κείμενο θα μας δώσει:

'SELECT DEGR.ID, DEGR.DE, DEGR.GR FROM DEGR WHERE DEGR.DE Like 'Bevor' & "*" 
'ORDER BY DEGR.[DE], DEGR.[GR]



'Με τη νέα Προέλευση γραμμής που ορίσαμε το πλαίσιο λίστας θα μας εμφανίσει αυτές τις 
'εγγραφές που αρχίζουν με τη συμβολοσειρά Bevor.
Φιλικά

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