• Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại.
  • Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại.

    MinhnHang > 15-11-16, 09:40 AM

    Gửi anh/chị.

    Em đang trong thời gian tự vọc VBA trong Access.

    Phiền anh/chị chỉ bảo em sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại.

    Em xin cảm ơn ạ!
  • RE: Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại.

    maidinhdan > 15-11-16, 11:21 AM

    (15-11-16, 09:40 AM)MinhnHang Đã viết: Gửi anh/chị.

    Em đang trong thời gian tự vọc VBA trong Access.

    Phiền anh/chị chỉ bảo em sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại.

    Em xin cảm ơn ạ!


    Class Module: được viết dưới dạng *.cls (class Module) và tương trợ như *.bas (Modules), Khác biệt ở chổ là module dùng làm thư viện (hàm số, biến số, hăng số, enum,...). Còn Class dùng để mô tả đối tượng (với các phương thức, thuộc tính, sự kiện...)

    1. Nói về Class: dùng để tạo ra những Object ( Đối tượng) theo ý muốn của người thiết kế dữ liệu. Thông qua Class ta có thể tạo ra được những Object với đầy đủ Properties, Methods, Events tương tự như những Object có sẵn trong Access VBA...Xem hình phía dưới hàm có sẳn của Access
    [Hình: chap3a5.gif]

    + Properties: ta sẽ định nghĩa các thuộc tính, kiểu dữ liệu là gì
    + Methods: ta tạo các phương thức như Thêm, sửa, Xoá
    + Events: Tạo nhằm mục đích bẩy 1 sự kiện nào đó như nhấn chuột, thay đổi dữ liệu, mở hoặc đóng form...Thông thường, ta có các Event để làm nhiệm vụ nạp Class (Class_Initialize) và đóng Class (Class_Terminate).

    * Khi viết class, nếu ta chưa dùng đến ( chưa gọi nó ra) thì các methods, properties, events chưa load vào bộ nhớ nên rất tiết kiệm resources. Khi nào ta gọi (Set obj.... = New clsTenclass) thì nó mới load object vào bộ nhớ và khi ta kill object (Set obj.... = Nothing) thì ta đã giải phóng object ra khỏi bộ nhớ.

    Chi tiết bạn vào link này để xem: Hướng Dẫn [Using Class Module] Các phương pháp bổ sung Component vào dự án của bạn

    2. Nói về Modules: Đây chỉ là những thư viện dùng chung (nghĩa là các hàm, các biến ko liên quan đến đối tượng nào cụ thể cả). Khi chạy ứng dụng thì tất cả những gì viết trong đó sẽ được load vào bộ nhớ. Vì vậy, khi ra viết ứng dụng, ko nên cái gì cũng để chung vào Module cả đống mà nhiều khi chả dùng tý nào trong ứng dụng.

    Bài viết được tham khảo trên trang GPE và chỉnh sửa, bổ sung bởi tôi.
    Thân mến!
  • RE: Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại.

    MinhnHang > 18-11-16, 03:05 PM

    Bàn về tốc độ khi dùng Class Module:

    Em có 1 file Data.mdb ngự trên "máy chủ" và share full thư mục này ra, vậy thì:

    Trong 1 Form em gọi những gì đã làm trong Class module về để "vận hành" có nhanh hơn là em ép riêng một đoạn code trong mỗi Form không ạ?

    (tất cả các textbox đều ở dạng unbound)

    BG!
  • RE: Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại.

    maidinhdan > 18-11-16, 04:51 PM

    (18-11-16, 03:05 PM)MinhnHang Đã viết: Bàn về tốc độ khi dùng Class Module:

    Em có 1 file Data.mdb ngự trên "máy chủ" và share full thư mục này ra, vậy thì:

    Trong 1 Form em gọi những gì đã làm trong Class module về để "vận hành" có nhanh hơn là em ép riêng một đoạn code trong mỗi Form không ạ?

    (tất cả các textbox đều ở dạng unbound)

    BG!

    Nhanh hay chậm là do thuật toán ta viết, không liên quan gì đến dùng Class Module/Modules hay viết thẳng trên form.

    Class Modules là lập trình hướng đối tượng, mục đích của nó làm chương trình nó gọn, dể bảo trì, sửa lỗi, mang tính chuyên nghiệp hơn, Mặt khác nếu bạn chuyển giao Code bạn cho lập trình viên khác để dùng code thì họ chỉ cần nhìn vào Class của bạn là có thể sử dụng rồi.

    * Tất cả những gì bạn đang sử dụng trên Access đề hình thành từ Class Modules. Không tin bạn mở giao diện VBA lên sau đó nhấn F2, rồi từ từ tìm hiểu.
  • RE: Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại.

    ongke0711 > 18-11-16, 07:06 PM

    Bổ sung:

    Nhưng gì nằm trong Module sẽ được load lên hết khi ứng dụng khởi chạy. còn Class module thì Form nào có sử dụng cls khởi chạy thì nó mới load. Do vậy cái nào bạn cũng đưa hết vào module thì khi ứng dung chạy sẽ ngốn ram và cpu nhưng đổi lại các xử lý trên form cũng sẽ nhanh hơn vì các Biến tòa cục, Procedure, function đã load lên rồi và nó tồn tại ở đó cho đến khi đóng ứng dụng. Ngược lại với Cls nó chỉ chạy khi cần nên có thể nói ứng dụng sẽ nhẹ hơn khi khởi chạy và khi cần xử lý thì mới LET và GET. Các biến, hàm trong Cls sẽ được giải phóng khi đối tượng đó đóng lại.
  • RE: Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại.

    Minh Tiên > 29-11-16, 02:25 PM

    Nhờ các Pro chỉ giáo:
    Việc khai báo:
    1./
    Private mCls As New clsDanhsach_Hanghoa
    và
    2./
    Private mCls As clsDanhsach_Hanghoa
    Set mCls = NewclsDanhsach_Hanghoa

    Thì việc load cls vào bộ nhớ như thế nào:

    Ở phương án 1 thì đã load vào bộ nhớ chưa ?

    Thanks ./.
  • RE: Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại.

    ongke0711 > 29-11-16, 09:11 PM

    Theo tôi biết thì khi dùng từ khóa New là đã khởi tạo đối tượng rồi, tức là đã chiếm bộ nhớ rồi. Do vậy trường hợp 1: vừa khai báo và khởi tạo luôn, trường hợp 2: khai báo xong rồi khởi tạo object. Cả hai trường hợp điều chiếm bộ nhớ. Về tốc độ xử lý thì không khác biệt rõ rệt.
    Theo một số nhà lập trình khuyên là không nên sử dụng khai báo biến đối tượng như trường hợp 1 vì nó khởi tạo luôn object và không theer check biến này có Nothing hay không trước khi khởi tạo (Set), sẽ phát sinh một số lỗi.