Ανανέωση ιστοσελίδας

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #21  
Παλιά 20-03-10, 11:45
Όνομα: Παντελής
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 18-02-2010
Περιοχή: Καβάλα
Μηνύματα: 54
Προεπιλογή

Μου φαίνεται ότι κατάλαβα πλήρως τον τρόπο με τον οποίο δουλεύει.
Πέτυχα και αυτό με την προσθήκη τιμής σε λίστα.

Αν κατάλαβα καλά όμως, οι μεταβλητές περνιούνται στο onload event και απ'ότι διάβασα η φόρμα γίνεται load μόνο όταν ανοίγει. Άρα, πλην της τιμής του πρώτου combobox που περνιέται, οι τιμές των υπολοίπων comboboxes δεν περνιούνται.

Πως μπορώ να κάνω με κάποιον τρόπο κάθε φορά, reload την φόρμα για να περνιούνται οι νέες τιμές?
Απάντηση με παράθεση
  #22  
Παλιά 20-03-10, 19:45
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Καλησπέρα!

Αγαπητέ Παντελή, δες ένα απλό παράδειγμα στο συνημμένο.

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

Φιλικά

Τάσος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb AccSimpleOpenArgs.mdb (244,0 KB, 26 εμφανίσεις)
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #23  
Παλιά 20-03-10, 22:28
Όνομα: Παντελής
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 18-02-2010
Περιοχή: Καβάλα
Μηνύματα: 54
Προεπιλογή

Αυτό που θέλω περιγράφεται από το δείγμα που βρίσκεται στο συνημμένο.
Στην φόρμα ΣΕΝΤΟΝΙ ο χρήστης επιλέγει αρχικά ή το Καθημερινή ή το Σάββατο.
Ουσιαστικά επιλέγει ποια μέρα θα ανοίξει(Σε πλήρη έκδοση έχει όλες τις μέρες και περισσότερες επιλογές στα combo boxes).

Όταν πάει σε ένα combobox και επιλέξει κάτι, τότε ανοίγει η αντίστοιχη φόρμα και αποθηκεύεται η τιμή που θέλουμε. Αν πάμε όμως να επιλέξουμε για άλλο όνομα μία τιμή στο combobox αυτή η τιμή δεν μεταφέρεται στην φόρμα, γιατί ο κώδικας πίσω από την φόρμα είναι στο onLoad event. Έτσι την πρώτη φορά που φορτώνει περνά την μεταβλητή, αλλά τις επόμενες έχει ήδη φορτώσει και δεν περνάει τίποτα.

Γι' αυτό έλεγα μήπως γινόταν κάπως να γίνεται κάτι σαν reload της φόρμας που ανοίγει
Συνημμένα Αρχεία
Τύπος Αρχείου: zip Δοκιμαστικό.zip (455,7 KB, 17 εμφανίσεις)
Απάντηση με παράθεση
  #24  
Παλιά 20-03-10, 23:23
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Καλησπέρα και πάλι!
Παντελή απ ότι κατάλαβα, θέλεις να περνάς περισσότερες τιμές στις φόρμες
ΥΠ_ΣΑΒ και ΥΠ_ΚΑΘ που επιλέγεις από την αρχική φόρμα ΣΕΝΤΟΝΙ
ανεξάρτητα από την τρέχουσα κατάσταση τους (ανοιχτές ή κλειστές).

Τότε έτσι:

Κώδικας:
Private Sub Υπηρεσία1_AfterUpdate()
      Dim FormOpemArgs$, TargetTextBoxName$
      If IsNull(Me.OptWeekDays) And Not IsNull(Me.Υπηρεσία1) Then Exit Sub
      Select Case Me.Υπηρεσία1
          Case "ΤΑΜ1"
              TargetTextBoxName = "k1"
          Case "ΤΑΜ2"
              TargetTextBoxName = "k2"
          Case "ΤΑΜ3"
              TargetTextBoxName = "k3"
      End Select
      strForname = Choose(Me.OptWeekDays, "ΥΠ_ΚΑΘ", "ΥΠ_ΣΑΒ")
      
      If IsOpen(strForname) Then
          Forms(strForname).Controls(TargetTextBoxName) = Me.Επώνυμο
          Exit Sub
      Else
          FormOpemArgs = TargetTextBoxName & ";" & Me.Επώνυμο
          DoCmd.OpenForm strForname, , , , , , FormOpemArgs
      End If
    End Sub

Function IsOpen(FormName$) As Boolean
    If SysCmd(10, 2, FormName) <> 0 Then
        If Forms(FormName).CurrentView = 1 Then IsOpen = True
    End If
End Function
Ακολουθώντας την προσέγγιση που επέλεξες, ίσως να ήταν καλύτερα να έχεις τις φόρμες εξαρχής ανοιχτές και να χρησιμοποιήσεις μονο το:

Κώδικας:
Forms(strForname).Controls(TargetTextBoxName) = Me.Επώνυμο
Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 21-03-10 στις 21:10.
Απάντηση με παράθεση
  #25  
Παλιά 21-03-10, 15:28
Το avatar του χρήστη nisgia
Super Moderator
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 12-10-2009
Περιοχή: Ηγουμενίτσα
Μηνύματα: 161
Προεπιλογή Κοινοποίηση και σύληψη δημόσιων συμβάντων φόρμας

Καλησπέρα guys!

Ένας ακόμη τρόπος να γίνει το ζητούμενο είναι και η χρήση εξειδικευμένων συμβάντων (events).

Δηλαδή στην ενότητα δηλώσεων της αρχικής φόρμας έχουμε την εξής δήλωση:
Κώδικας:
Option Compare Database
Option Explicit

Public Event CashAfterUpdate(ByVal FormName As String, _
        ByVal ControlName As String, ByVal LastName As String)
Ενώ η διαδικασία συμβάντος Υπηρεσία1_AfterUpdate μετατρέπεται σε:
Κώδικας:
Private Sub Υπηρεσία1_AfterUpdate()

    Dim strFormName As String
    Dim strCtrlName As String
    Dim strLastName As String

    If Not IsNull(Me.OptWeekDays) Then
        If Not IsNull(Me.Υπηρεσία1) Then
            strFormName = Choose(Me.OptWeekDays, "ΥΠ_ΚΑΘ", "ΥΠ_ΣΑΒ")
            strCtrlName = Array("k1", "k2", "k3")(Me.Υπηρεσία1.ListIndex)
            DoCmd.OpenForm strFormName
            RaiseEvent CashAfterUpdate(strFormName, strCtrlName, Me.Επώνυμο)
            Me.SetFocus
        End If
    End If
End Sub
Από την πλευρά των φορμών "ημέρας" έχουμε:
Κώδικας:
Option Compare Database
Option Explicit

Private WithEvents MainForm As Form_ΣΕΝΤΟΝΙ
'
Private Sub Form_Load()
    Set MainForm = Forms("ΣΕΝΤΟΝΙ")
End Sub

Private Sub MainForm_CashAfterUpdate(ByVal FormName As String, _
        ByVal ControlName As String, ByVal LastName As String)

    If Me.Name = FormName Then
        On Error Resume Next
        Me.Controls(ControlName) = LastName
    End If
End Sub
'
'...More code here...
'
Στο συνημμένο θα βρείτε και την πρακτική εφαρμογή της παραπάνω θεωρίας.

Υ.Γ.
Πάντως φίλε Παντελή, αν συνεχίσεις να δίνεις ελληνικά ονόματα στα αντικείμενα της Access,
...δεν θα τα πάμε καθόλου καλά!
Συνημμένα Αρχεία
Τύπος Αρχείου: zip TestWithEvents.zip (170,9 KB, 22 εμφανίσεις)
__________________
Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...!
-----------------------------------------------
Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης.
Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά!

Τελευταία επεξεργασία από το χρήστη nisgia : 21-03-10 στις 18:58.
Απάντηση με παράθεση
  #26  
Παλιά 21-03-10, 20:15
Όνομα: Παντελής
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 18-02-2010
Περιοχή: Καβάλα
Μηνύματα: 54
Προεπιλογή

Όσον αφορά τη λύση του Τάσου μου λειτουργεί πολύ καλά!
Απλά για να ξέρουν και οι αναγνώστες στη θέση του
If IsOpen(strForname) Then
χρησιμοποίησα το
If CurrentProject.AllForms(strForname).IsLoaded Then

Κατά τ'άλλα μια χαρά.
Για την προσθήκη ενός Επωνύμου σε λίστα χρησιμοποιώ το:
If TargetTextBoxName = "list1" Or TargetTextBoxName = "list2" Then
Forms(strForname).Controls(TargetTextBoxName).AddI tem Me.Επώνυμο
Else: Forms(strForname).Controls(TargetTextBoxName) = Me.Επώνυμο

Και το αντίστοιχο στο onLoad της φόρμας που ανοίγει.

Θα δοκιμάσω και τον κώδικα του nisgia και θα πω τις εντυπώσεις μου!

Σας ευχαριστώ για τον χρόνο σας!
Απάντηση με παράθεση
  #27  
Παλιά 21-03-10, 21:26
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Παντελή καλησπέρα!
Σε καμία περίπτωση δεν θα δούλευε η IsOpen() αφού (δικό μου λάθος) παρέλειψα να
συμπεριλάβω τη συνάρτηση αυτή στο μήνυμα!

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

Κώδικας:
Function IsOpen(FormName$) As Boolean
      If SysCmd(10, 2, FormName) <> 0 Then
          If Forms(FormName).CurrentView = 1 Then IsOpen = True
      End If
  End Function
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #28  
Παλιά 13-05-10, 10:38
Όνομα: Παντελής
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 18-02-2010
Περιοχή: Καβάλα
Μηνύματα: 54
Προεπιλογή

Καλημέρα στην κοινότητα! Έχω μία απορία - προέκταση του συγκεκριμένου θέματος.
Θέλω όταν η φόρμα της ημέρας είναι κλειστή, να πατάω ένα κουμπί και να πηγαίνει σε όλες τις εγγραφές του πεδίου Υπηρεσία1 της συνεχούς φόρμας και να κάνει ουσιαστικά requery τον παρακάτω κώδικα.

DoCmd.GoToRecord , , acFirst


Dim FormOpemArgs$, TargetTextBoxName$
If IsNull(Me.OptWeekDays) And Not IsNull(Me.Υπηρεσία1) Then Exit Sub
Select Case Me.Υπηρεσία1
Case "ΤΑΜ1"
TargetTextBoxName = "k1"
Case "ΤΑΜ2"
TargetTextBoxName = "k2"
Case "ΤΑΜ3"
TargetTextBoxName = "k3"
End Select
strForname = Choose(Me.OptWeekDays, "ΥΠ_ΚΑΘ", "ΥΠ_ΣΑΒ")

' Προυπόθεση είναι ότι η φόρμα είναι κλειστή
Forms(strForname).Controls(TargetTextBoxName) = Me.Επώνυμο

'Η φόρμα έχει ήδη ανοίξει από την προηγούμενη γραμμή κώδικα
Do While Me.CurrentRecord - 1 < Me.RecordsetClone.RecordCount
FormOpemArgs = TargetTextBoxName & ";" & Me.Επώνυμο
DoCmd.OpenForm strForname, , , , , , FormOpemArgs
End If

DoCmd.GoToRecord , , acNext
Loop

Επειδή οι εγγραφές που περνούν στην φόρμα που ανοίγει δεν αποθηκεύονται κάπου όταν αυτή κλείνει, σε περίπτωση λάθους που πρέπει να αλλάξει κάτι θέλω με το πάτημα ενός κουμπιού να περνιούνται όλα τα combo boxes Υπηρεσία1 και να εκτελείται ο κώδικας από πίσω τους έτσι ώστε να ανοίγει πρώτα η φόρμα για να περνάει η πρώτη εγγραφή και μετά εφόσον έχει ανοίξει να περνούν και οι υπόλοιπες.

Το πρόβλημα είναι ότι μου βγάζει λάθος στο ότι δεν μπορεί να προχωρήσει στην επόμενη εγγραφή και περνά μόνο την πρώτη εγγραφή. Το πρόβλημα εμφανίζεται στην τελευταία γραμμή:

DoCmd.GoToRecord , , acNext

Καμιά ιδέα?

Ευχαριστώ
Απάντηση με παράθεση
  #29  
Παλιά 14-05-10, 10:56
Όνομα: Γιώργος Καψάλης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 18-11-2009
Μηνύματα: 62
Προεπιλογή

Dim mnm As Variant
Dim mnma As String
Dim Minas As Integer, Etos As Integer


mnma = "Καταχωρήστε:" & vbCrLf & vbCrLf & _
"1 = Εκτύπωση Φορμα1 " & vbCrLf & vbCrLf & _
"2 = Εκτύπωση Φορμα2" & vbCrLf & vbCrLf & _
"3 = Εκτύπωση Φορμα3" & vbCrLf & vbCrLf & _
"4 = Εκτύπωση Φορμα4" & vbCrLf & vbCrLf & _
"5 = Εκτύπωση Φορμα5" & vbCrLf & vbCrLf & _
"6 = Εκτύπωση Φορμα6"

arxi:

mnm = InputBox(mnma, "Επιλογές")

If mnm = "" Then Exit Sub

If IsNumeric(mnm) = False Then
MsgBox "Εσφαλμένη καταχώρηση", vbInformation, "Σφάλμα"
GoTo arxi
End If

If mnm > 6 Or mnm < 1 Then
MsgBox "Εσφαλμένη καταχώρηση", vbInformation, "Σφάλμα"
GoTo arxi
End If


If mnm = 1 Then DoCmd.OpenForm "Φορμα1", acNormal, "", "", acFormEdit, acWindowNormal
If mnm = 2 Then DoCmd.OpenForm "Φορμα2", acNormal, "", "", acFormEdit, acWindowNormal
If mnm = 3 Then DoCmd.OpenForm "Φορμα3", acNormal, "", "", acFormEdit, acWindowNormal
If mnm = 4 Then DoCmd.OpenForm "Φορμα4", acNormal, "", "", acFormEdit, acWindowNormal
If mnm = 5 Then DoCmd.OpenForm "Φορμα5", acNormal, "", "", acFormEdit, acWindowNormal
If mnm = 6 Then DoCmd.OpenForm "Φορμα6", acNormal, "", "", acFormEdit, acWindowNormal

Δες και αυτό
Γιώργος
Απάντηση με παράθεση
Απάντηση στο θέμα

Ετικέτες
events, openargs, raiseevent, withevents, ορίσματα, συμβάντα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[ Φόρμες ] Αντιγραφή αντικειμένου φόρμας σε αντικείμενο άλλης φόρμας zinocrotale Access - Ερωτήσεις / Απαντήσεις 3 18-04-13 18:35
Ενημέρωση Πεδίου Δευτερεύουσας Φόρμας μέσω Βοηθητικής Φόρμας Χρήστος Access - Ερωτήσεις / Απαντήσεις 1 17-04-12 19:18
Επιλογή "άκυρο" σε μήνυμα με το κλείσιμο της φόρμας Βackup alex Access - Ερωτήσεις / Απαντήσεις 3 14-03-12 11:52
[Συναρτήσεις] Επιλογή αριθμών gpentez Excel - Ερωτήσεις / Απαντήσεις 2 10-03-12 08:56
[ Active X Controls ] Επιλογή ημερομηνίας από Active X και αυτόματη ενημέρωση φόρμας Χρήστος Access - Ερωτήσεις / Απαντήσεις 14 31-12-10 17:06


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