| 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 στις 15:47. Αιτία: αλλαγή συνημμένου |
|
#3
| |||
| |||
|
Γιώργο Δούλεψε θαυμάσια. Σ' ευχαριστώ πάρα πολύ. Χρωστάω πολλά. (Τελικά χωρίς VBA δεν μπορείς να κάνεις ούτε βήμα παραπάνω στην Access). Τη σημείωση για τη σχεδίαση την έχω υπόψη μου - τη δουλεύω τώρα. 'Α και κάτι ακόμη..Οκ στο ερώτημα που έκανα όταν ζητάω γράφημα πχ. για ένα έτος μου βγάζει αθροίσματα των 12 μηνών ξεχωριστά. Όταν όμως ζητάω γράφημα πχ για 2 ή περισσότερα έτη μου βγάζει τους 12 μήνες των αντίστοιχων ετών αθροιστικά. Πως πρέπει να συνδυάσω το έτος με το μήνα στο ερώτημα ώστε να μου βγάζει όλους τους μήνες του κάθε έτους σε ένα γράφημα με χρονική συνέχεια; Και πάλι ευχαριστώ (νομίζω οτι θα γίνω φανατικός του forum - αρκεί να μπορώ κι εγώ να προσφέρω κάτι) Δημήτρης |
|
#4
| |||
| |||
|
Καλημέρα Δημήτρη, στην επισυναπτόμενη ΒΔ έχω προσθέσει το ερώτημα qrySumLOSPerMonth και τη φόρμα frmSumLOSPerMonth με προεπιλεγμένη προβολή το συγκεντρωτικό γράφημα. Η φόρμα βασίζεται στο ερώτημα qryLOS. Πιστεύω ότι είναι αυτό που ζητάς Φιλικά/Γιώργος |
|
#5
| |||
| |||
|
Γιώργο Αυτό ήταν. Νάσαι καλά. Με κάποιες μικρές τροποποιήσεις θα γίνει αυτό ακριβώς που φανταζόμουν. Ευχαριστώ και πάλι. Δημήτρης |
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| [Συναρτήσεις] Υπολογισμός ημερών μήνα 30 ημερών | Σπύρος -psp | Excel - Ερωτήσεις / Απαντήσεις | 20 | 16-04-16 19:12 |
| [Συναρτήσεις] Υπολογισμός ημερομηνίας μετά από ορισμένο αριθμό ημερών | costas5 | Excel - Ερωτήσεις / Απαντήσεις | 2 | 20-03-16 19:18 |
| [Συναρτήσεις] Αναφορά συνόλου δεδομένων μέχρι τώρα εργάσιμων ημερών τρέχοντος μήνα | girapas | Excel - Ερωτήσεις / Απαντήσεις | 3 | 13-01-13 20:22 |
| Υπολογισμός ημερών άδειας | xristos0718 | Access - Ερωτήσεις / Απαντήσεις | 3 | 14-01-12 18:14 |
| Υπολογισμός Ημερών πλήν Σ/Κ | Ghost_carp | Access - Ερωτήσεις / Απαντήσεις | 3 | 07-10-09 18:36 |
Η ώρα είναι 04:35.


Αλλαγή σε γραμμικό τρόπο

