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/482-sfalma-sti-synnenosi-kritirion.html)

amy 08-03-10 16:22

σφάλμα στη συννένωση κριτηρίων
 
Εκτελώ τον παρακάτω κώδικα και μου βγάζει λάθος MONO στην συννένωση των κριτηρίων is not Null AND is Null (to με κόκκινο font)...
Δοκίμασα και διάφορους άλλους συνδιασμούς μετά το googlισμα αλλά και πάλι δεν έκανα τίποτα...
οπότε οι έμπειροι ας βάλουν το χεράκι τους...

Κώδικας:

Private Sub cmd19_Click()
    Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "ERGASIES1"
If Me.group1.Value = 1 Then
DoCmd.OpenForm stDocName, acNormal
Else
    If Me.group1.Value = 2 Then
    stLinkCriteria = "DateFinished Is Null"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    Else
        If Me.group1.Value = 3 Then
        stLinkCriteria = "DateFinished Is not Null"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
        Else
            If Me.group1.Value = 4 Then
          stLinkCriteria = "DateFinished Is not Null" And "DatePickedUp Is Null"
            DoCmd.OpenForm stDocName, , , stLinkCriteria
            Else
                if Me.group1.Value = 5 Then
                stLinkCriteria = "[DateFinished]>=" & "#" & Me![Beginning Date] & "#" &  _
                                      "And [DateFinished]<=" & "#" &  Me![Ending Date] & "#"
                DoCmd.OpenForm stDocName, , , stLinkCriteria
                End If
            End If
        End If
    End If
End If
End Sub

Τα πεδία DateFinished και DatePickedUp είναι πεδία Ημερομηνία/Ώρα και το σφάλμα του βγάζει είναι "type mismatch"

Meteora 08-03-10 16:35

Δοκίμασε τη δομή :
stLinkCriteria = "DateFinished Is not Null And DatePickedUp Is Null"

Φιλικά / Νίκος Δ.

Tasos 08-03-10 18:05

Καλησπέρα σε όλους!

Φίλοι μου η χρήση της Choose αποτελεί μια γρήγορη λύση που
μπορεί να χρησιμοποιηθεί είτε στη VBA είτε σε ερώτημα είτε σε υπολογισμένο πεδίο.
Έτσι με τη χρήση της συνάρτησης αυτής, μπορούμε να απλοποιήσουμε τον κώδικα
μας έτσι:

Κώδικας:

Private Sub cmd19_Click()
    Dim stDocName As String, stLinkCriteria As String
    stDocName = "ERGASIES1"
    stLinkCriteria = _
            Choose(Nz(Me.group1, 1), _
            vbNullString, _
            "IsNull([DateFinished])", _
            "Not IsNull([DateFinished])", _
            "Not IsNull([DateFinished]) And isNull([DatePickedUp])", _
            "[DateFinished] Between #" & Me![Beginning Date] & "# And #" & Me![Ending Date] & "#")
    DoCmd.OpenForm stDocName, , , stLinkCriteria
End Sub

Φιλικά

Τάσος

amy 08-03-10 18:06

Παράθεση:

Αρχική Δημοσίευση από Meteora (Μήνυμα 2043)
Δοκίμασε τη δομή :
stLinkCriteria = "DateFinished Is not Null And DatePickedUp Is Null"

Φιλικά / Νίκος Δ.

thanks Νίκο.. αυτό ήταν

amy 08-03-10 18:19

Παράθεση:

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

Φίλοι μου η χρήση της Choose αποτελεί μια γρήγορη λύση που
μπορεί να χρησιμοποιηθεί είτε στη VBA είτε σε ερώτημα είτε σε υπολογισμένο πεδίο.
Έτσι με τη χρήση της συνάρτησης αυτής, μπορούμε να απλοποιήσουμε τον κώδικα
μας έτσι:

Κώδικας:

Private Sub cmd19_Click()
    Dim stDocName As String, stLinkCriteria As String
    stDocName = "ERGASIES1"
    stLinkCriteria = _
            Choose(Nz(Me.group1, 1), _
            vbNullString, _
            "IsNull([DateFinished])", _
            "Not IsNull([DateFinished])", _
            "Not IsNull([DateFinished]) And isNull([DatePickedUp])", _
            "[DateFinished] Between #" & Me![Beginning Date] & "# And #" & Me![Ending Date] & "#")
    DoCmd.OpenForm stDocName, , , stLinkCriteria
End Sub

Φιλικά

Τάσος

Δουλεύει τέλεια!!!
Όχι βέβαια πως αμφέβαλλα, αλλά την έλαβα ως μια αφορμή για να κοιτάξω την choose μπας και καταλάβω πως γίνεται η απλοποίηση
Επίσης ευχαριστώ Τάσο...

amy 09-03-10 16:25

Νέα συννένωση κατά choose
 
Βρε παιδιά προσπάθησα να απλοποιήσω με την choose άλλον ένα κώδικα που είχα, αλλά δεν μου βγάζει σωστά αποτελέσματα (δηλαδή δεν βγάζει καθόλου αποτελέσματα) στις περιπτώσεις που έχω και isNull
Κώδικας:

Private Sub cmd31_Click()
    Dim stDocName As String, stLinkCriteria As String
    stDocName = "ERGASIES2"
    stLinkCriteria = _
            Choose(Nz(Me.group2, 1), _
            "[Rec]=" & "'" & Me![cboMY] & "'", _
            "[Rec]=" & "'" & Me![cboMY] & "'" & "And IsNull([Fin])", _
            "[Fin]=" & "'" & Me![cboMY] & "'", _
            "[Fin]=" & "'" & Me![cboMY] & "'" & "And isNull([Pic])", _
            "[Fin] Between #" & Me![Beginning Date] & "# And #" & Me![Ending Date] & "#" & "And isNull([Pic])", _
            "[Fin] Between #" & Me![Beginning Date] & "# And #" & Me![Ending Date] & "#")
    DoCmd.OpenForm stDocName, , , stLinkCriteria

End Sub

(από πάντα δεν χώνευα τις αποστρόφους, τα εισαγωγικά και τα άλλα σημεία πήξης :-))

Tasos 09-03-10 18:08

Καλησπέρα!

Φίλε μου Ανδρέα, αν σου είναι εύκολο, ανέβασε ένα αρχείο-παράδειγμα για να
μπορέσουμε να δούμε καλύτερα τι συμβαίνει.

Με εκτίμηση

Τάσος

amy 10-03-10 00:28

Νέα συννένωση κατά choose
 
1 Συνημμένο(α)
Τάσο, ανεβάζω την test.mdb όπου έχωσα τα εναπομείναντα προβλήματά μου με την choose...
Συγκεκριμένα στα cmd10 kai 11 για τιμές 2 και 4 του group1 δεν μου εμφανίζονται εγγραφές, ενώ υπάρχουν... Είμαι σίγουρος ότι κάποια πατάτα έχω κάνει στη συννένωση με το κριτήριο isnull... επίσης να διευκρινίσω ότι όλα τα πεδία είναι date/time..

amy 13-03-10 15:20

Νέα περίεργα προβλήματα στα κριτήρια
 
Καλησπέρα σε όλους...
Τελικά παρατηρώ ότι στην βάση που έχω ανεβάσει στο τελευταίο post υπάρχει το εξής περίεργο πρόβλημα... Ακόμα και για τις επιλογές 1 και 3 της ομάδας επιλογών, τα αποτελέσματα δεν είναι σωστά στις περιπτώσεις που βάζω άσχετες ημερομηνίες στα πεδία "από" και "έως"
Και για να γίνω πιό σαφής, όταν ζητάω ημερομηνίες που υπάρχουν στις εγγραφές τότε και το 1 και το 3 δίνει σωστά αποτελέσματα.. αν όμως βάλω ανύπαρκτες ημερομηνίες τότε βγάζει αποτελέσματα ενώ δεν υπάρχουν στην πραγματικότητα... Δηλαδή ενώ με επιλεγμένο το "όλες" ή το "τελειωμένες" και με ορισμό ημερομηνιών πχ από 1/2/2010 έως 28/2/2010 το cmd11 μου δίνει εγγραφές που πράγματι πληρούν τα κριτήρια, αν βάλω όμως από 1/3/2010 έως 13/3/2010 τόττε μου δίνει πάλι καμια πενηνταριά εγγραφές που όμως δεν ανταποκρίνονται στο κριτήριο γιατί στην πραγματικότητα δεν υπάρχει ούτε μία εγγραφή για τον 3ο του 2010... Κάντε καμμια δοκιμή στην πράξη επί του test.zip αν δεν έγινα πλήρως κατανοητός...
Να σημειώσω ότι αν τα κριτήρια τα βάλλω σε source query τότε όλα πάνε ρολόι...
ΥΓ
Για τις περιπτώσεις 2 και 4 να υποθέσω ότι κανένας δεν ασχολήθηκε με ποιον τρόπο θα συννενωθούν τα κριτήρια για να είναι αποδεκτά από την choose?

Tasos 13-03-10 18:47

Αγαπητέ Ανδρέα, καλησπέρα!

Οι ημερομηνίες σε ερωτήματα SQL όπου ανήκουν και τα φίλτρα,
πρέπει να έχουν κάποια συγκεκριμένη μορφή (αμερικάνικη μορφή ημερομηνίας) προκειμένου να αναγνωριστούν σωστά.

Μια τέτοιου είδους μετατροπή γίνεται αυτόματα από την Access όταν δημιουργούμε Ερώτημα ή φίλτρο χειροκίνητα.

Μέσα από τη VBA όμως θα πρέπει να είμαστε συνεπέστατοι σε ορίσματα ημερομηνιών.
Για παράδειγμα, ο ορισμός:

Κώδικας:

"[DateReceived] Between #" & Me![Beginning Date] & "# And #" & Me![Ending Date] & "#"
θα πρέπει να γίνει :
Κώδικας:

"[DateReceived] Between #" & Format(Me![Beginning Date], "m\/d\/yyyy") &
"# And #" & Format(Me![Ending Date], "m\/d\/yyyy") & "#"

ή
Κώδικας:

"[DateReceived] Between #" & Format(Me![Beginning Date], "yyyy\/m\/d") &
 "# And #" & Format(Me![Ending Date], "yyyy\/m\/d") & "#"

Επίσης το κριτήριο Is Null δρα σε πεδία που είναι Null ΟΧΙ σε πεδία που είναι vbNullString ("") .

Έτσι στην περίπτωση σου μάλλον θα πρέπει να χρησιμοποιήσεις κάτι τέτοιο:

Κώδικας:

([Fin] Is Null Or [Fin]="")
Φιλικά

Τάσος

amy 13-03-10 21:14

Νέα περίεργα προβλήματα στα κριτήρια
 
Επίσης καλησπέρα τάσο...
Φυσικά για ακόμα μια φορά έχεις δίκιο, αλλά και γω τι να πω μ' αυτές τις αμερικανιές...
Που να το'ξερα εκεινα τα παλιά καλά χρόνια που ως μαθητής και φοιτητής κάναμε αντιαμερικανικές διαδηλώσεις :sntoup:, να κρατάμε και ένα πανώ "Λευτεριά και Ανεξαρτησία στη VBA" :baaa: ;-)
Επίσης και το Is Null συμπεριφέρεται επιλεκτικά στα πεδία..
Δηλαδή το
Κώδικας:

"[DateReceived] Between #" & Format(Me![Beginning Date], "m\/d\/yyyy") & "# And #" & Format(Me![Ending Date],
 "m\/d\/yyyy") & "#" & "And [DateFinished] Is Null "

δουλεύει, ενώ το
Κώδικας:

"[DateReceived] Between #" & Format(Me![Beginning Date], "m\/d\/yyyy") & "# And #" & Format(Me![Ending Date],
 "m\/d\/yyyy") & "#" & "And [Fin] Is Null "

, που στην ουσία είναι το ίδιο πράγμα, δεν δουλεύει... Φυσικά δεν υπάρχει λόγος να απασχολήσει κανέναν αυτό γιατί για μένα γίνεται η δουλειά και με το DateFinished..
Thanks και καλό σαββατοκύριακο...


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

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


Search Engine Optimization by vBSEO 3.3.2