Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Φόρμες ] Σύνδεση πλαισίου κειμένου με πολλά πεδία (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/742-sindesi-plaisioy-keimenoy-me-polla-pedia.html)

Free_Ghost 21-09-10 19:04

Σύνδεση πλαισίου κειμένου με πολλά πεδία
 
Φίλοι μου θα ήθελα άλλη μια βοήθεια… (προς το παρόν) :dft001:

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

Π.χ. έχουμε 5 πεδία το α1, α2, α3, α4 ,α5 θα ήθελα εάν γίνεται να ξεκινάει και να βλέπει το α5 , εφόσον έχει στοιχεία να το εμφανίζει και τέρμα, εάν δεν έχει να πάει στο α4 και εκεί να ελέγχει το ίδιο, εάν δεν βρει να πάει στο α3 και ούτω καθεξής..

Γίνεται ? :hmm:

Tasos 21-09-10 20:39

Καλησπέρα Χρήστο!
Δοκίμασε:

Κώδικας:

=Switch([a5] Is Not Null;[a5];[a4] Is Not Null;[a4];[a3] Is Not Null;[a3];[a2] Is Not Null;[a2];[a1] Is Not Null;[a1])

Καλή συνέχεια!


Τάσος

kapetang 21-09-10 21:12

1 Συνημμένο(α)
Καλησπέρα σε όλους

Χρήστο στο αρχείο που επισυνάπτω υπάρχει μια φόρμα που πιστεύω ότι έχει τη λειτουργικότητα που θέλεις.
Έβαλα 5 πεδία αλλά μπορείς να προσθέσεις όσα θέλεις, αντικαθιστώντας στον κώδικα το 5 με τον πραγματικό αριθμό των πεδίων.
Η λειτουργία της φόρμας οφείλεται στον παρακάτω κώδικα.
Κώδικας:

Function SetValue() As Variant
    Dim i As Integer
    SetValue = Null
    For i = 1 To 5
        If Not IsNull(Me.Controls("a" & i)) Then
            SetValue = Me.Controls("a" & i)
            Exit For
        End If
    Next
       
End Function

Private Sub a1_Exit(Cancel As Integer)
    Me!a6 = SetValue
End Sub

Private Sub a2_Exit(Cancel As Integer)
    Me!a6 = SetValue
End Sub

Private Sub a3_Exit(Cancel As Integer)
    Me!a6 = SetValue
End Sub

Private Sub a4_Exit(Cancel As Integer)
    Me!a6 = SetValue
End Sub

Private Sub a5_Exit(Cancel As Integer)
    Me!a6 = SetValue
End Sub

Private Sub Form_Current()
    Me!a6 = SetValue
End Sub

Φιλικά/Γιώργος

kapetang 21-09-10 22:47

Καλησπέρα
Φίλε Τάσο και με πρόλαβες και δεν πρόσεξα την καταπληκτική λύση σου.
Σκεφτόμουνα μια λύση βάζοντας στην προέλευση στοιχείου ελέγχου μια έκφραση iif αλλά ...
Καλό βράδυ
Γιώργος

Free_Ghost 22-09-10 06:22

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

Ευχαριστώ για άλλη μια φορά τα παιδιά που με τις γνώσεις τους στηρίζουν εμάς τους (ατζαμήδες) και το Forum...

kapetang 22-09-10 20:46

1 Συνημμένο(α)
Καλησπέρα σε όλους

Θα ήθελα να μοιραστώ και με τα υπόλοιπα μέλη του φόρουμ κάτι που έμαθα από την ενασχόληση με το πρόβλημα που έθεσε ο Χρήστος, επειδή το θεωρώ χρήσιμο.
Αφορά την αποτίμηση των συναρτήσεων που χρησιμοποιούνται ως προέλευση στοιχείου ελέγχου σε μία φόρμα.
Σύμφωνα με το πρόβλημα η τιμή του πλαισίου κειμένου a6 εξαρτάται από τις τιμές των a1, a2, a3, a4, a5.
Αρχικά στη μονάδα κώδικα της φόρμας δημιούργησα μία συνάρτηση (SetValue), χωρίς ορίσματα (δε χρειάζονταν) και τη χρησιμοποίησα ως προέλευση του πλαισίου κειμένου a6 , πιστεύοντας ότι, όταν γίνονταν αλλαγές στα πλαίσια κειμένου a1, a2, a3, a4, a5, θα γίνονταν αυτόματα (από την access) νέος υπολογισμός της συνάρτησης και το α6 θα εμφάνιζε τη σωστή τιμή.
Δυστυχώς αυτό δε γίνονταν και έτσι αναγκάστηκα να προσθέσω επιπλέον κώδικα σε αντιστοιχία με κάποια συμβάντα.
Τελικά διαπίστωσα ότι συνάρτηση επαναϋπολογίζεται αυτόματα, όταν αλλάζουν τα πλαίσια κειμένου, μόνο όταν αυτά είναι παράμετροί της.
Έτσι έδωσα στη συνάρτηση SetValue την παρακάτω μορφή:
Κώδικας:

Function SetValue(ParamArray x() As Variant) As Variant
    Dim i As Integer
    SetValue = Null
    For i = LBound(x) To UBound(x)
        If Not IsNull(x(i)) Then
            SetValue = x(i)
            Exit For
        End If
    Next
End Function

Στην προέλευση στοιχείου ελέγχου του a6 θα πρέπει να βάλουμε:
=SetValue([a5];[a4];[a3];[a2];[a1]).
Γενικά μπορούμε να χρησιμοποιήσουμε ως παραμέτρους όσα χειριστήρια θέλουμε αρκεί να τα γράψουμε με τη σειρά που επιθυμούμε να ψάχνονται.
Στο αρχείο που επισυνάπτω υπάρχει αυτή η υλοποίηση.

Φιλικά/Γιώργος

Free_Ghost 03-12-10 19:44

Παράθεση:

Αρχική Δημοσίευση από kapetang (Μήνυμα 3699)
Καλησπέρα σε όλους

Θα ήθελα να μοιραστώ και με τα υπόλοιπα μέλη του φόρουμ κάτι που έμαθα από την ενασχόληση με το πρόβλημα που έθεσε ο Χρήστος, επειδή το θεωρώ χρήσιμο.
Αφορά την αποτίμηση των συναρτήσεων που χρησιμοποιούνται ως προέλευση στοιχείου ελέγχου σε μία φόρμα.
Σύμφωνα με το πρόβλημα η τιμή του πλαισίου κειμένου a6 εξαρτάται από τις τιμές των a1, a2, a3, a4, a5.
Αρχικά στη μονάδα κώδικα της φόρμας δημιούργησα μία συνάρτηση (SetValue), χωρίς ορίσματα (δε χρειάζονταν) και τη χρησιμοποίησα ως προέλευση του πλαισίου κειμένου a6 , πιστεύοντας ότι, όταν γίνονταν αλλαγές στα πλαίσια κειμένου a1, a2, a3, a4, a5, θα γίνονταν αυτόματα (από την access) νέος υπολογισμός της συνάρτησης και το α6 θα εμφάνιζε τη σωστή τιμή.
Δυστυχώς αυτό δε γίνονταν και έτσι αναγκάστηκα να προσθέσω επιπλέον κώδικα σε αντιστοιχία με κάποια συμβάντα.
Τελικά διαπίστωσα ότι συνάρτηση επαναϋπολογίζεται αυτόματα, όταν αλλάζουν τα πλαίσια κειμένου, μόνο όταν αυτά είναι παράμετροί της.
Έτσι έδωσα στη συνάρτηση SetValue την παρακάτω μορφή:
Κώδικας:

Function SetValue(ParamArray x() As Variant) As Variant
    Dim i As Integer
    SetValue = Null
    For i = LBound(x) To UBound(x)
        If Not IsNull(x(i)) Then
            SetValue = x(i)
            Exit For
        End If
    Next
End Function

Στην προέλευση στοιχείου ελέγχου του a6 θα πρέπει να βάλουμε:
=SetValue([a5];[a4];[a3];[a2];[a1]).
Γενικά μπορούμε να χρησιμοποιήσουμε ως παραμέτρους όσα χειριστήρια θέλουμε αρκεί να τα γράψουμε με τη σειρά που επιθυμούμε να ψάχνονται.
Στο αρχείο που επισυνάπτω υπάρχει αυτή η υλοποίηση.

Φιλικά/Γιώργος

Όλα αυτά φίλοι μου μπορούμε να τα χρησιμοποιήσουμε όταν υπάρχουν συγκεκριμένα πλαίσια & Πεδία..

Τη γίνεται όμως στην περίπτωση όπου τα στοιχεία τα καταχωρούμε σε μια συνεχόμενη φόρμα, που περιέχει τα παρακάτω πεδία ( [Ημερομηνία] –[ομάδα εργασίας]) ..

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

Υπάρχει κάποια λύση φίλοι μου, η να :topic_closed:

kapetang 04-12-10 11:23

Καλημέρα σ’ όλους

Φίλε Χρήστο δε μπόρεσα να καταλάβω τι ακριβώς θέλεις.
Θα βοηθούσε αν ανέβαζες ένα δείγμα της βάσης σου, με τα στοιχεία που καταχωρείς και αν διευκρίνιζες ποια απ’ αυτά θέλεις να εμφανίζονται στην έκθεση και πως.

Γιώργος

Free_Ghost 04-12-10 12:44

1 Συνημμένο(α)
Λοιπόν φίλε Γιώργο αφού τρέξεις την εφαρμογή και σε κανονική προβολή της φόρμας (minimaze) τρέξε το ερώτημα αξιολόγηση, εκεί εάν είσαι στην πρώτη εγγραφή θα σου εμφανίσει 3 εγγραφές με το ίδιο μητρώο και αυτό ξεκινάει από την υποφόρμα στην καρτέλα τοποθέτηση διότι είναι συνεχείς οι εγγραφές …

Ακριβώς εκεί εγώ θα ήθελα να εμφανίζετε στο ερώτημα η τελευταία εγγραφή (πιο πρόσφατη ημερολογιακά), που είναι γραμμένο το οργανόγραμμα, αυτό φαίνεται και στην Υποφόρμα και μπορείς να το ειδής στον πίνακα Π_Τοποθέτηση…


:pchit: :byebye:

kapetang 04-12-10 14:50

1 Συνημμένο(α)
Καλησπέρα σ’ όλους

Φίλε Χρήστο, για να δείχνει το ερώτημα μία εγγραφή το έκανα συγκεντρωτικό.
Υπέθεσα, επειδή δεν υπάρχει ξεχωριστό πεδίο με τις ημερομηνίες των αλλαγών, ότι ποιο πρόσφατη είναι αυτή με το μεγαλύτερο αριθμό στο πεδίο «Οργανόγραμμα».

Γιώργος

kapetang 04-12-10 15:34

1 Συνημμένο(α)
Καλησπέρα και πάλι

Χρήστο, επειδή δεν υπήρχε στο ερώτημα, νόμισα ότι δεν υπάρχει πεδίο ημερομηνιών και στο πίνακα.
Στη νέα ΒΔ τοποθέτησα το πεδίο ημερομηνιών στο ερώτημα και πρόσθεσα κριτήρια ώστε να εμφανίζει την ποιο πρόσφατη μεταβολή.

Φιλικά/Γιώργος

Free_Ghost 04-12-10 16:32

Δεν μπορώ να καταλάβω πραγματικά γιατί όταν το κάνει άλλος φαίνεται τόσο εύκολο....

Μάλλον για αυτόν τον λόγο δεν αναγνωρίζεται η δουλειά του κατασκευαστή...

Θα λαλήσουν τη έκανε μωρέ τώρα ο Γιώργος έγραψε μια γραμμούλα...

(Select max([Τοποθέτηση]) from Π_Τοποθέτηση as P where P.[Μητρώο]=[Π_Μισθωτοί].[Μητρώο])

Εάν τούς πεις έλα κάντο τότε βρίσκουν άλλες προφάσεις..

Γιώργο συγχαρητήρια και τη να πω Ευχαριστώ για άλλη μια φορά δεν ξέρω θα φανεί αστείο..

Στις κυριότερες δυσκολίες που αντιμετώπισα σε κάποιες κατασκευές μου λύθηκαν μέσα σε αυτό το forum από κάποιους φίλους γνώστες...
:thanks: :drinks: :thanks:

Υ.Γ. Πάντως οι γνώσεις μου έφταναν εώς το Select max αλλά δεν μου έβγαινε, και κατόπιν δεν καταλαβαίνω καθόλου το P where P.[Μητρώο]=[Π_Μισθωτοί].[Μητρώο])

:047:

kapetang 04-12-10 18:16

Καλησπέρα Χρήστο

Μια ποιο απλούστερη λύση είναι η ακόλουθη:
Κώδικας:

SELECT TOP 1 Π_Μισθωτοί.Μητρώο, Π_Μισθωτοί.Επώνυμο, Π_Μισθωτοί.Όνομα, Π_Μισθωτοί.Πατρώνυμο, Π_Μισθωτοί.Ειδικότητα, Π_Τοποθέτηση.Οργανόγραμμα, Π_Τοποθέτηση.Τοποθέτηση
FROM Π_Μισθωτοί INNER JOIN Π_Τοποθέτηση ON Π_Μισθωτοί.Μητρώο = Π_Τοποθέτηση.Μητρώο
WHERE (((Π_Μισθωτοί.Μητρώο)=[Forms]![Φ_Κεντρική]![Κείμενο0]))
ORDER BY Π_Τοποθέτηση.Τοποθέτηση DESC;

Το ερώτημα ταξινομεί τις εγγραφές από τις πρόσφατες προς τις παλιές και επιλέγει την πρώτη.
Επειδή, στην πρώτη λύση, ο πίνακας χρησιμοποιείται δύο φορές στα κριτήρια χρειάζεται στο ένα στιγμιότυπό του να δοθεί ένα ψευδώνυμο. Χρησιμοποίησα το «P» (γίνεται με τη φράση As P).

Φιλικά/Γιώρος


Η ώρα είναι 17:27.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2