Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Υπολογισμός ημερών μιας περιόδου ανά μήνα
Γεια σας Λοιπόν ως νέος χρήστης βλέπω φανταστική δουλειά στο forum..Μπράβο σε όλους Ήδη άρχισα να κατανοώ πολλά που δεν ήξερα και μαθαίνω ακόμη περισσότερα. Τα βάσανά μου ξεκινούν σε μια βάση που κάνω για ασθενείς εντατικής Εν ολίγοις το πιο εύκολο που φανταζόμουν κατάντησε πονοκέφαλος βδομάδων. Έχοντας δύο πεδία ("Admission Date" και "Discharge Date" (πίνακας Patients List) προσπαθώ να αποδώσω με ερώτημα προσάρτησης (qryLOS per Month) τις ημέρες των ασθενών ανα ημερολογιακό μήνα σε πίνακα (LOS per Month) για περαιτέρω στατιστικές αναλύσεις και reports. Δυστυχώς μετά την κατασκευή του σχετικού report (κουμπί "View Summary Reports" στην οθόνη εκκίνησης της βάσης) ανακάλυψα οτι τα δεδομένα βγαίνουν λάθος. Θα έπρεπε στο στήλη SUM LOS (Lenth Of Stay)=Διάρκεια νοσηλείας οι ημέρες να αθροίζονται ανά μήνα και όχι ανά ασθενή που είχε εκείνο το μήνα εισαγωγή! Με λίγα λόγια το ερώτημα είναι πως για κάθε εγγραφή στην οποία υπάρχει ημερομηνία start και end βρίσκουμε τις ημέρες ανά μήνα; Παρότι βρήκα πολλά σχετικά στο παρόν forum (αλλά και σε άλλα ξένα) δεν κατόρθωσα να τα ενσωματώσω στη βάση (καθότι σχετικά αρχάριος) Μπορεί κάποιος να βοηθήσει; Η βάση είναι μια τροποποίηση τoυ προτύπου students.accdb (2007) (Τα ονόματα και τα δεδομένα στη βάση είναι τυχαία και υποθετικά). |
#2
| |||
| |||
Καλησπέρα Δημήτρη, καλωσόρισες στην παρέα του φόρουμ. Στην επισυναπτόμενη ΒΔ , θα βρεις μια πρόταση για το ζητούμενο. Συγκεκριμένα έχω προσθέσει στη ΒΔ που ανέβασες: 1) Τη φόρμα frmPatiensPerMonth, στην οποία όταν πιέσουμε το μοναδικό κουμπί της, τρέχει ο παρακάτω κώδικας. Κώδικας: Option Compare Database Option Explicit Private Sub cmdPatiensPerMonth_Click() On Error GoTo Err_Hander Dim strSQL As String, StartMonth As Integer, EndMonth As Integer Dim rs As DAO.Recordset, J As Integer, PatientIn As Date, PatientOut As Date Dim Y1 As Integer, strSQLIns As String, D1 As Date, D2 As Date strSQL = "SELECT Patients.ID,[Admission Date], [Discharge Date]" & _ "FROM Patients ORDER BY [Admission Date];" Set rs = CurrentDb.OpenRecordset(strSQL) If rs.RecordCount > 0 Then CurrentDb.Execute ("Delete * From PatiensPerMonth") strSQL = "Insert Into PatiensPerMonth (ID, Apo, Eos) Values(" rs.MoveFirst Do While Not rs.EOF PatientIn = rs![Admission Date] If IsNull(rs![Discharge Date]) Then PatientOut = Date Else PatientOut = rs![Discharge Date] End If Y1 = Year(PatientIn) StartMonth = Month(PatientIn) EndMonth = StartMonth + DateDiff("m", PatientIn, PatientOut) For J = StartMonth To EndMonth If J <> StartMonth Then D1 = DateSerial(Y1, J, 1) Else D1 = PatientIn End If If PatientOut > DateSerial(Y1, J + 1, 0) Then D2 = DateSerial(Y1, J + 1, 0) Else D2 = PatientOut End If strSQLIns = strSQL & rs!ID & ", #" & Format(D1, "mm/dd/yyyy") & "#, #" & Format(D2, "mm/dd/yyyy") & "#)" CurrentDb.Execute (strSQLIns) Next rs.MoveNext Loop End If Exit_sub: If Not rs Is Nothing Then rs.Close MsgBox "Η διαδικασία ολοκληρώθηκε ..." Exit Sub Err_Hander: MsgBox Err.Description, "Error" Resume Exit_sub End Sub Δηλαδή χωρίζει το διάστημα [PatientIn, PatientOut] σε ένα ή περισσότερα διαστήματα [D1, D2] ανήκοντα στον ίδιο μήνα. Οι εγγραφές μία ή περισσότερες, που προκύπτουν, αποθηκεύονται στον πίνακα PatientsPerMonth. 2) Τον πίνακα PatientsPerMonths που περιέχει το ID της νοσηλείας και τα διαστήματα [Apo, Eos] στα οποία χωρίστηκε το διάστημα νοσηλείας, όταν κατανεμήθηκε σε μήνες. Στηριζόμενοι στον πίνακα, με κατάλληλο ερώτημα, μπορούμε να πάρουμε και τα υπολογιζόμενα πεδία: Etos: year(Apo), Minas:Month(Apo), MeresPerMonth: Eos-Apo+1,κλπ. Έχω τη γνώμη ότι πρέπει να ξαναδείς τη σχεδίαση της ΒΔ. Ένας ασθενής (Patient) μπορεί να νοσηλευτεί πολλές φορές. Συνεπώς θα έπρεπε να υπάρχει: 1) Ένας πίνακας (πχ Patients) με τα ατομικά στοιχεία του ασθενούς (πχ Patient_ID, LastName, FirstName, κλπ). 2) Ένας πίνακας (πχ Nosilies) με τα στοιχεία νοσηλείας (πχ Nosilias_ID, Patient_ID, PatientIn, PatientOut, κλπ). Φιλικά/Γιώργος Τελευταία επεξεργασία από το χρήστη kapetang : 03-08-13 στις 16:47. Αιτία: αλλαγή συνημμένου |
#3
| |||
| |||
Γιώργο Δούλεψε θαυμάσια. Σ' ευχαριστώ πάρα πολύ. Χρωστάω πολλά. (Τελικά χωρίς VBA δεν μπορείς να κάνεις ούτε βήμα παραπάνω στην Access). Τη σημείωση για τη σχεδίαση την έχω υπόψη μου - τη δουλεύω τώρα. 'Α και κάτι ακόμη..Οκ στο ερώτημα που έκανα όταν ζητάω γράφημα πχ. για ένα έτος μου βγάζει αθροίσματα των 12 μηνών ξεχωριστά. Όταν όμως ζητάω γράφημα πχ για 2 ή περισσότερα έτη μου βγάζει τους 12 μήνες των αντίστοιχων ετών αθροιστικά. Πως πρέπει να συνδυάσω το έτος με το μήνα στο ερώτημα ώστε να μου βγάζει όλους τους μήνες του κάθε έτους σε ένα γράφημα με χρονική συνέχεια; Και πάλι ευχαριστώ (νομίζω οτι θα γίνω φανατικός του forum - αρκεί να μπορώ κι εγώ να προσφέρω κάτι) Δημήτρης |
#4
| |||
| |||
Καλημέρα Δημήτρη, στην επισυναπτόμενη ΒΔ έχω προσθέσει το ερώτημα qrySumLOSPerMonth και τη φόρμα frmSumLOSPerMonth με προεπιλεγμένη προβολή το συγκεντρωτικό γράφημα. Η φόρμα βασίζεται στο ερώτημα qryLOS. Πιστεύω ότι είναι αυτό που ζητάς Φιλικά/Γιώργος |
#5
| |||
| |||
Γιώργο Αυτό ήταν. Νάσαι καλά. Με κάποιες μικρές τροποποιήσεις θα γίνει αυτό ακριβώς που φανταζόμουν. Ευχαριστώ και πάλι. Δημήτρης |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[Συναρτήσεις] Υπολογισμός ημερών μήνα 30 ημερών | Σπύρος -psp | Excel - Ερωτήσεις / Απαντήσεις | 20 | 16-04-16 20:12 |
[Συναρτήσεις] Υπολογισμός ημερομηνίας μετά από ορισμένο αριθμό ημερών | costas5 | Excel - Ερωτήσεις / Απαντήσεις | 2 | 20-03-16 20:18 |
[Συναρτήσεις] Αναφορά συνόλου δεδομένων μέχρι τώρα εργάσιμων ημερών τρέχοντος μήνα | girapas | Excel - Ερωτήσεις / Απαντήσεις | 3 | 13-01-13 21:22 |
Υπολογισμός ημερών άδειας | xristos0718 | Access - Ερωτήσεις / Απαντήσεις | 3 | 14-01-12 19:14 |
Υπολογισμός Ημερών πλήν Σ/Κ | Ghost_carp | Access - Ερωτήσεις / Απαντήσεις | 3 | 07-10-09 19:36 |
Η ώρα είναι 14:35.