freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

Συνάρτηση DlookUp


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » SQL και SQL Servers (RDBMS) » MS Access
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [6 Μηνύματα]       Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
kostas_poul


Μέλος από: 14 Δεκ 2008
Μηνύματα: 11
Περιοχή: Καλαμάτα
View users profile
ΜήνυμαΣτις: 18 Δεκ 2008 19:05    Θέμα: Συνάρτηση DlookUp Απάντηση με παράθεση  Mark this post and the followings unread

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

Το πρόβλημα που μου παρουσιάστηκε αυτή τη φορά το έψαξα, αλλά δε βρήκα κάτι:

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

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

Κάποια ιδέα;Ευχαριστώ πολύ και ελπίζω να μην καταλήξω σαν το βοσκό με το λύκο
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 19 Δεκ 2008 00:00    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

Π.χ. αν έχεις τον πίνακα εργαζόμενοι (table1) με πεδία
id, fname, lname (κωδικός, όνομα, επώνυμο).

και έχεις και έναν άλλο πίνακα μισθοδοσίες (table2) με πεδία
aa, table1ID, ..... (ο Α/Α της εγγραφής, το id του εργαζομένου από τον table1, ... άλλα πεδία)

στη φόρμα σου θα έχεις ένα πεδίο που θα συμπληρώνεις τον κωδικό του εργαζομένου που θέλεις να πληρώσεις. Είναι όμως αδύνατο να θυμάσαι τι κωδικό έχει ο καθένας και για να είσαι σίγουρος ότι δεν έκανες λάθος, μια λύση είναι όταν δίνεις τον κωδικό να συμπληρώνεται αυτόματα στη φόρμα το όνομα και το επώνυμο για να μπορείς να επιβεβαιώσεις ότι δεν έχει γίνει κάποιο λάθος. Εδώ για τα πεδία που θα συμπληρωθούν αυτόματα θα χρησιμοποιήσεις την dlookup.
Στη φόρμα σου στο πεδίο Ονομα εργαζομένου θα βάλεις στο Control Source:
κώδικας:
=DLookUp("fname";"table1";"table1.id=" & [table1ID])


Αν όμως για τους δικούς σου λόγους θέλεις (παρότι δεν χρειάζεται) να αποθηκεύεις και στον table2 το όνομα και το επώνυμο, τότε θα πρέπει να το κάνεις με κώδικα (πρέπει βέβαια και ο table2 να έχει πεδία π.χ. fnameText, lnameText που θα μπούν το όνομα και το επώνυμο).
Θα πάς στο πεδίο table1ID και στο event AfterUpdate θα πεις να φτιάξει κώδικα και θα γράψεις κάτι του στύλ:
κώδικας:
Private Sub table1ID_AfterUpdate()
    '                  Είναι σχεδόν το ίδιο με αυτό που είχες στο Control Source
    Me.fnameText.Value = CStr(DLookup("fname", "table1", "table1.id=" & [table1ID]) & "")
    '                  Το αντίστοιχο για το πεδίο lname
    Me.lnameText.Value = CStr(DLookup("lname", "table1", "table1.id=" & [table1ID]) & "")

End Sub

Σε αυτή την περίπτωση δεν θέλεις συνήθως να μπορεί ο χρήστης να πειράξει τα πεδία όνομα, επώνυμο που έχουν συμπληρωθεί με κώδικα, οπότε προτείνεται να πας στα properties και να κάνεις το Locked=True

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


[edit]
Δες και το http://support.microsoft.com/kb/208786
[/edit]



Database1.zip
 Description:

Download
 Filename:  Database1.zip
 Filesize:  20.01 KB
 Downloaded:  465 Time(s)

kostas_poul


Μέλος από: 14 Δεκ 2008
Μηνύματα: 11
Περιοχή: Καλαμάτα
View users profile
ΜήνυμαΣτις: 20 Δεκ 2008 13:33    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

Όπως είπα, έχω μια φόρμα, όπου το πεδίο Επώνυμο επιλέγεται από τον πίνακα φοιτητές. Στον πίνακα αυτόν, αναφέρεται και το πεδίο Όνομα. Για να μου εμφανίζεται αυτόματα στη φόρμα, που λέγεται καταχώρηση βαθμολογίας, το Όνομα όταν επιλέγω το Επώνυμο από σύνθετο πλαίσιο, στην επιλογή Προέλευση Στοιχείου Ελέγχου του πεδίου Όνομα, έχω εισάγει:

=DLookUp("[Όνομα]";"φοιτητές";"[Επώνυμο]=""" & [Φόρμες]![καταχώρηση βαθμολογίας]![Επώνυμο] & """")

Σύμφωνα με την παραπάνω απάντηση, για να αποθηκεύεται και το εμφανιζόμενο όνομα, έβαλα στην επιλογή Μετά Την Ενημέρωση του πεδίου Επώνυμο τον εξής κώδικα:

Private Sub Επώνυμο_AfterUpdate()

Me.Όνομα.Value = CStr(DLookup("Όνομα", "φοιτητές", "Επώνυμο=" & [Επώνυμο]) & "")

End Sub

Επιλέγοντας αποθήκευση της εγγραφής στον πίνακα προορισμού, δεν αποθηκεύεται το όνομα.

Καμιά ιδέα

Και πάλι ευχαριστώ
[/b]
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 20 Δεκ 2008 14:38    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Μάλλον παρανόησες.
Η θα το κάνεις με το προέλευση στοιχείου ελέγχου βάζοντας
=DLookUp("[Όνομα]";"φοιτητές";"[Επώνυμο]=""" & [Φόρμες]![καταχώρηση βαθμολογίας]![Επώνυμο] & """")

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

Οχι και τα δύο. Δες στο mdb που ανέβασα και σύγκρινε τα fnameText, lnametext στις δύο φόρμες.
kostas_poul


Μέλος από: 14 Δεκ 2008
Μηνύματα: 11
Περιοχή: Καλαμάτα
View users profile
ΜήνυμαΣτις: 21 Δεκ 2008 13:16    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Έψαξα λίγο αυτό που λές με τη βδ που ανέβασες. Κανονικά, θα έπρεπε όταν τρέχω τη φόρμα table 2 with code, και επιλέγω ένα οποιοδήποτε table1ID να μη μου βγάζει στη φόρμα τα αντίστοιχα fnameText, InameText, αλλά με την αποθήκευση εγγραφής να τα αποθηκεύει στον πίνακα table 2. Αυτό όμως δεν το κάνει.Το αφήνει κενό...

Το έχω καταλάβει σωστά;

Ελπίζω να μη σε έχω πρήξει...
kon73
Script Master

Μέλος από: 13 Απρ 2008
Βοηθήματα: 3
Μηνύματα: 224


View users profile Visit posters website
ΜήνυμαΣτις: 22 Δεκ 2008 11:02    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Καλημέρα,

Να προτείνω αν είναι και εγώ μία λύση έτσι παρουσιάζω ένα παράδειγμα.

Έχουμε την φόρμα FrmStudents που βλέπει στον Πίνακα TblStudents με πεδία ID, Lname,Fname όπου ID ο κωδικός, Lname το επίθετο και Fname το Όνομα.

Στην Φόρμα Καταχώρηση Βαθμολογίας που θα βλέπει στο Πίνακα Degrees και έχει διάφορα πεδία αυτός ο πίνακας, έχει και το ID που είναι ο κωδικός του μαθητή.

Έτσι στην φόρμα έχουμε πεδίο Επώνυμο και είναι σύνθετο πλαίσιο το οποίο έχει 2 στήλες ID και Επώνυμο με συνδεδεμένη στήλη και κρυφή την πρώτη στήλη. Το Control Source του σύνθετου πλαισίου θα είναι το ID.

Το ίδιο και στο πεδίο Όνομα που είναι σύνθετο πλαίσιο και αυτό, όπου το Control Source θα είναι το ID. (Δύο πεδία δηλαδή που θα έχουν το ίδιο Control Source) και θα έχει 2 στήλες ID και Όνομα.

Τι γίνεται δηλαδή επειδή και τα δύο πεδία είναι με ID συνδεδεμένα, μόλις αλλάξουμε σε ένα από τα δύο το ID φυσικά αλλάζει και στο άλλο πεδίο. Μόνο που επειδή και τα δύο πεδία είναι σύνθετα πλαίσια το ένα θα δείχνει Επώνυμο και το άλλο Όνομα.

Αν κατάλαβα λοιπόν καλά , αυτό είναι που θέλαμε να πετύχουμε.

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

Φιλικά

Kon73

_________________
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [6 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » SQL και SQL Servers (RDBMS) » MS Access
Τώρα είναι 03 Δεκ 2016 02:19 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos