Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   VBA - Class Interface (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/4501-visual-basic-applications-class-interface.html)

giannis_ie 16-03-17 16:25

VBA - Class Interface
 
1 Συνημμένο(α)
Γεια σας παιδιά! Καταρχάς θα ήθελα να σας πω ένα μεγάλο μπράβο για την έργο που κάνετε μέσα από αυτό το Forum! Μπορεί να είναι η πρώτη μου δημοσίευση αλλά σας παρακολουθώ αρκετό καιρό.

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

Στο θέμα τώρα. Προσπαθώντας να υλοποιήσω το interface μιας κλάσης έχω το εξής πρόβλημα:
Όταν η interface Class περιλαμβάνει μέθοδο που έχει για παράμετρο, μεταβλητή τύπου access.Form, τότε όταν πάω να υλοποιήσω το interface σε μια άλλη Κλάση λαμβάνω μήνυμα λάθους ”User-defined type not defined”. Το μήνυμα εμφανίζεται μέσα στον VBA Editor αμέσως μόλις επιλέξω από τον Object drop-down list την interface Class και παράλληλα από-επιλέγεται από τον Object drop-down list η κλάση που μόλις είχα επιλέξει. Στην ουσία δεν με αφήνει να επιλέξω την interface Class από τον Object drop-down list, ώστε έπειτα να εισάγω τις μεθόδους και τις ιδιότητες που την υλοποιούν.

Παράδειγμα
Class Module: clsIMyObject - Interface Class
Κώδικας:

'----------------------------------------
' clsIMyObject - Interface Class
'----------------------------------------

Option Compare Database
Option Explicit

Public Sub method1(frm As Access.Form)
End Sub

Class Module: clsMyObject1 - Η κλάση που υλοποιεί την clsIMyObject
Κώδικας:

'----------------------------------------
' clsMyObject1 - Implements clsIMyObject
'----------------------------------------

Option Compare Database
Option Explicit

Implements clsIMyObject

'1) Mόλις επιλέξω από τον Object drop-down list την clsIMyObject λαμβάνω το Error  ”User-defined type not defined”
'2) Αν όμως με το πληκτρολόγιο γράψω:
'        Private Sub clsIMyObject_method1(frm As Form)
'          'some code'
'        End Sub
'  τότε δεν έχω κανένα πρόβλημα, αναγνωρίζεται κανονικά ως υλοποίηση της Interface Class!!!!!!

Τέλος να προσθέσω ότι αν η παράμετρος τις μεθόδου ήταν μεταβλητή άλλου τύπου πχ ctl as Control δεν μου παρουσιάζετε κανένα πρόβλημα, δηλαδή :
Κώδικας:

'----------------------------------------
' clsIMyObject - Interface Class
'----------------------------------------


Public Sub method1(frm As Access.Form) ' <-- Error!!!!!! Giati????
End Sub

Public Sub method2() ' <-- No Error!
End Sub

Public Sub method3(ctl As Control) ' <-- No Error!
End Sub

Public Sub method4(sb As SubForm, str As String) ' <-- No  Error!
End Sub

Μπορείτε να με βοηθήσετε να καταλάβω τον λόγο του συγκεκριμένου σφάλματος? Ελπίζω να έγινα κατανοητός!

Meteora 17-03-17 18:25

Καλησπέρα,...
Ασχολούμαι με την Access αρκετά χρόνια, έχω φτιάξει αρκετές εφαρμογές, αλλά δεν ασχολήθηκα ποτέ με ο,τι σε προβληματίζει !
Αυτά τα "μαραφέτια" interface Class, Object drop-down list, Class Module: clsMyObject1, ... δεν τα έδωσα ποτέ σημασία, δεν τα χρειάστηκα ποτέ, δεν,...δεν,...
Συμπερασματικά, δεν μπορώ να σε βοηθήσω.

Υστερολόγιο : Αν ξεκινάς τώρα Access θα πρότεινα να τα αφήσεις και όταν με το καλό σχεδιάσεις μια-δυο-τρεις βάσεις (πίνακες - ερωτήματα(SQL) - φόρμες - αναφορές- κώδικας VBA), τότε ψάξε και σε αυτά τα "μαραφέτια" όπως τα χαρακτήρισα, μιας και δεν ξέρω τι είναι...

Καλό ξε-μπέρδεμα / Νίκος

giannis_ie 18-03-17 10:32

1 Συνημμένο(α)
Καλημέρα Νίκο
Η αλήθεια είναι ότι με access + vba ασχολούμαι τους τελευταίους 5 μίνες, αλλά έχοντα αφιερώσει πολύ χρόνο και διάβασμα, είμαι σε θέσει να διαχειριστώ με μια σχετική άνεση κάποια βασικά από Vba και access. Έτσι τον τελευταίο καιρό ασχολήθηκα με τις Κλάσης. Κατασκευάζοντας μια Κλάση κατασκευάζεις στην ουσία ένα δικό σου Αντικείμενο-Object στο οποίο του δίνεις τις δικές του Ιδιότητες και Μεθόδους ακόμα και Events! Από ότι καταλαβαίνω μέχρι τώρα, η Κλάσεις είναι η ουσία, η καρδιά του Αντικειμενοστραφή Προγραμματισμού.

Έχω δημιουργήσει μερικές κλάσης (κακογραμμένες βεβαία σε σχέση με κάποιον πεπειραμένο) και πραγματικά είναι ένα ισχυρότατο εργαλείο το οποίο με έχει βοηθήσει πολύ! Πάνε τον κώδικα σε άλλο επίπεδο!

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

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

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

Meteora 02-04-17 22:52

Καλησπέρα,
...Αργοπορημένη η απάντησή μου, αλλά ευχαριστώ θερμά για την ευγενική σου πρόθεση να δω δείγμα της δουλειάς σου.
Να είσαι καλά, να κάνεις σπουδαίες εφαρμογές και να βοηθάς το Forum / Νίκος


Η ώρα είναι 09:14.

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


Search Engine Optimization by vBSEO 3.3.2