Πράξεις μεταξύ διαφορετικών εγγραφών

Συζητήσεις για την τοπική βάση δεδομένων Access της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
elio
Δημοσιεύσεις: 4
Εγγραφή: 25 Μάιος 2009 20:58

Πράξεις μεταξύ διαφορετικών εγγραφών

Δημοσίευση από elio » 25 Μάιος 2009 21:18

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

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

Δεν ξέρω πώς να υπολογίσω την απόσταση ανάμεσα σε δύο αθλητές, δηλ την κόκκινη στήλη

Εικόνα
Αν μπορεί κάποιος να βοηθήσει θα του ήμουν υπόχρεος

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πράξεις μεταξύ διαφορετικών εγγραφών

Δημοσίευση από dva_dev » 26 Μάιος 2009 00:31

Δοκίμασε στο report σου να βάλεις ένα ακόμα πεδίο με controlsource "=GetDiff([best])" (αν το πεδίο με την καλύτερη προσπάθεια ονομάζεται "best")
Στον κώδικα του report πρέπει ακόμα να βάλεις τον ακόλουθο κώδικα:

Κώδικας: Επιλογή όλων

Option Compare Database
Option Explicit

Dim haveOldValue As Boolean
Dim oldValue As Double
Dim diff As Double

Private Sub Report_Open(Cancel As Integer)
    haveOldValue = False
End Sub

Private Function GetDiff(ByVal thisValue As Double) As Double
    If (haveOldValue) Then
        GetDiff = oldValue - thisValue
    Else
        haveOldValue = True
        GetDiff = 0
    End If
    oldValue = thisValue
End Function

elio
Δημοσιεύσεις: 4
Εγγραφή: 25 Μάιος 2009 20:58

Πράξεις μεταξύ διαφορετικών εγγραφών

Δημοσίευση από elio » 26 Μάιος 2009 10:36

Ευχαριστώ πολύ!
Έπαιξε τέλεια στην αναφορά.

Δοκίμασα να το βάλω σε module, και να το τρέχω από ερώτημα. (κάνοντας public τη συνάρτηση GetDiff()
Την πρώτη φορά που τρέχω το ερώτημα, μου βγαίνει σωστό, αλλά αν κάνω scroll με το ποντίκι αλλάζει η τιμή διαφοράς στην πρώτη εγγραφή. Τα υπόλοιπα παραμένουν σωστά.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πράξεις μεταξύ διαφορετικών εγγραφών

Δημοσίευση από dva_dev » 26 Μάιος 2009 14:05

Τα queries χρειάζονται διαφορετική προσέγγιση αφού δεν έχουν events για να πιάσεις και να βάλεις αντίστοιχο κώδικα.

Το πιο γρήγορο που μπορείς να αλλάξεις για να παίζει σε queries είναι κάτι τέτοιο

Κώδικας: Επιλογή όλων

Option Compare Database
Option Explicit

Dim oldValue As Double

Public Function GetDiff(ByVal thisValue As Double) As Double
    If (oldValue > thisValue) Then
        GetDiff = oldValue - thisValue
    Else
        GetDiff = 0
    End If
    oldValue = thisValue
End Function

elio
Δημοσιεύσεις: 4
Εγγραφή: 25 Μάιος 2009 20:58

Πράξεις μεταξύ διαφορετικών εγγραφών

Δημοσίευση από elio » 28 Μάιος 2009 09:26

και πάλι ευχαριστώ!

elio
Δημοσιεύσεις: 4
Εγγραφή: 25 Μάιος 2009 20:58

Πράξεις μεταξύ διαφορετικών εγγραφών

Δημοσίευση από elio » 25 Ιουν 2009 17:09

επανέρχομαι με κάτι διαφορετικό.
Στα αγωνίσματα δρόμου (όπως πχ στα 800 μέτρα) για να μπορέσω να χρησιμοποιήσω και εκατοστά δευτερολέπτου, πολλαπλασιάζω τα λεπτά επί 60 επί 100, τα δευτερόλεπτα επί 100 και αυτά τα γινόμενα τα προσθέτω με τα εκατοστά για να μπορέσω να κάνω την ταξινόμηση. Στη συνέχεια ακολουθώ την αντίστροφη διαδικασία για να δείξω τη διαφορά από τον πρώτο.
Θέλω το ίδιο για διαφορά από τον προηγούμενο, αλλά δυστυχώς δεν γίνεται τίποτα.
Παραθέτω τον κώδικα.

Κώδικας: Επιλογή όλων

Option Compare Database
Option Explicit

Dim oldValue As Double
Public Function GetDiff(ByVal thisValue As Double) As Double

    If &#40;oldValue < thisValue&#41; Then
        GetDiff = thisValue - oldValue
    Else
        GetDiff = 0
    End If
    oldValue = thisValue
End Function
Private Function GetDH&#40;&#41; As Double
GetDH = Int&#40;GetDiff / &#40;100 * 60 * 60&#41;&#41;
End Function
Private Function GetDM&#40;&#41; As Double
GetDM = Int&#40;&#40;GetDiff - GetDH * 100 * 60 * 60&#41; / &#40;100 * 60&#41;&#41;
End Function
Private Function GetDS&#40;&#41; As Double
GetDS = Int&#40;&#40;GetDiff - GetDH * 100 * 60 * 60 - GetDM * 100 * 60&#41; / 100&#41;
End Function
Private Function GetDC&#40;&#41; As Double
GetDC = GetDiff - GetDH * 100 * 60 * 60 - GetDM * 100 * 60 - GetDS * 100
End Function
Δοκίμασα να τα βάλω όλα σ' ένα function αλλά πάλι τίποτα

Κώδικας: Επιλογή όλων

Option Compare Database
Option Explicit

Dim oldValue As Double
Dim GetDiff As Double
Dim GetDH As Double
Dim GetDM As Double
Dim GetDS As Double
Dim GetDC As Double
Public Function Diff&#40;ByVal thisValue As Double&#41;
    If &#40;oldValue < thisValue&#41; Then
        GetDiff = thisValue - oldValue
    Else
        GetDiff = 0
    End If
    oldValue = thisValue
GetDH = Int&#40;GetDiff / &#40;100 * 60 * 60&#41;&#41;
GetDM = Int&#40;&#40;GetDiff - GetDH * 100 * 60 * 60&#41; / &#40;100 * 60&#41;&#41;
GetDS = Int&#40;&#40;GetDiff - GetDH * 100 * 60 * 60 - GetDM * 100 * 60&#41; / 100&#41;
GetDC = GetDiff - GetDH * 100 * 60 * 60 - GetDM * 100 * 60 - GetDS * 100
Diff = GetDH & "&#58;" & GetDM & "&#58;" & GetDS & "&#58;" & GetDC
End Function
Κάθε βοήθεια δεκτή.

Απάντηση

Επιστροφή στο “MS Access”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες