tzvangel Δημοσ. 22 Φεβρουαρίου 2010 Δημοσ. 22 Φεβρουαρίου 2010 Παρακαλώ την βοήθεια σας σε κάτι απλό (Microsoft Access) Έχω φτιάξει μια βάση δεδομένων για την εταιρία μου Σε αυτήν την βάση έχω δημιουργήσει 2 πινάκες ο ένας λέγετε πελάτες και ο άλλος συναλλαγές στους οποίους έχω κάνει σύνδεση πινάκων. Στον πινάκα πελάτες έχω ως πεδία όλα τα απαραίτητα στοιχεία του πελάτη (όνομα, επώνυμο, ΑΦΜ κλπ) Ενώ στον πίνακα συναλλαγές έχω τα πεδία (ημερομηνία, όνομα, επώνυμο, ΑΦΜ, χρέωση, πίστωση) Επίσης έχω δημιουργήσει ένα ερώτημα επιλογής που όταν παταω το όνομα του πελάτη αντί να μου βγάλει όλους τους πελάτες μου «φιλτράρει» και εμφανίζει τον πελάτη που του όρισα. Δηλαδή (παράδειγμα) Με ρωτάει «ποιον πελάτη θέλετε;» και του απαντώ «Πέτρος Γεωργόπουλος» και ΟΚ Και το αποτέλεσμα είναι αυτό Ημερομηνία Όνομα επώνυμο χρέωση πίστωση 01/01/10 Πέτρος Γεωργόπουλος 10€ 0€ 02/01/10 Πέτρος Γεωργόπουλος 0€ 5€ Αυτό το ερώτημα το συνδέω με μια έκθεση με όνομα κίνηση πελατών Εδώ όμως είναι και το πρόβλημα μου παρακαλώ ΒΟΗΘΕΙΑ Στην έκθεση, μου εμφανίζει κανονικά την εκτέλεση του ερωτήματος Δηλαδή όπως ακριβώς σας ανέφερα στο παράδειγμα αλλά με στυλ εκτύπωσης Διπλά όμως από το πεδίο πίστωση έχω δημιουργήσει μέσα στην έκθεση και άλλο ένα πεδίο με όνομα μερικό υπόλοιπο. Το ερώτημα μου είναι Τι πρέπει να κάνω έτσι ώστε στο πεδίο μερικό υπόλοιπο σε κάθε γραμμή να μου εμφανίζει το αποτέλεσμα από το μερικό υπόλοιπο του πελάτη εκείνης της γραμμής; Δηλαδή (παράδειγμα 2) Ημερομηνία Όνομα επώνυμο χρέωση πίστωση μερικό υπόλοιπο 01/01/10 Πέτρος Γεωργόπουλος 10€ ο€ 10€ 02/01/10 Πέτρος Γεωργόπουλος 0€ 5€ 5€ Η κανονική πράξη για να βγει το αποτέλεσμα στο μερικό υπόλοιπο είναι (χρέωση – πίστωση)+(προηγούμενο)μερικό υπόλοιπο όμως η access δεν κρατεί την προηγούμενη τιμή στο πεδίο μερικό υπόλοιπο Δηλαδή για να βγει το αποτέλεσμα 5€ στο μερικό υπόλοιπο στης 02/01/10 πρέπει να γίνει η εξής πράξει (0-5)+10=5 Παρακαλώ βρείτε μου την λύση!!! Ευχαριστώ πάρα πολύ για όποιον διάβασε όλο αυτό αλλά σας παρακαλώ βοηθήστε έχω ψάξει και κανείς δεν μου εχει απανταει.
random Δημοσ. 22 Φεβρουαρίου 2010 Δημοσ. 22 Φεβρουαρίου 2010 Για να παίξει σωστά αυτό, πρεπει ο πίνακας "συναλλαγές" να έχει ενα μοναδικό κλειδί που να δείχνει τη σειρά με την οποία καταχωρήθηκαν οι εγγραφές. μερικοί χρησιμοποιούν ενα αριθμητικό κλειδί (σαν το autonumber της access) που αυξανεται αυτοματα κατα 1 καθε φορά που προσθέτεις. αλλοι, προτιμουν ενα πεδίο ημερομηνίας+ωρας (timestamp) με ακρίβεια δευτερολέπτου ή microsecond, εφόσον βέβαια εξασφαλίσουν την παραδοχή οτι δεν υπάρχει περίπτωση να καταχωρηθούν 2 εγγραφές στο ιδιο ακριβώς δευτερόλεπτο microsecond. (άλλο το PK του πίνακα, άλλο το λογικό κλειδί που θελουμε για την εφαρμογή μας.) οταν αποφασίσεις για το κλειδί, φτιάξε ενα νέο query (ερωτημα) Q2, με τον παρακάτω κώδικα (γύρνα σε SQL VIEW οταν ανοιξεις νεο ερώτημα) , και φτιάχνεις το report πάνω σε αυτό (ή για να μην χάσεις τη δουλεια που εκανες ηδη στο 1ο ρεπορτ, αλλαξε την ιδιοτητα Record Source απο table1 ή q1, στο νέο Q2. query based on numeric pk >SELECT ONOMA,EPONYMO,AFM, DATE1, XREOSI, PISTOSI , (SELECT SUM(XREOSI)-SUM(PISTOSI) FROM Synallages T2 WHERE T2.CLIENT_ID=T1.CLIENT_ID AND T2.AA <= T1.AA ) AS PROS_YPOLOIPO FROM Synallages T1 ORDER BY PK; query based on record's datetime > SELECT ONOMA,EPONYMO,AFM, DATE1, XREOSI, PISTOSI , (SELECT SUM(XREOSI)-SUM(PISTOSI) FROM Synallages T2 WHERE T2.CLIENT_ID=T1.CLIENT_ID AND T2.DATE1 <= T1.DATE1 ) AS PROS_YPOLOIPO FROM Synallages T1 ORDER BY DATE1; CLIENT_ID θεωρω εναν μοναδικό κωδικο πελάτη που φανταζομαι έχεις, PK του πινακα "πελάτες". αλλιως χρησιμοποιησε το ΑΦΜ (αν εισαι σιγουρος οτι δεν εχει διπλοεγγραφές και λάθη). ------------------------------------ Σημ: τα πεδία (όνομα, επώνυμο, ΑΦΜ) περιττεύουν απο τον πινακα συναλλαγές. η πληροφορία υπάρχει στον Πελάτες.
tzvangel Δημοσ. 22 Φεβρουαρίου 2010 Μέλος Δημοσ. 22 Φεβρουαρίου 2010 Απλά θέλω να σου πω ΣΥΝΧΑΡΙΤΙΡΙΑ και σε ευχαριστώ πολύ με έσωσες Ειλικρινά είχα ρωτήσει μέχρι και καθηγητή πληροφορικής αλλα δεν…. Εντάξει τι να πω σε ευχαριστώ και πολύ. ;-)
tzvangel Δημοσ. 23 Φεβρουαρίου 2010 Μέλος Δημοσ. 23 Φεβρουαρίου 2010 Για να παίξει σωστά αυτό, πρεπει ο πίνακας "συναλλαγές" να έχει ενα μοναδικό κλειδί που να δείχνει τη σειρά με την οποία καταχωρήθηκαν οι εγγραφές. μερικοί χρησιμοποιούν ενα αριθμητικό κλειδί (σαν το autonumber της access) που αυξανεται αυτοματα κατα 1 καθε φορά που προσθέτεις. αλλοι, προτιμουν ενα πεδίο ημερομηνίας+ωρας (timestamp) με ακρίβεια δευτερολέπτου ή microsecond, εφόσον βέβαια εξασφαλίσουν την παραδοχή οτι δεν υπάρχει περίπτωση να καταχωρηθούν 2 εγγραφές στο ιδιο ακριβώς δευτερόλεπτο microsecond. (άλλο το PK του πίνακα, άλλο το λογικό κλειδί που θελουμε για την εφαρμογή μας.) οταν αποφασίσεις για το κλειδί, φτιάξε ενα νέο query (ερωτημα) Q2, με τον παρακάτω κώδικα (γύρνα σε SQL VIEW οταν ανοιξεις νεο ερώτημα) , και φτιάχνεις το report πάνω σε αυτό (ή για να μην χάσεις τη δουλεια που εκανες ηδη στο 1ο ρεπορτ, αλλαξε την ιδιοτητα Record Source απο table1 ή q1, στο νέο Q2. query based on numeric pk >SELECT ONOMA,EPONYMO,AFM, DATE1, XREOSI, PISTOSI , (SELECT SUM(XREOSI)-SUM(PISTOSI) FROM Synallages T2 WHERE T2.CLIENT_ID=T1.CLIENT_ID AND T2.AA <= T1.AA ) AS PROS_YPOLOIPO FROM Synallages T1 ORDER BY PK; query based on record's datetime > SELECT ONOMA,EPONYMO,AFM, DATE1, XREOSI, PISTOSI , (SELECT SUM(XREOSI)-SUM(PISTOSI) FROM Synallages T2 WHERE T2.CLIENT_ID=T1.CLIENT_ID AND T2.DATE1 <= T1.DATE1 ) AS PROS_YPOLOIPO FROM Synallages T1 ORDER BY DATE1; CLIENT_ID θεωρω εναν μοναδικό κωδικο πελάτη που φανταζομαι έχεις, PK του πινακα "πελάτες". αλλιως χρησιμοποιησε το ΑΦΜ (αν εισαι σιγουρος οτι δεν εχει διπλοεγγραφές και λάθη). ------------------------------------ Σημ: τα πεδία (όνομα, επώνυμο, ΑΦΜ) περιττεύουν απο τον πινακα συναλλαγές. η πληροφορία υπάρχει στον Πελάτες. Καλημερα ολα δουλευουν ρολοι μονο που στην εκθεση οταν οριζω να εμφανισει την κεφαλιδα/υποσελιδο εκθεσης (με δεξι κλικ) και εκει του βαζω ενα πεδιο με προελευση στοιχειων ( =Αθροισμα([ΧΡΕΩΣΗ]) και εκτελω την εκθεση μου μου βγαζει αυτο το μνμ ( Δεν επιτρεπεται ορος GROUP BY με πολλαπλα επιπεδα σε δευτερευον ερωτημα.) τι πρεπει να κανω?
random Δημοσ. 23 Φεβρουαρίου 2010 Δημοσ. 23 Φεβρουαρίου 2010 κλείσε το προηγουμενο query μεσα σε ενα εξωτερικό > SELECT ONOMA,EPONYMO,AFM, DATE1, XREOSI, PISTOSI, PROS_YPOLOIPO from ( SELECT ONOMA,EPONYMO,AFM, DATE1, XREOSI, PISTOSI , (SELECT SUM(XREOSI)-SUM(PISTOSI) FROM Synallages T2 WHERE T2.CLIENT_ID=T1.CLIENT_ID AND T2.AA <= T1.AA ) AS PROS_YPOLOIPO FROM Synallages T1 ) ORDER BY PK; ... και αν σκοπευεις να ασχοληθείς σοβαρά με προγραμματισμό, μια σύσταση: πέτα το Ελληνικό Office + Access στη θάλασσα ΤΩΡΑ! αν βαλεις στο γκουγλ αυτό: "Δεν επιτρεπεται ορος GROUP BY με πολλαπλα επιπεδα σε δευτερευον ερωτημα", βρίσκεις μόνο το δικό σου ερώτημα. ενώ αν έβαζες αυτό: "Multi level GROUP BY clause is not allowed in a subquery", θα έβρισκες 35 αποτελέσματα.
tzvangel Δημοσ. 25 Φεβρουαρίου 2010 Μέλος Δημοσ. 25 Φεβρουαρίου 2010 καλημερα σε ευχαριστω για την απαντηση σου δεν σκοπευω να ασχολειθω με προγραμματισμο αλλα απο οτι ξερω η access ειναι βαση δεδομενων... τωρα με μενα σε πληροφορω οτι η access με βολεψει τρελα στην δουλεια μου εχω φτιαξει μια βαση δεδομενων που με καλύπτει πληρως και οταν λεω πληρως βαζω και το κοστος της εφαρμογης που ενας προγραμματιστης ηθελε 1000 ευρω και 100 ευρω το χρονο, ενω τωρα χαλασα μονο 0€!!! σε ευχαριστω..
random Δημοσ. 27 Φεβρουαρίου 2010 Δημοσ. 27 Φεβρουαρίου 2010 παρεξήγηση. δεν εννοώ οτι η Access έχει πρόβλημα. (σε μικρές εφαρμογές τουλάχιστον μια χαρά ειναι.) η Access στα ΕΛΛΗΝΙΚΑ ειναι BIG πρόβλημα. (και γενικότερα win + office) οταν εχεις πρόβλημα με τέτοια θέματα. με το μήνυμα λάθους στα ελληνικά, πολύ δύσκολα θα βρεις βοήθεια. πρέπει να έχει τύχει το ίδιο σε άλλον Ελληνα. ενώ το ίδιο μηνημα αν το εψαχνες στα Αγγλικά, θα έβρισκες πολυ γρήγορα κάποιο tip.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.