Προς το περιεχόμενο

Απορία σε sql ερωτημα για access


jamespr

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σε όλους. Θα ήθελα τη βοήθειά σας για ένα ερώτημα.

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

Private Sub comboBrand4_AfterUpdate()

Dim db As Database, q As QueryDef

Set db = Application.CurrentDb()

Set q = db.QueryDefs("ΕΥΡΕΣΗ ΜΕ ΕΠΙΛΟΓΕΣ")

q.SQL = "SELECT * FROM DATA WHERE [ΕΙΔΟΣ] = '" & comboBrand & "' AND [ΚΑΤΑΘΕΣΗ] = '" & comboBrand2 & "' AND [ΗΜΕΡΟΜΗΝΙΑ ΚΑΤΑΘΕΣΗΣ] = Between " & comboBrand3 & " And " & comboBrand4 & ""

 

End Sub

 

Private Sub comboBrand4_BeforeUpdate(Cancel As Integer)

 

End Sub

Αυτό έχει πρόβλημα γιατί το ερώτημα στο Between θέλει να γράφει Between #ημερομηνια1# and ημερομηνια2# αλλά δεν μπορώ να τα καταφέρω.

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

Παρακαλώ κάποια βοήθεια;;;

Ευχαριστώ πολύ για το χρόνο σας

Δημοσ.

Dεν νομίζω ότ χρειάζεται το = πριν το between μάλλον δημιουργεί προβλήματα. Το comboBrand3/4 επιστρέφει την ημερομηνία σας string ή σαν αριθμό αν την επιστρέφει σαν string τότε αλλάζοντας το παραπάνω ως "Between #" & comboBrand3 & "# And #" & comboBrand4 & "#" θα πρέπει να δουλέψει.

Δημοσ.

Ανάλογα με τις ρυθμίσεις στα Regional Settings του σύστήματος υπάρχει μια πιθανότητα η ημερομηνία να σου έρχεται μύλος! Δοκίμασε να κάνεις enforce το format της ημερομηνίας σε dd/mm/yyyy προκειμένου να αποφύγεις να στο μετατρέψει σε mm/dd/yyyy.

 

Την έχω πατήσει γι'αυτό το λεω ...

Δημοσ.

το ίσον (=) νομίζω χρειάζεται. έβαλα τη λύση αλλά μου βγάζει πάλι λάθος. Την ημερομηνία την έχω ρυθμίσει να τη δέχεται ως dd/mm/yyyy το θέμα είναι ότι στο ερώτημα δεν μπορώ να βάλω να γράφει π.χ. Between #11/12/2000# And #10/01/2010# χωρίς αυτάκια και με τη δίεση.

Σας ευχαριστώ πολύ αλλά ακόμα δε βρήκα λύση.

Τι κάνω άραγε λάθος

Δημοσ.
το ίσον (=) νομίζω χρειάζεται. έβαλα τη λύση αλλά μου βγάζει πάλι λάθος. Την ημερομηνία την έχω ρυθμίσει να τη δέχεται ως dd/mm/yyyy το θέμα είναι ότι στο ερώτημα δεν μπορώ να βάλω να γράφει π.χ. Between #11/12/2000# And #10/01/2010# χωρίς αυτάκια και με τη δίεση.

Σας ευχαριστώ πολύ αλλά ακόμα δε βρήκα λύση.

Τι κάνω άραγε λάθος

 

Για να το καταλάβεις ο τρόπος είναι πολύ απλός: Πρωτίστως δες αν το πεδίο στη βάση σου είναι όντως date. Αν όχι, φαντάζομαι οτι το κρατάς σαν Text. Αν όντως είναι text τότε σίγουρα δεν μπορείς να χρησιμοποιήσεις τα #. Οπότε πρέπει να συνδυάσεις τις functions CDate & CStr για να πάρεις το επιθυμητό αποτέλεσμα. Αν είναι date πχ: CDate(CStr(datefield)) ή CDate(Format(blah blah)) ...

Δημοσ.

nspyrou σας ευχαριστώ πάρα πολύ για το χρόνο σας. Στη βάση το έχω σαν date και θέλω απλά να βάζει στο πεδίο αυτό την παράμετρο between [πεδίο1] and [πεδίο2] όπου πεδία 1 και 2 θα τα παίρνει από τη φόρμα μετά από την ενημέρωση αλλά ακόμα μου χτυπάει λάθη. Τι άλλο να διορθώσω;; Έχω απογοητευτεί και αρχίζω να ψάχνω βιβλία να μάθω καλύτερα vba αν τα καταφέρω. Το θέμα είναι μέχρι να μάθω πως θα λύσω αυτό το πρόβλημα

Να περνάτε καλά

Δημοσ.
nspyrou σας ευχαριστώ πάρα πολύ για το χρόνο σας. Στη βάση το έχω σαν date και θέλω απλά να βάζει στο πεδίο αυτό την παράμετρο between [πεδίο1] and [πεδίο2] όπου πεδία 1 και 2 θα τα παίρνει από τη φόρμα μετά από την ενημέρωση αλλά ακόμα μου χτυπάει λάθη. Τι άλλο να διορθώσω;; Έχω απογοητευτεί και αρχίζω να ψάχνω βιβλία να μάθω καλύτερα vba αν τα καταφέρω. Το θέμα είναι μέχρι να μάθω πως θα λύσω αυτό το πρόβλημα

Να περνάτε καλά

 

Επειδή μου έχει κινήσει τη περιέργεια πραγματικά για το τί φταίει έκανα το εξής:

έστησα έναν πίνακα σε Access με αυτή τη σύνθεση:

 

EntryId -> Number (Primary Key),

FirstName -> Text,

LastName -> Text,

BirthDate -> Date/Time (Format => Short Date) [Από τα Field Properties/Καρτέλλα General].

 

Έβαλα 4εις εγγραφές με μερικές ημερομηνίες:

1/1/1999

6/4/2000

3/2/2001

4/4/2002

 

έφτιαξα ένα Query με το εξής Select:

 

>
SELECT Data.*
FROM Data Where BirthDate Between #4/6/2000# and #2/3/2001#;

 

Αυτό το Select φέρνει 2 εγγραφές από τις 4εις που σου ορίζω παραπάνω! Θα προσέξεις το εξής: Οτι για να ορίσεις #Date# μεταξύ των ημερομηνιών στο Select, πρέπει να έχεις αντιστρέψει τον μήνα και την ημέρα. Δηλαδή δεν υπάρχει 4/6 και 2/3 στα data που έχω ορίσει στον πίνακα!! Δηλαδή το Query δέχεται τις ημερομηνίες στα κάγκελα "#" σε format mm/dd/yyyy αντί dd/mm/yyyy παρότι έχουν καταχωρηθεί με dd/mm/yyyy!!! Δοκίμασέ το και θα καταλάβεις πως το κάνει ...

 

Στη περίπτωση της φόρμας σου προσάρμοσε το format με αντιστροφή του μήνα και της ημέρας στις ημερομηνίες.

Δημοσ.

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

Μέχρι τώρα έβαζα σε κάθε ερώτημα στα κριτήρια την έκφραση between [δώσε πρώτη ημερομηνία] and [δώσε δεύτερη ημερομηνία] και αυτό όταν έτρεχα το ερώτημα μου ζητούσε δύο ημερομηνίες. Τις δεχόταν με μορφή dd/mm/yyyy.

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

Και πάλι σας ευχαριστώ

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

Μέχρι τώρα έβαζα σε κάθε ερώτημα στα κριτήρια την έκφραση between [δώσε πρώτη ημερομηνία] and [δώσε δεύτερη ημερομηνία] και αυτό όταν έτρεχα το ερώτημα μου ζητούσε δύο ημερομηνίες. Τις δεχόταν με μορφή dd/mm/yyyy.

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

Και πάλι σας ευχαριστώ

 

Σου έχω ένα παράδειγμα ως επισύναψη. Το μυστικό (?!) είναι οτι οι παράμετροι που ορίζεις στο Query που χρησιμοποιείς για να κάνεις list τις εγγραφές έχουν την αναφορά στο control της φόρμας: πχ.

 

Αν η φόρμα PersonsQueried και το πεδίο "Από ημερομηνία" => FromDate και "Έως ημερομηνία" ToDate τότε στο Query χρησιμοποιείς:

>
SELECT persons.*
FROM persons
WHERE (((persons.DateOfBirth) Between [b][Forms]![PersonsQueried]![FromDate][/b] And [b][Forms]![PersonsQueried]![ToDate][/b]));

 

Στον κώδικα του Button που θα χρησιμοποιήσεις προκειμένου να τρέξεις το Query θα έχεις τα εξής (στο Click Event):

 

>
Private Sub Command14_Click()
On Error GoTo Err_Command14_Click

   Dim stDocName As String

   stDocName = "ShowDataQuery"
   DoCmd.OpenQuery stDocName, acNormal, acEdit '//Εξαρτάται με το πως θες να  
                                                                            '//εμφανίσεις τα δεδομένα σου ...

Exit_Command14_Click:
   Exit Sub

Err_Command14_Click:
   MsgBox Err.Description
   Resume Exit_Command14_Click
   
End Sub

 

To db1.zip λειτουργεί κανονικά μέσω φόρμας κριτηρίων για query (αποσυμπίεσέ το βέβαια πρώτα!). Τρέξε τη φόρμα και βάλε να σου φέρει υποσύνολα μεταξύ των ημερομηνιών του πίνακα Persons.

 

Αν έχεις άλλο πρόβλημα πες μου, να το λύσουμε ... ;)

db1.zip

Δημοσ.

nspyrou δεν έχω λόγια.... από ότι είδα αυτό που κάνατε πρέπει να δουλέψει κανονικά.

 

Θα το παλέψω απόψε και θα σας στείλω τα αποτελέσματα.............

 

και πάλι ευχαριστώ:-D:-D:-D

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

 

Θα το παλέψω απόψε και θα σας στείλω τα αποτελέσματα.............

 

και πάλι ευχαριστώ:-D:-D:-D

 

Σημασία έχει να δουλέψει. Άλλωστε γι'αυτό είμαστε όλοι στο forum, για να βοηθάμε ο ένας τον άλλο ...

 

Παρακαλώ, θα αναμένω τα αποτελέσματα. ;)

  • 3 εβδομάδες αργότερα...
Δημοσ.

κ. nspyrou όλα πήγαν τέλεια και το αποτέλεσμα αυτό που περιμέναμε. Σας ευχαριστώ πάρα πάρα πολύ................

 

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

 

Και πάλι ευχαριστώ πολύ για το χρόνο σας

Δημοσ.
κ. nspyrou όλα πήγαν τέλεια και το αποτέλεσμα αυτό που περιμέναμε. Σας ευχαριστώ πάρα πάρα πολύ................

 

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

 

Και πάλι ευχαριστώ πολύ για το χρόνο σας

 

Χαρά μου, δεν κάνει τίποτα .. να είσαι καλά! :-)

 

Όσων αφορά το δευτερεύον ερώτημά σου, θα σου απαντούσα πως εξαρτάται από το τί είδους αποτελέσματα θέλεις να κρατήσεις και πώς να τα παρουσιάσεις. Άν τίθεται θέμα αποτελεσμάτων σε μορφή εγγραφής, θα μπορούσες να συνδέσεις τον πίνακα που παρουσιάζεις στη φόρμα σου πχ. με έναν δευτερεύον πίνακα και να το παίξεις σε μορφή master/detail. Σε αυτή τη φάση μπορεί και να μή χρειάζεσαι κιόλας δεύτερη φόρμα σε ξεχωριστό παράθυρο παρά μία subform στο ίδιο παράθυρο της master εγγραφής σου. Αυτό βέβαια εξαρτάται από το τί θες να κάνεις και πως να το παρουσιάσεις ...

 

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

Δημοσ.

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

 

Σας ευχαριστώ πάρα πολύ εκ των προτέρων για το χρόνο σας.

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

 

Σας ευχαριστώ πάρα πολύ εκ των προτέρων για το χρόνο σας.

 

Ο απλός τρόπος είναι αυτός που σου παραθέτω στο attachment. H AutoForm με όνομα DataFreeForm ανοίγει από το details button μέσω μιας macro, η οποία ανοίγει την φόρμα σε dialog μορφή (μιας και η κεντρική σου φόρμα ως maximized κάνει overlap το detail παράθυρο), κάνοντας "Where" με το expression:

 

[ΔΕΔΟΜΕΝΑ]![ΑΡΙΘΜΟΣ_ΦΑΚΕΛΟΥ]=[Forms]![ΕΥΡΕΣΗ ΜΕ ΕΠΑΓΓΕΛΜΑ]![ΑΡΙΘΜΟΣ_ΦΑΚΕΛΟΥ]

 

Για κάποιο λόγο τώρα, φέρνει μία εγγραφή στη φόρμα ΔΕΔΟΜΕΝΑ αλλά ούτως ή άλλως είναι ενδεικτικός ο τρόπος λειτουργίας του lookup.

jamespr.zip

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...