Έχουμε μια βάση στην Microsoft Access. Αυτή περιλαμβάνει προς το παρών 3 πίνακες.

τον πίνακα Πελάτες με πεδία client_id που είναι πρωτεύουν κλειδί, τον επίθετο, όνομα, σημειώσεις

Τον πίνακα τηλέφωνα με πεδία id , τηλέφωνο, περιγραφή_τηλ

και τον πίνακα e-mail με πεδία id_mail ,e-mail, περιγραφή_mail

Φυσικά τόσο το πεδίο id του πίνακα τηλέφωνα, όσο και το id_mail συνδέονται με το πεδίο client_id του πίνακα

Έχουμε μια φόρμα που η κύρια του φόρμα στηρίζεται στον πίνακα πελάτες και έχει 2 δευτερεύουσες φόρμες που στηρίζονται στον πίνακα τηλέφωνα και e-mail.

Στο τέλος της φόρμας έχουμε ένα textbox που ο χρήστης εισάγει κείμενο για αναζήτηση και όταν αυτό το textbox έχει περιεχόμενο, ενεργοποιούνται ένα combobox και ένα command button. Στο combo box ο χρήστης μπορεί να επιλέξει αν θα κάνει αναζήτηση με βάση το id, μέρος ή ολόκληρο το επίθετο, του ονόματος, των σημειώσεων, του τηλεφώνου ή του e-mail

Τέλος όταν ο χρήστης πατάει το κουμπί θα γίνεται αναζήτηση με βάση το κείμενο που έχει εισάγει ο χρήστης στο textbox, στο αντίστοιχο πεδίο με βάση τι έχει επιλέξει στο combo box.

Έχω ήδη υλοποιήσει τις αναζητήσεις με βάση id, επίθετο, όνομα και σημειώσεις. Έχω κολλήσει στην αναζήτηση με βάση το τηλέφωνο και το e-mail επειδή θα πρέπει να γίνει αναζήτησή με βάση πεδία στις δευτερεύουσες φόρμες.

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

Τώρα θα ρωτήσει κάποιος γιατί το έκανα με ξεχωριστές πίνακες και μπαίνω σε τέτοια φασαρία, γιατί έτσι μπορούν να καταχωρηθούν πολλαπλά τηλ και e-mail ανά πελάτη.

Προκειμένου να έχετε και μια οπτική εικόνα της φόρμας αυτό είναι το screenshoot της.

Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  access.jpg 
Εμφανίσεις:  16 
Μέγεθος:  92,0 KB 
ID: 225066


Και εδώ οι σχέσεις των πινάκων

Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  access relations.jpg 
Εμφανίσεις:  11 
Μέγεθος:  35,5 KB 
ID: 225067


Ευχαριστώ

- - - Updated - - -

Τελικά βρήκα κάποια λύση. Χρησιμοποιώ 2 recordset ένα για τον πίνακα ΤΗΛΕΦΩΝΑ που εκεί γίνεται αναζήτηση του τηλεφώνου και μετά για κάθε εγγραφή που υπάρχει σε αυτό το recordset χρησιμοποιώ το πεδίο id και εμφανίζω τις εγγραφές από το recorset του πίνακα ΠΕΛΑΤΕΣ που έχει το ίδιο ID με τα Id από τον πίνακα ΤΗΛΕΦΩΝΑ που επέστρεψε το ερώτημα.

Αν δεν βρέθηκε καμιά εγγραφή βγαίνει σχετικό μήνυμα, αν έχει βρεθεί 1 εγγραφή πηγαίνει κατευθείαν στην εγγραφή. Αν υπάρχουν περισσότερες από 1 π.χ. 4 εγγραφές που πληρούν τα κριτήρια πάει στην πρώτη εγγραφή βγάζει στον χρήστη μήνυμα ότι βρέθηκαν 3 εγγραφές είναι στην εγγραφή 1 από 3 αν θέλει να πάει στην επόμενη εγγραφή. Αν ο χρήστης πατήσει Ναι πάει στην επόμενη, αν πατήσει όχι τερματίζεται η διαδικασία. Αυτό γίνεται μέχρι ο χρήστης να πατήσει όχι ή να τελειώσουν οι εγγραφές που βρέθηκαν.

Είμαι σίγουρος ότι υπάρχουν ποιο κομψές λύσεις πάντως είναι μια λύση.


Για όποιον πιθανών ενδιαφέρεται ο κώδικας που χρησιμοποίησα είναι ο παρακάτω:

Κώδικας:
Set rs = CurrentDb.OpenRecordset("Select ID, ΤΗΛ From ΠΕΛΑΤΗΣ_ΤΗΛ where ΤΗΛ LIKE ""*" & txt_search.Value & "*""")
Dim rs_pel As DAO.Recordset
Set rs_pel = Me.RecordsetClone
If rs.RecordCount = 0 Then
    a = MsgBox("Δεν υπάρχει πελάτης με αριθμό τηλεφώνου " & txt_search.Value, vbExclamation + vbOKOnly, "Η εγγραφή δεν βρέθηκε")
    rs.Close
    Exit Sub
End If
i = 1
 With rs
      Do Until .EOF
         h = ![ID]
         rs_pel.FindFirst "[id_client]=" & h
         Me.Recordset.Bookmark = rs_pel.Bookmark
         .MoveNext
         If Not .EOF Then
            a = MsgBox("Εγγραφή " & i & " από " & rs.RecordCount & " που συμφωνούν με τα κριτήρια.Εμφάνιση της επόμενης εγγραφής;", vbInformation + vbYesNo, "Βρέθηκαν " & rs.RecordCount & " εγγραφές")
            i = i + 1
         End If
         If a = vbNo Then
            Exit Do
        End If
      Loop
   End With
rs.Close
rs_pel.Close