Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > Δύσκολο πρόβλημα με ημερομηνίες σε ερωτήματα!

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 23-11-10, 06:47
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.037
Προεπιλογή

Καλημέρα Μιχάλη!

  • Μην δίνεις στα πεδία σου ονόματα που είναι δεσμευμένα είτε από την VB είτα από την SQL !!!
    Δεν υφίσταται να χρησιμοποιείς πεδίο με το όνομα "Name"!!
  • Μετονόμασε τα ερωτήματα σου σε πχ. Qry1, Qry2 κτλ.
  • Στο ερώτημα "3" σε κάποια γράφεις:
Conc("card_number";"bank_customer_code";[customer_code];"Q2")

Αυτό το "bank_customer_code" δεν υπάρχει πουθενά για να μπορέσει να το επεξεργαστεί η συνάρτηση Conc() κι έτσι εισπράτεις το μήνυμα λάθους.

Επισης που είναι το card_number και το activity_name ??

Περίγραψε μας τι ακριβώς θέλεις να επιτύχεις. Ίσως να υπάρχει απλότερος τρόπος στη λύση του ζητούμενου σου

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #2  
Παλιά 23-11-10, 10:54
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλημέρα στην παρέα

Μιχάλη, πέρα από τις επισημάνσεις του φίλου Τάσου, θέλω να τονίσω ότι η βάση που ανέβασες δεν μπορεί να λειτουργήσει, επειδή παρουσιάζει σοβαρές αδυναμίες στη σχεδίαση.
Γενικά θα πρέπει:
  1. Τα στοιχεία που θα διαχειρίζεται η βάση δεδομένων, χωρίς να επαναλαμβάνονται (εκτός από τα πεδία σύνδεσης) να οργανωθούν σε κατάλληλους πίνακες.
  2. Να οριστούν οι σχέσεις μεταξύ των πινάκων.
  3. Στα ερωτήματα οι πίνακες που συμμετέχουν να ενώνονται. Όταν δεν ενώνονται κάθε εγγραφή του ενός συνδυάζεται με όλες του άλλου με αποτέλεσμα ένα μεγάλο πλήθος άχρηστων εγγραφών (καρτεσιανό γινόμενο).

Φιλικά/Γιώργος
Απάντηση με παράθεση
  #3  
Παλιά 23-11-10, 11:00
Όνομα: Μιχαλης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 21-05-2010
Μηνύματα: 8
Προεπιλογή

Τάσο συγγνώμη έχεις δικιο,ξεχασα να αλλαξω καποια πεδια πανω στο πειραγμα.

Ανεβασα το σωστο τωρα.

Αν του αφαιρεσεις απο το qry2 στο κριτηριο to Between [Forms]![energeies]![txt_box_apo] And [Forms]![energeies]![txt_box_ews] ,το 3ο ερωτημα δουλευει μια χαρα είτε απο τη φόρμα μέσα είτε από database window τρεχοντάς το.

Γενικά το να βαζεις μέσα σε κριτηρια σε qry txt box controls απο φορμες είναι μια τακτική που χρησιμευει αρκετά για να φιλτράρεις δεδομένα δυναμικά με παρέμβαση από το χρήστη.Σε άλλες περιπτώσεις που τα txt boxes περιεχουν απλα κειμενο τα ερωτήματα δουλευόυν μια χαρά.

Μήπως υπάρχει κάποιος άλλος εναλλακτικός τρόπος - τεχνική για να κανω κατι παρόμοιο?Π.Χ. να βάζω το recordsource του ερωτήματος μέσα σε event φόρμας ή control σε φορμα με vba.Ουσιαστικά όμως είναι ακριβώς το ίδιο με αυτό που έκανα και νομίζω είναι λίγο πιο απλό και πιο εύχρηστο το να δουλεύεις πάνω στο qry designer.

Αυτό βασικά που μου κάνει αυτή η conc συνάρτηση είναι το ακόλουθο.

ΟΝΟΜΑ ΑΡΙΘΜΟΣ
ΜΙΧΑΛΗΣ 1
ΜΙΧΑΛΗΣ 3
ΜΙΧΑΛΗΣ 4
ΤΑΣΟΣ 1
ΤΑΣΟΣ 3
ΤΑΣΟΣ 3

να γίνεται ως εξής:

ΟΝΟΜΑ ΑΡΙΘΜΟΣ
ΜΙΧΑΛΗΣ 1,3,4
ΤΑΣΟΣ 1,3

Πιθανόν να μπορούσε και να γίνει χωρίς custom συναρτηση με vba,και να το έφτιαχνα κάπως μεσα στο qry απευθείας αλλά ίσως να χρειαζόμουν κι αλλο επιπλέον qry για να κάνω ότι κάνει η conc.

Πάντως θα ήταν πολύ χρήσιμο να υπήρχε εδώ συγκεντρωμένη (σε ελληνικό όχι ξένο site) μία συλλογή με χρήσιμα παραδείγματα-τεχνικές που συνηθίζονται να χρησιμοποιούνται σε εφαρμογές access.(κάτι παρόμοιο με τη βάση Solutions9.mdb thw microsoft αλλά με πρισσότερα παραδειγματα.)

Ευχαριστώ για το χρόνο και τη βοήθειά σου Τάσο.
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb βδ1NEW.mdb (292,0 KB, 10 εμφανίσεις)
Απάντηση με παράθεση
  #4  
Παλιά 23-11-10, 11:31
Όνομα: Μιχαλης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 21-05-2010
Μηνύματα: 8
Προεπιλογή

Παιδιά,πρέπει να πω ότι η βάση δεν είναι μόνο αυτή που έχω ανεβάσει.

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

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

Σας ανεβάσω και τη βάση με τις σχέσεις.
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb βδ1NEW.mdb (300,0 KB, 27 εμφανίσεις)
Απάντηση με παράθεση
  #5  
Παλιά 23-11-10, 17:25
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα στην παρέα

Μιχάλη το ερώτημα QR2 είναι παραμετρικό. Έτσι όταν χρησιμοποιούμε τα αντικείμενα του ADO (ή του DAO) για να το ανοίξουμε πρέπει να δώσουμε τις τιμές των παραμέτρων (δεν τις παίρνει αυτόματα από τα χειριστήρια της φόρμας).
Για τη λύση του προβλήματος αντί να δοθούν οι τιμές των παραμέτρων, τις αφαίρεσα (διέγραψα τα κριτήρια) από το QR2 και τις πρόσθεσα στο QR3, που ανοίγει χωρίς να χρησιμοποιηθεί κώδικας ADO ή DAO.
Στη ΒΔ, που επισυνάπτω, το Qry3 ανοίγει κανονικά και μάλλον το πρόβλημα έχει λυθεί.
Οι σχέσεις των πινάκων βοηθούν στη κατανόηση της δομής και της λογικής της βάσης.

Φιλικά/Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb βδ1NEW2.mdb (376,0 KB, 21 εμφανίσεις)
Απάντηση με παράθεση
  #6  
Παλιά 24-11-10, 00:55
Όνομα: Μιχαλης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 21-05-2010
Μηνύματα: 8
Προεπιλογή

Καπετανιε είσαι τεραστιος!

Η λύση ήταν τόσο απλή μπροστα στα μάτια μου,αλλα ξερεις είναι από αυτές τις στιγμες που όσο και να σπας το κεφάλι σου το μυαλό δε ξεθολώνει με τίποτα.Ισα ισα που βάζοντάς το στο qry3 μπορω να προσθέσω πιο ευκολα κι αλλο κριτηριο από οτι αν το βαζα στο 2.

Σε ευχαριστώ.Πάντως βάζοντάς το Between Eval.... στο qry2 δουλευει όπως ειπα και χτες χωρίς να ξέρω ακριβώς τι κάνει η Eval.

Επίσης δεν καταλαβα γιατι στο 2 χρησιμοποιουνται αντικειμενα(ή κωδικας?) το ado h dao ενω στο 3 όχι.Μπορεις να μου το εξηγησεις?
Απάντηση με παράθεση
  #7  
Παλιά 24-11-10, 09:43
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Μιχάλη Καλημέρα

Το ερώτημα Qry3 έχει υπολογιζόμενα πεδία που χρησιμοποιούν τη συνάρτηση Con() η οποία ανοίγει το Qry2 χρησιμοποιώντας αντικείμενα του μοντέλου ADO. Συνεπώς αν το Qry2 έχει κριτήρια (παραμέτρους) θα πρέπει να δώσουμε τις τιμές τους στον κώδικα της συνάρτησης (δεν παίρνονται αυτόματα από την ανοιχτή φόρμα).
Το Qry3 χρησιμοποιείται ως προέλευση εγγραφών στην υποφόρμα, δεν ανοίγει μέσω του μοντέλου αντικειμένων ADO ή DAO και συνεπώς δε χρειάζεται να δοθούν οι τιμές των παραμέτρων (λαμβάνονται αυτόματα από την ανοιχτή φόρμα).
Πάντως αν ανοίξουμε το Qry2 (με ανοιχτή τη φόρμα) από το παράθυρο της βάσης δεδομένων και όχι μέσω του Qry3 θα πάρει τις τιμές των παραμέτρων από τη φόρμα και θα ανοίξει κανονικά.
Η συνάρτηση Eval() αποτιμά μία συμβολοσειρά (string) και επιστρέφει μία αριθμητική τιμή ή μια συμβολοσειρά. Λεπτομέρειες δίνονται στη βοήθεια (στο παράθυρο του κώδικα > πληκτρολογούμε Eval > με τον κέρσορα στο Eval πατούμε το F1).

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

Τελευταία επεξεργασία από το χρήστη kapetang : 29-11-10 στις 15:45. Αιτία: Διόρθωση συνάρτησης από Val() σε Eval()
Απάντηση με παράθεση
  #8  
Παλιά 24-11-10, 10:49
Όνομα: Μιχαλης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 21-05-2010
Μηνύματα: 8
Προεπιλογή

Σε ευχαριστω για τη βοηθεια kapetang,

με αλλα λογια , πριν απο το qry μέσα στο οποιο χρησιμοποιουνται συναρτησεις ενσωματωμενες ή και custom όπως η conc (που χρησιμοποιούν ado,dao) δεν μπορεί να χρησιμοποιηθεί αυτή η μέθοδος με κριτηρια Forms!....txtbox...

Μπορεί να χρησιμοποιηθεί ή μέσα στο ίδιο το qry (στο οποίο χρησιμοποείται η conc) ή μέσα σε επόμενο qry πχ. qry4.Πάντωςσίγουρα όχι πρίν γιατι θα χτυπάει.
Απάντηση με παράθεση
  #9  
Παλιά 29-11-10, 15:23
Το avatar του χρήστη nisgia
Super Moderator
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 12-10-2009
Περιοχή: Ηγουμενίτσα
Μηνύματα: 161
Προεπιλογή

Καλησπέρα 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
Ενώ στη λειτουργική μονάδα κώδικα της φόρμας "energeies" τις παρακάτω εκφράσεις:
Κώδικας:
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
Έτσι, το ερώτημα "qry2" πλέον υλοποιείται με το παρακάτω SQL κείμενο:
Κώδικας:
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()));
Το πλεονέκτημα είναι πως οι συναρτήσεις DateFrom() και DateTo() είναι προσβάσιμες από οποιοδήποτε σημείο της εφαρμογής
ενώ οι μεταβλητές επιπέδου μονάδας mdtmDateFrom και mdtmDateTo διατηρούν τις τελευταίες επιλογές μας.
Έτσι οι παράμετροι στα ερωτήματα θα έχουν πάντα μια τιμή ημερομηνίας, ακόμη κι αν αυτή είναι μηδενική,
χωρίς πια να μας απασχολεί αν είναι ανοιχτή η φόρμα που την έθεσε ή όχι.

Επίσης, για τη συνένωση των τιμών ενός πεδίου, θα μπορούσες να χρησιμοποιήσεις και τη μέθοδο
GetString() του αντικειμένου ADODB.Recordset.

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

Φιλικά, Γιάννης.
Συνημμένα Αρχεία
Τύπος Αρχείου: zip FunctionsInParameters.zip (40,9 KB, 22 εμφανίσεις)
__________________
Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...!
-----------------------------------------------
Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης.
Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά!
Απάντηση με παράθεση
  #10  
Παλιά 29-11-10, 15:28
Όνομα: Μιχαλης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 21-05-2010
Μηνύματα: 8
Προεπιλογή

σε ευχαριστω πολύ!
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός 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


Η ώρα είναι 01:02.