| Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
![]() |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
|
#11
| |||
| |||
|
Καλησπέρα στην παρέα Μιχάλη το ερώτημα QR2 είναι παραμετρικό. Έτσι όταν χρησιμοποιούμε τα αντικείμενα του ADO (ή του DAO) για να το ανοίξουμε πρέπει να δώσουμε τις τιμές των παραμέτρων (δεν τις παίρνει αυτόματα από τα χειριστήρια της φόρμας). Για τη λύση του προβλήματος αντί να δοθούν οι τιμές των παραμέτρων, τις αφαίρεσα (διέγραψα τα κριτήρια) από το QR2 και τις πρόσθεσα στο QR3, που ανοίγει χωρίς να χρησιμοποιηθεί κώδικας ADO ή DAO. Στη ΒΔ, που επισυνάπτω, το Qry3 ανοίγει κανονικά και μάλλον το πρόβλημα έχει λυθεί. Οι σχέσεις των πινάκων βοηθούν στη κατανόηση της δομής και της λογικής της βάσης. Φιλικά/Γιώργος |
|
#12
| |||
| |||
|
Καπετανιε είσαι τεραστιος! Η λύση ήταν τόσο απλή μπροστα στα μάτια μου,αλλα ξερεις είναι από αυτές τις στιγμες που όσο και να σπας το κεφάλι σου το μυαλό δε ξεθολώνει με τίποτα.Ισα ισα που βάζοντάς το στο qry3 μπορω να προσθέσω πιο ευκολα κι αλλο κριτηριο από οτι αν το βαζα στο 2. Σε ευχαριστώ.Πάντως βάζοντάς το Between Eval.... στο qry2 δουλευει όπως ειπα και χτες χωρίς να ξέρω ακριβώς τι κάνει η Eval. Επίσης δεν καταλαβα γιατι στο 2 χρησιμοποιουνται αντικειμενα(ή κωδικας?) το ado h dao ενω στο 3 όχι.Μπορεις να μου το εξηγησεις? |
|
#13
| |||
| |||
|
Μιχάλη Καλημέρα Το ερώτημα Qry3 έχει υπολογιζόμενα πεδία που χρησιμοποιούν τη συνάρτηση Con() η οποία ανοίγει το Qry2 χρησιμοποιώντας αντικείμενα του μοντέλου ADO. Συνεπώς αν το Qry2 έχει κριτήρια (παραμέτρους) θα πρέπει να δώσουμε τις τιμές τους στον κώδικα της συνάρτησης (δεν παίρνονται αυτόματα από την ανοιχτή φόρμα). Το Qry3 χρησιμοποιείται ως προέλευση εγγραφών στην υποφόρμα, δεν ανοίγει μέσω του μοντέλου αντικειμένων ADO ή DAO και συνεπώς δε χρειάζεται να δοθούν οι τιμές των παραμέτρων (λαμβάνονται αυτόματα από την ανοιχτή φόρμα). Πάντως αν ανοίξουμε το Qry2 (με ανοιχτή τη φόρμα) από το παράθυρο της βάσης δεδομένων και όχι μέσω του Qry3 θα πάρει τις τιμές των παραμέτρων από τη φόρμα και θα ανοίξει κανονικά. Η συνάρτηση Eval() αποτιμά μία συμβολοσειρά (string) και επιστρέφει μία αριθμητική τιμή ή μια συμβολοσειρά. Λεπτομέρειες δίνονται στη βοήθεια (στο παράθυρο του κώδικα > πληκτρολογούμε Eval > με τον κέρσορα στο Eval πατούμε το F1). Φιλικά/Γιώργος Τελευταία επεξεργασία από το χρήστη kapetang : 29-11-10 στις 15:45. Αιτία: Διόρθωση συνάρτησης από Val() σε Eval() |
|
#14
| |||
| |||
|
Σε ευχαριστω για τη βοηθεια kapetang, με αλλα λογια , πριν απο το qry μέσα στο οποιο χρησιμοποιουνται συναρτησεις ενσωματωμενες ή και custom όπως η conc (που χρησιμοποιούν ado,dao) δεν μπορεί να χρησιμοποιηθεί αυτή η μέθοδος με κριτηρια Forms!....txtbox... Μπορεί να χρησιμοποιηθεί ή μέσα στο ίδιο το qry (στο οποίο χρησιμοποείται η conc) ή μέσα σε επόμενο qry πχ. qry4.Πάντωςσίγουρα όχι πρίν γιατι θα χτυπάει. |
|
#15
| ||||
| ||||
|
Καλησπέρα 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
Κώδικας: 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
Κώδικας: 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())); ενώ οι μεταβλητές επιπέδου μονάδας mdtmDateFrom και mdtmDateTo διατηρούν τις τελευταίες επιλογές μας. Έτσι οι παράμετροι στα ερωτήματα θα έχουν πάντα μια τιμή ημερομηνίας, ακόμη κι αν αυτή είναι μηδενική, χωρίς πια να μας απασχολεί αν είναι ανοιχτή η φόρμα που την έθεσε ή όχι. Επίσης, για τη συνένωση των τιμών ενός πεδίου, θα μπορούσες να χρησιμοποιήσεις και τη μέθοδο GetString() του αντικειμένου ADODB.Recordset. Στο συνημμένο αρχείο που σου επιστρέφω θα βρεις την εφαρμογή όλων των παραπάνω και ελπίζω να σου φανούν χρήσιμα. Φιλικά, Γιάννης.
__________________ Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...! ![]() ----------------------------------------------- Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης. Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά! |
|
#16
| |||
| |||
|
σε ευχαριστω πολύ!
|
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| Πρόβλημα με ημερομηνίες αδειών, ρεπό. | lefterisg | Access - Ερωτήσεις / Απαντήσεις | 0 | 02-12-16 17:53 |
| [Γενικά] Προβλημα με ημερομηνιες | asterix | Excel - Ερωτήσεις / Απαντήσεις | 3 | 03-12-15 11:06 |
| Πρόβλημα με τις ημερομηνίες | Damiyo16 | Access - Ερωτήσεις / Απαντήσεις | 15 | 01-12-10 17:03 |
| Εκθέσεις από ερωτήματα | iondep | Access - Ερωτήσεις / Απαντήσεις | 6 | 04-11-10 16:12 |
| ΑΞΙΟΓΡΑΦΑ - Ένα πάρα πολύ δύσκολο θέμα!! | tzvangel | Access - Ερωτήσεις / Απαντήσεις | 8 | 26-02-10 22:58 |
Η ώρα είναι 19:30.



Αλλαγή σε γραμμικό τρόπο

