Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > Νέα εγγραφή σε ημερομηνία

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 27-11-12, 17:46
Όνομα: ΣΤΑΥΡΟΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 27-10-2012
Μηνύματα: 102
Προεπιλογή Νέα εγγραφή σε ημερομηνία

Παιδιά την καλησπέρα μου.
1)Έχω μια φόρμα apousies και έχει ημερομηνίες από - έως που καταχωρώ τις απουσίες
Η τελική έκθεση όμως πρέπει να βγαίνει μηνιαία. όταν καταχωρώ πχ. μια ασθένεια που περιλαμβάνει 2 μήνες δηλαδή από 18/11/2012 έως 4/12/2012 υπάρχει τρόπος να μου συμπληρώσει το πεδίο έως 30/11/2012 και να κάνει μόνο του μια νέα εγγραφή που να συμπληρώνει το υπόλοιπο δηλ. από 1/12/2012 έως 4/12/2012;
2) Με την πολύτιμη βοήθεια σας έχω φτάσει σε ένα πολύ καλό αποτέλεσμα. Στο ερώτημα της βάσης έχω δοκιμάσει 4 διαφορετικές μεθόδους που μου έχετε υποδείξει αλλά δεν τα κατάφερα να την φτιάξω στην έκθεση, (στο πεδίο τελικές απουσίες).
ευχαριστώ και πάλι για την βοήθεια
Συνημμένα Αρχεία
Τύπος Αρχείου: zip week.zip (134,1 KB, 31 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 28-11-12, 13:29
Όνομα: Κώστας
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-01-2012
Περιοχή: Πειραιάς
Μηνύματα: 181
Προεπιλογή

Καλό μεσημέρι σ' όλο το forum.

Σταύρο,

στην φόρμα 'apousiesF2' , στα πεδία των ημερομηνιών
και στα συμβάντα τους 'After Update', υπάρχει κώδικας
που κάνει αυτό που ζητάς.

Το πρόβλημα είναι, αν είσαι σίγουρος ότι θέλεις
κάτι τέτοιο να συμβαίνει στην βάση σου.
π.χ. σε περίπτωση λάθους ή αστοχίας πληκτρολόγησης
θα έχεις να διορθώσεις μία εγγραφή (update για τέλος του μήνα) και να
να διαγράψεις μία εγγραφή (Insert για αρχή επόμενου έως ημερομηνία επόμενου)
και καλά να το δεις αμέσως, αν το δεις μετά από εύλογο χρονικό διάστημα
το μόνο που σου μένει είναι να ελέγξεις της εγγραφές με καθολικό.

Δεν θέλω να σε "φοβίσω" εσύ ξέρεις. Σκέψου το όμως
πριν χρησιμοποιήσεις τον κώδικα.
Συνημμένα Αρχεία
Τύπος Αρχείου: zip wee - Αντίγραφο.zip (76,0 KB, 18 εμφανίσεις)
Απάντηση με παράθεση
  #3  
Παλιά 28-11-12, 14:59
Όνομα: ΣΤΑΥΡΟΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 27-10-2012
Μηνύματα: 102
Προεπιλογή

Κώστα σε ευχαριστώ πολύ. έκανε αυτό που ήθελα όμως όταν του βάλω ασθένεια 4..5...6 μηνών παρακάμπτει τους ενδιάμεσους μήνες.
Ένα παράδειγμα αν μια κοπέλα πάρει άδεια εγκυμοσύνης καταλαβαίνεις ότι υπερβαίνει κατά πολύ το διάστημα των 2 μηνών. Ύστερα όταν του κάνω ανανέωση στην φόρμα δεν μου δείχνει το αποτέλεσμα για να γίνει ένας γρήγορος έλεγχος αλλά πρέπει να την κλείσω και να την ξανά ανοίξω για να το δω.
Πάντως σε ευχαριστώ που έκαστες και έγραψες έναν τόσο πολύπλοκο κώδικα
Συνημμένα Αρχεία
Τύπος Αρχείου: zip wee.zip (91,4 KB, 4 εμφανίσεις)
Απάντηση με παράθεση
  #4  
Παλιά 28-11-12, 15:40
Όνομα: Κώστας
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-01-2012
Περιοχή: Πειραιάς
Μηνύματα: 181
Προεπιλογή

Σταύρο,

κοίτα την Βάση.
Συνημμένα Αρχεία
Τύπος Αρχείου: zip wee - Αντίγραφο.zip (78,5 KB, 10 εμφανίσεις)
Απάντηση με παράθεση
  #5  
Παλιά 28-11-12, 15:54
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλημέρα στην παρέα

Σταύρο στην ΒΔ που ανέβασες έχω προσθέσει:

1) Τον πίνακα ApousiesPerMonth_p στον οποίο με κατάλληλο κώδικα καταγράφονται τα χρονικά διαστήματα των απουσιών, αλλά έτσι ώστε η αρχή και το τέλος τους να ανήκει στον ίδιο μήνα.

Αντιμετωπίζονται χρονικά διαστήματα πολλών μηνών, αλλά και ετών

Έτσι, όταν θέλεις αποτελέσματα ανά μήνα, αντί να χρησιμοποιείς στα ερωτήματα και στις εκθέσεις τον πίνακα apousies_p θα πρέπει να χρησιμοποιείς τον ApousiesPerMonth_p.

2) Τη φόρμα frmDiastimataAnaMina στην οποία πατώντας το σχετικό κουμπί εκτελείται ο κώδικας ο οποίος δημιουργεί τις κατάλληλες εγγραφές στον πίνακα ApousiesPerMonth_p.

3) Τη λειτουργική μονάδα TomiDiastimaton που περιέχει τον κώδικα που φαίνεται παρακάτω.

Κώδικας:
Option Compare Database
Option Explicit


Public Sub XronikoDiastimaAnaMina(Optional StartDate As Date = #12:00:00 AM#, _
                                    Optional EndDate As Date = #12/31/9998#)

'Χωρίζει ένα χρονικό διάστημα σε τμήματα έτσι ώστε κάθε τμήμα να ανήκει στον ίδιο μήνα.
'Τα διαστήματα [StartDate, EndDate] τα παίρνει από τον πίνακα apousies_p
'και τα αποτελέσματα τα αποθηκεύει στον πίνακα ApousiesPerMonth_p
'====================================================================================


    Dim StartMonth As Date, EndMonth As Date    'ημερομηνίες έναρξης και λήξης του μήνα
    Dim numMonths As Integer, j As Integer      'το πλήθος μηνών του χρονικού διαστήματος
    Dim rs As DAO.Recordset
    Dim strSQL As String
    Dim yr As Integer, mn As Integer
    Dim Tomi As Variant  'Αποθηκεύει την αρχή και το τέλος της τομής ενός μήνα με το διάστημα

    On Error GoTo Err_Hadler
    ' Εγκυρότητα παραμέτρων
    If StartDate > EndDate Then Exit Sub

    'Προσαρμογή άκρων χρονικού διαστήματος για σύμπτωση με την αρχή και το τέλος μήνα
    StartDate = DateSerial(Year(StartDate), Month(StartDate), 1)
    EndDate = DateSerial(Year(EndDate), Month(EndDate) + 1, 0)


    'Διαγραφή των εγγραφών του πίνακα ApousiesPerMonth_p, δημιουργία recordset
    CurrentDb.Execute ("DELETE * FROM ApousiesPerMonth_p")
    strSQL = "SELECT ID_apousies_p, kod_apousies_p, idosapousias_apousies_p, " _
              & "apo_apousies_p, eos_apousies_p FROM apousies_p WHERE " _
              & "apo_apousies_p>=#" & Format(StartDate, "m/d/yyyy") _
              & "# AND eos_apousies_p<= #" & EndDate & "#"
    Set rs = CurrentDb.OpenRecordset(strSQL)

    'Γέμισμα πίνακα ApousiesPerMonth_p
    With rs
        If Not (rs.EOF And rs.BOF) Then
            .MoveFirst
            Do Until .EOF
                numMonths = DateDiff("m", !apo_apousies_p, !eos_apousies_p) + 1
                yr = Year(!apo_apousies_p): mn = Month(!apo_apousies_p)
                For j = 0 To numMonths - 1
                    StartMonth = DateSerial(yr, mn + j, 1)
                    EndMonth = DateSerial(yr, mn + j + 1, 0)
                    Tomi = TomiDiastimatonArray(!apo_apousies_p, !eos_apousies_p, StartMonth, EndMonth)
                    strSQL = "INSERT INTO ApousiesPerMonth_p (ID, kod_apousies_p, " _
                        & "idosapousias_apousies_p, Apo, Eos) values(" & !ID_apousies_p _
                           & ", '" & !kod_apousies_p & "', '" & !idosapousias_apousies_p & "' , #" _
                           & Format(Tomi(1), "m/d/yyyy") & "#, #" & Format(Tomi(2), "m/d/yyyy") & "#)"
                    CurrentDb.Execute strSQL
                Next
                .MoveNext
            Loop
        End If
    End With
Err_Hadler:
    If Err <> 0 Then
        MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
    End If
    On Error Resume Next
    rs.Close: Set rs = Nothing
End Sub


Public Function TomiDiastimatonArray(Start1 As Variant, End1 As Variant, _
                                     Start2 As Variant, End2 As Variant) As Variant()

'Βρίσκει την τομή των διαστημάτων [Start1, End1] και [Start2, End2]
'Επιστρέφειτην αρχή tStart και το τέλος του διαστήματος της τομής [tStart, tEnd]
'==================================================================================
    Dim Tomi(1 To 2) As Variant

    'Αν δεν οριστούν τα διαστήματα
    If IsNull(Start1) Or IsNull(End1) Or IsNull(Start2) Or IsNull(End2) Then
        Tomi(1) = Null: Tomi(2) = Null
        TomiDiastimatonArray = Tomi
        Exit Function
    End If

    'Αν τα όρια των διαστημάτων δεν είναι σωστά επιστρέφει "Λάθος!"
    If Start1 > End1 Or Start2 > End2 Then
        Tomi(1) = "Λάθος!": Tomi(2) = "Λάθος!"
        TomiDiastimatonArray = Tomi
        Exit Function
    End If

    'Αν δεν υπάρχει τομή τα διαστήματα χαρακτηρίζονται ως "Ξένα!"
    If Start2 > End1 Or End2 < Start1 Then
        Tomi(1) = "Ξένα!": Tomi(2) = "Ξένα!"
        'Αν υπάρχει τομή υπολογίζονται τα άκρα της [tStart, tEnd]
    Else
        Tomi(1) = IIf(Start1 < Start2, Start2, Start1)
        Tomi(2) = IIf(End1 < End2, End1, End2)
    End If
    TomiDiastimatonArray = Tomi
End Function
Φιλικά/Γιώργος

ΥΓ Τι έγινε με το ερώτημα αντιγραφής και επικόλλησης ιδιοτήτων φόρμας. Νομίζω ότι χρωστάς στο φόρουμ μια απάντηση.
Συνημμένα Αρχεία
Τύπος Αρχείου: zip WeeK3.zip (157,3 KB, 28 εμφανίσεις)
Απάντηση με παράθεση
  #6  
Παλιά 28-11-12, 16:06
Όνομα: ΣΤΑΥΡΟΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 27-10-2012
Μηνύματα: 102
Προεπιλογή

Κώστα το ένα πρόβλημα διορθώθηκε. Βλέπω τώρα τον διαχωρισμό επί τόπου. το άλλο όμως είναι ότι δεν το χώρισε σε μήνες αλλά σε 2 μέρη δηλαδή αν βάλω 4/3/2012 έως 5/8/2012 τότε το χωρίζει στα 2: από 4/3/2012 έως 31/3/2012 και 1/8/2012 έως 5/8/2012
έχει χάσει δηλαδή 4 μήνες
Σου βγάζω το καπέλο φίλε.
Απάντηση με παράθεση
  #7  
Παλιά 28-11-12, 16:13
Όνομα: Κώστας
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 22-01-2012
Περιοχή: Πειραιάς
Μηνύματα: 181
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από stavross Εμφάνιση μηνυμάτων
Κώστα το ένα πρόβλημα διορθώθηκε. Βλέπω τώρα τον διαχωρισμό επί τόπου. το άλλο όμως είναι ότι δεν το χώρισε σε μήνες αλλά σε 2 μέρη δηλαδή αν βάλω 4/3/2012 έως 5/8/2012 τότε το χωρίζει στα 2: από 4/3/2012 έως 31/3/2012 και 1/8/2012 έως 5/8/2012
έχει χάσει δηλαδή 4 μήνες
Σου βγάζω το καπέλο φίλε.
Σταύρο,
δεν είχα καταλάβει ότι ήθελες
τα διαστήματα ανά μήνα, δεν το είχες διευκρινήσει.

Δεν το έχω κοιτάξει, αλλά είμαι σίγουρος ότι
η "ζωγραφική" του Γιώργου θα σε καλύψει.
Απάντηση με παράθεση
  #8  
Παλιά 28-11-12, 16:31
Όνομα: ΣΤΑΥΡΟΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 27-10-2012
Μηνύματα: 102
Προεπιλογή

Γιώργο και Κώστα είσαστε άπαιχτοι.
Γιώργο σε ευχαριστώ αλλά θέλω λίγο χρόνο για να δω τι κάνει (τουλάχιστον όσο καταλαβαίνω)
Θα σου απαντήσω σε λίγο.
(για την απάντηση που λες στην αντιγραφή ιδιοτήτων φόρμας επειδή δεν ήταν αυτό που ζητούσα ...... δηλαδή παράδειγμα ήθελα όλες οι φόρμες με το τρέχον να μεγιστοποίηση... ή αναδυόμενη ναι κλπ.)
Η απάντησή σου στο τέλος ότι δεν γίνεται να αντιγραφούν μόνο οι ιδιότητες με κάλυψε και θεώρησα ότι επειδή δεν γίνεται τελείωσε το θέμα. Δεν έκανα κάτι σκόπιμα)
Τώρα κοιτάω την δική σου βάση και απαντώ
Ευχαριστώ που ασχολήθηκες
Απάντηση με παράθεση
  #9  
Παλιά 28-11-12, 16:51
Όνομα: ΣΤΑΥΡΟΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 27-10-2012
Μηνύματα: 102
Προεπιλογή

Γιώργο έχει δίκιο ο Κώστας ζωγραφίζεις.
Ένα πρόβλημα που εντόπισα είναι ότι έβαλα ασθένεια από 1/6/2012 έως 3/12/2012
άνοιξα την φόρμα frmDiastimataAnaMina και έβαλα διάστημα από 7/7/2012 έως 20/10/2012
και στον πίνακα δεν εμφάνισε τίποτα. Ύστερα το άφησα κενό και μου τα εμφάνισε όλα. Μπορεί να διορθωθεί; Με τους παπάδες που έκανες μου άνοιξες την όρεξη για να κάνω πολλά. (όπως να γίνεται το ίδιο που έχετε κάνει με τις εκθέσεις (έκθεση με παραμέτρους) Θα το πολεμήσω.
Ευχαριστώ και πάλι
Απάντηση με παράθεση
  #10  
Παλιά 28-11-12, 18:14
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Σταύρο στον κώδικα έχω προβλέψει να επεξεργάζεται μόνο τις εγγραφές που το χρονικό διάστημα στον πίνακα περιέχεται στο διάστημα που καθορίζεις στη φόρμα.

Θα μπορούσε να αλλάξει, αν σε βολεύει καλύτερα, για να επεξεργάζεται τις εγγραφές που η έναρξη του χρονικού διαστήματος στον πίνακα περιέχεται σ’ αυτό της φόρμας
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
Διπλότυπη Εγγραφή choulio19 Access - Ερωτήσεις / Απαντήσεις 1 25-05-14 19:10
[ Συναρτήσεις ] Εγγραφή σε πίνακα sirpanos Access - Ερωτήσεις / Απαντήσεις 8 05-05-14 08:48
[ Φόρμες ] Έλεγχος για ήδη υπάρχουσα εγγραφή dimitris p Access - Ερωτήσεις / Απαντήσεις 5 10-07-12 15:08
Αυτόματη εγγραφή TZON_FON Access - Ερωτήσεις / Απαντήσεις 11 23-10-10 17:18
[ Φόρμες ] ΜΕΤΑΒΑΣΗ ΣΕ ΕΓΓΡΑΦΗ gregory_m Access - Ερωτήσεις / Απαντήσεις 2 27-09-10 23:26


Η ώρα είναι 19:36.