Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Αυτόματη αρίθμηση σε δευτερεύουσα φόρμα (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/786-aytomati-arithmisi-se-deytereioysa-forma.html)

iondep 18-10-10 13:50

Αυτόματη αρίθμηση σε δευτερεύουσα φόρμα
 
Καλησπέρα σε όλους,

πώς μπορώ σε μια δευτερεύουσα φόρμα (προβολή: συνεχείς φόρμες) να βάλω ένα πεδίο τύπου αυτόματης αρίθμησης το οποίο να αλλάζει ανάλογα με το πλήθος των εγγραφών?
Τί εννοώ:Στη φόρμα καταχωρώ προιόντα σε παραγγελία, να είναι κάπως ετσι:
1->ΣΑΜΠΟΥΑΝ
2->ΣΑΠΟΥΝΙ
3->ΠΕΤΣΕΤΑ. Στην περίπτωση που αφαιρέσω από την λίστα πχ το ΣΑΠΟΥΝΙ,η ΠΕΤΣΕΤΑ να γίνει 2.Επίσης αυτός ο αύξων αριθμός για το κάθε προιόν, πρέπει να μου αποθηκεύεται στον πίνακα.
Υπάρχει καμιά ιδέα?
Φιλικά,
Δέσποινα.

Meteora 18-10-10 17:01

Καλησπέρα...

Δέσποινα, κάνε την "διαδρομή" :
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > Αυτόματη αρίθμηση σε δευτερεύουσα φόρμα

...
και δες λίγο πιο χαμηλά στα "ΠΑΡΟΜΟΙΑ ΘΕΜΑΤΑ"

Με εκτίμηση / Νίκος Δ.

iondep 19-10-10 21:24

Καλησπέρα σε όλους,

Νίκο σε αυτά τα posts δεν μπορώ να βρω κάτι σχετικό με αυτό που θέλω να κάνω.
Θέλω να κάνω αυτό που έγραψα παραπάνω, μέσα στη δευτερεύουσα το πεδίο της αυτόματης αρίθμησης θέλω να παίρνει εκείνη την στιγμή την τιμή του και να προσαρμόζεται ανάλογα σε τυχόν προσθαφαιρέσεις εγγραφών στη δευτερεύουσα (όπως έγραψα και παραπάνω).
Επίσης, στην επόμενη νέα εγγραφή που θα δημιουργώ στην εξωτερική φόρμα, το
πεδίο αυτό της αυτόματης αρίθμησης (στην δευτερεύουσα) θέλω να ξαναρχίζει την αρίθμηση από το 1.
Όπως σε ένα τιμολόγιο: Κύρια φόρμα (στοιχεία πελάτη, παράδοσης κλπ) και δευτερεύουσα (προϊόντα με λεπτομέρειες).

Φιλικά,
Δέσποινα

nisgia 20-10-10 01:10

Καλησπέρα Δέσποινα!

Θέλεις οπωσδήποτε η αύξουσα αρίθμηση να εμφανίζεται στη φόρμα ή θα βολευόσουν και μόνο με την έκθεση (εκτύπωση) του τιμολογίου;
Σε ρωτάω γιατί στις εκθέσεις, αυτό που ζητάς είναι απλά θέμα ρύθμισης μιας ιδιότητας πεδίου κειμένου.
Όχι όμως και στις φόρμες ή τα φύλλα δεδομένων. :bored:

Φιλικά,
Γιάννης

iondep 20-10-10 19:36

Καλησπέρα,

ναι θα ήθελα να γίνεται στην φόρμα, για τις εκθέσεις το γνωρίζω οτι γίνεται πολύ εύκολα.
Αλλά στις φόρμες?

Φιλικά,
Δέσποινα

editolis 20-10-10 23:27

Θα χρειαστεις την εξης στηλη στο ερωτημα της φορμας σου:

RecNo: Fn_RecNoA("TO EROTIMA SOU";"ID";[ID])

Και τον εξης κωδικα για το Fn_RecNoA...

Κώδικας:

Function Fn_RecNoA(QueryName As String, _
                                    PrimKeyName As String, _
                                    PrimKeyVal As Variant) As Long
'      Returns the Record No for each Record in a Query
'      This is for use in a the Final Query
On Error Resume Next                    ' - (A)
    Dim rst As ADODB.Recordset, RCT As Long, CNT As Long
    Dim QNM As String, PKN As String, PKV As Variant
   
    QNM = QueryName
    PKN = PrimKeyName
    PKV = PrimKeyVal
   
    Set rst = New ADODB.Recordset
    Set rst.ActiveConnection = CurrentProject.Connection
    rst.CursorType = adOpenKeyset
    rst.CursorLocation = adUseClient
    rst.LockType = adLockOptimistic
    rst.Source = QNM
   
    rst.Open Options:=adCmdTable
   
    CNT = 0
    If rst.EOF And rst.BOF Then
        GoTo ExitPoint                ' If Recordset is empty
    End If    ' rst
   
' Populate The Recordset.
    With rst
        .MoveLast
        .MoveFirst
    End With
    RCT = rst.RecordCount
   
    CNT = 1
    rst.MoveFirst
    Do While CNT <= RCT
        If rst.EOF Or rst.Fields(PKN) = PKV Then
            Exit Do
        End If      ' FDV
        rst.MoveNext
        CNT = CNT + 1
    Loop

ExitPoint:
    rst.Close
    Set rst = Nothing
    Fn_RecNoA = CNT
    On Error GoTo 0
End Function


Tasos 21-10-10 10:09

Καλημέρα κι από μένα!

Έστω ότι η υποφόρμα μεταξύ άλλων περιέχει το πεδίο CustNr που την συνδέει μα την κύρια φόρμα (Parent).

Το πεδίο αυτό θα πρέπει να υπάρχει στην κύρια φόρμα. Αν δεν θέλουμε να εμφανίζεται επιλέγουμε την ιδιότητα του πεδίου "Ορατό" σε "Όχι".


Κατόπιν, στη λειτουργική μονάδα της υποφόρμας περνάμε το παρακάτω (παραδειγματικός κώδικας):

Κώδικας:

Private Sub Form_AfterDelConfirm(Status As Integer)
      If Not Status Then SetAutoNr
  End Sub
 
  Private Sub Form_AfterUpdate()
      SetAutoNr
  End Sub
 
    Private Sub SetAutoNr()
      'Table1 = ο πίνακας του οποίου τα δεδομένα εμφανίζονται στην υποφόρμα.
      'Autonum = Το πεδίο που θα παιρνει τους αύξοντες αριθμούς σε κάθε δημιουργία ή διαγραφή μιας εγγραφής.
      'CustNr = το ΑΡΙΘΜΙΤΙΚΟ πεδίο με το οπίο συνδέεται η υποφόρμα με τη φόρμα (....Me.Parent.CustNr...).

      Dim i: i = 1
      With CurrentDb.OpenRecordset("SELECT [Table1].[Autonum] " _
                                & "FROM [Table1] " _
                                & "Where [CustNr] = " & Me.Parent.CustNr)
          If .RecordCount Then
              .MoveFirst
              Do Until .EOF
                  .Edit
                  .Fields("AutoNum") = i
                  i = i + 1
                  .Update
                  .MoveNext
              Loop
          End If
          .Close
      End With
  End Sub

Με τον τρόπο αυτό, διορθώνουμε το πεδίο Autonum του πίνακα Table1 αλλά μόνο εκείνες τις εγγραφές που αναλογούν στο CustNr.



kapetang 21-10-10 18:40

1 Συνημμένο(α)
Καλησπέρα στην παρέα

Στη ΒΔ που επισυνάπτεται παρουσιάζεται μια άλλη προσέγγιση στην αρίθμηση των εγγραφών της δευτερεύουσας φόρμας.
Η ΒΔ αποτελεί μια απλή περίπτωση εφαρμογής παραγγελιών και περιλαμβάνει τους πίνακες:
  • Των πελατών (tblCustomers)
  • Των προϊόντων (tblProducts)
  • Των παραγγελιών (tblOrders)
  • Των λεπτομερών των παραγγελιών (tblOrdersDetails), στον οποίο το πρωτεύον κλειδί είναι σύνθετο από τα πεδία OrderID και ProductID.
Για την αρίθμηση των εγγραφών της υποφόρμας λεπτομερειών των παραγγελιών χρησιμοποιούνται τα ερωτήματα qryOrderDetails και qryOrderDetailsAutoNum και ο κώδικας που υπάρχει στην υποφόρμα.
Η διαχείριση των πελατών, των παραγελιών και των λεπτομερειών γίνεται με τη βοήθεια της βασικής φόρμας frmCustomersOrders (Πελάτες, Παραγγελίες, Λεπτομέρειες ).
Οι εγγραφές στην υποφόρμα και το ερώτημα qryOrderDetailsAutoNum ταξινομούνται κατά OrderID και ProductID και έτσι επιτυγχάνεται συντονισμός στην αρίθμηση, χωρίς να αποθηκεύεται σε πίνακα.
Για να φανεί ο τρόπος λειτουργίας θα πρέπει να γίνουν τροποποιήσεις, προσθήκες και διαγραφές στην υποφόρμα των λεπτομερειών που περιέχεται στη βασική (frmCustomersOrders).

Φιλικά/Γιώργος

iondep 25-10-10 21:18

Σας ευχαριστώ για τις απαντήσεις σας,

καθώς είμαι αρχάρια δεν γνωρίζω πολλά από κώδικα,
αλλά το παράδειγμα του Γιώργου είναι αυτό που θέλω με την μόνη διαφορά ότι θα ήθελα η τιμή του autonumber για κάθε προϊόν να αποθηκεύεται σε ένα πεδίο ID του πίνακα που βασίζεται η υποφόρμα.

Δέσποινα

kapetang 26-10-10 15:57

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

Δέσποινα ανέβασα τη βάση δεδομένων κυρίως για να φανεί η μεγάλη σημασία του σωστού σχεδιασμού.
Δεν μπορεί να μιλάμε για παραγγελίες χωρίς να έχουμε τουλάχιστον τέσσερες πίνακες: Πελάτες, Προϊόντα, Παραγγελίες, Λεπτομέρειες Παραγγελιών.
Όταν η βάση είναι σωστά σχεδιασμένη εύκολα, από τα βασικά (αποθηκευμένα) στοιχεία, μπορούμε να υπολογίσουμε (πχ με ερωτήματα) άλλα και να τα εμφανίσουμε σε φόρμες, εκθέσεις, κλπ.
Στη ΒΔ, που επισυνάπτεται στο προηγούμενο μήνυμα, αυτό γίνεται στο ερώτημα «qryOrderDetailsAutoNum» το οποίο χρησιμοποιείται ως προέλευση δεδομένων στη φόρμα των λεπτομερειών.
Σημειώνω ότι ένα ερώτημα μπορεί να χρησιμοποιηθεί, ως προέλευση δεδομένων, όπως και ένας πίνακας.
Με βάση τα παραπάνω θα πρέπει να εκτιμήσεις, αν πραγματικά σου χρειάζεται η αποθήκευση του AutoNumber σε πίνακα και, αν η απάντηση είναι ναι, να χρησιμοποιήσεις μία από τις προτάσεις που το αποθηκεύουν. Κατά τη γνώμη μου του Τάσου που εφαρμόζεται ευκολότερα.

Φιλικά/Γιώργος


Η ώρα είναι 04:13.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2