Access
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Access

Trình đơn truy cập thả xuống TreeView ImageCombo

Giới thiệu.

Trong phần Hướng dẫn điều khiển TreeView này, chúng ta sẽ học cách lập trình Điều khiển ImageComboBox. Chúng tôi sẽ tạo một Menu thả xuống MS-Access Project, với ImageCombo Control. Có một Điều khiển ImagecomboBox thứ hai để hiển thị Hình ảnh và các Giá trị chính của chúng từ Danh sách hình ảnh Điều khiển. Đối với cả hai Điều khiển ImageComboBox này, danh sách Hình ảnh đã được lấy từ một Điều khiển Danh sách Hình ảnh chung. Các Hình ảnh đã được tải lên theo cách thủ công vào Điều khiển Danh sách Hình ảnh từ Máy tính, trong phiên trước đó của Chuỗi Hướng dẫn này.

Sau đây là các Phiên Hướng dẫn Kiểm soát Chế độ xem Dạng cây mà chúng tôi đã đề cập cho đến nay:

Liên kết Phiên Hướng dẫn Điều khiển TreeView.

  1. Hướng dẫn Điều khiển Microsoft TreeView
  2. Tạo Menu Truy cập với Điều khiển TreeView
  3. Gán hình ảnh cho điều khiển TreeView
  4. Gán hình ảnh cho TreeView Control-2
  5. Kiểm soát TreeView Kiểm tra-Đánh dấu Thêm nút Xóa

Chế độ xem Demo của Cả ImageComboBox đã được Mở rộng.

Hình ảnh Menu thả xuống Dự án MS-Access đã hoàn thành được cung cấp dưới đây:

Hình ảnh xem thiết kế của biểu mẫu trên được cung cấp bên dưới:

Dữ liệu nguồn ImageComboBox thả xuống.

Dữ liệu nguồn của Menu thả xuống Dự án MS-Access mới đã được lấy từ Dự án Menu Access trước đó của chúng tôi.

Tải xuống cơ sở dữ liệu Demo ngay bây giờ, nếu bạn chưa thực hiện trước đó, từ mục thứ 4 Liên kết đưa ra ở trên. Nếu bạn làm vậy, thì bạn có tất cả các Đối tượng dữ liệu bắt buộc để tiếp tục với Phiên hiện tại.

Có ba Bảng:Danh mục, Sản phẩm và Trình đơn bàn. Có hai biểu mẫu để hiển thị dữ liệu Danh mục và Sản phẩm và một biểu mẫu tham số bộ lọc dữ liệu cho Báo cáo.

Chúng tôi có thêm hai Biểu mẫu: frmMenu frmMenu2 mà chúng tôi đã sử dụng cho các Phiên hướng dẫn trước đây của chúng tôi.

Bạn sẽ tìm thấy hai Báo cáo để xem trước Danh mục và Mục dữ liệu sản phẩm.

Hai Macro để hiển thị một số Tin nhắn đơn giản. Các macro có thể được sử dụng để sắp xếp các Truy vấn Hành động theo trình tự để Xử lý dữ liệu cho các Báo cáo phức tạp. Những hành động này đã được thực hiện bằng cách chọn Tùy chọn từ Menu dự án điều khiển TreeView trong Phiên hướng dẫn trước đó.

Chúng tôi cần tất cả các đối tượng này ở đây vì chúng tôi sẽ tạo một Trình đơn thả xuống mới bằng cách sử dụng ImageComboBox Điều khiển. Chúng tôi phải có thể mở tất cả các đối tượng này bằng cách chọn các tùy chọn trong Trình đơn điều khiển thả xuống mới, giống hệt như cách chúng tôi đã làm trên frmMenu2 Biểu mẫu, sử dụng Điều khiển TreeView, trong cùng Cơ sở dữ liệu này.

Trình đơn Hình ảnh bảng dưới đây để bạn tham khảo.

Chuẩn bị cho việc thiết kế biểu mẫu trình đơn thả xuống.

Kiểm tra Design View của Menu Form ở trên, trong đó chúng ta có hai Control liên quan đến Menu. Một điều khiển ImageList và một điều khiển ImageComboBox. Thêm một ImageComboBox Control nữa đã được đặt ở phía bên phải của Biểu mẫu để hiển thị Danh sách hình ảnh Hình ảnh.

  1. Tạo một bản sao của Danh sách hình ảnh Kiểm soát từ frmMenu2 Tạo mẫu và dán nó vào một biểu mẫu mới, nói frmMenu3Combo .

    Kiểm soát danh sách hình ảnh này có Hình ảnh mà chúng tôi đã tải lên theo cách thủ công từ Máy tính trong Phiên hướng dẫn trước đó của chúng tôi. Bạn có thể mở Trang thuộc tính của nó và kiểm tra Hình ảnh và Chìa khóa của chúng Những cái tên. Nhấp chuột phải vào ImageList Control, đánh dấu Đối tượng ImageListCtl và chọn Tùy chọn thuộc tính.

  2. Điều khiển ImageComboBox được đặt ở phía bên trái của Biểu mẫu dành cho Trình đơn thả xuống, với tên: imgCombo1 . Tìm Kiểm soát Microsoft ImageComboBox từ Điều khiển ActiveX nhóm và đặt nó trên Biểu mẫu. Thay đổi Tên của điều khiển thành imgCombo1 .

  3. Tạo một ImageComboBox Control khác ở phía bên phải, với tên imgCombo2 . ImageComboBox thứ hai mà chúng tôi sẽ sử dụng để hiển thị Hình ảnh và Tên chính của chúng, từ Danh sách hình ảnh0 Kiểm soát, dưới dạng danh sách thả xuống.

  4. Thêm điều khiển Nhãn phía trên điều khiển ImageComboBox thứ hai và thay đổi Chú thích của nó thành Danh sách hình ảnh.

Danh sách hình ảnh trong Image-Combo-Box Control.

Đầu tiên, chúng tôi sẽ làm việc với imgCombo2 thứ hai Kiểm soát và hiển thị Danh sách Hình ảnh từ Điều khiển Danh sách Hình ảnh. Khi bạn đã quen thuộc với Mã, bạn sẽ hiểu rất dễ dàng quy trình Tạo Menu thả xuống.

Chúng tôi đã chia frmMenu3Combo Mô-đun Biểu mẫu Mã VBA thành hai phần. Hãy để chúng tôi thực hiện phần đầu tiên và xem chúng tôi có gì trong đó.

Tóm lại, trong vùng khai báo toàn cục, các biến đối tượng chính đã được khai báo. Form_Load () thủ tục sự kiện khởi tạo điều khiển ImageList trên Biểu mẫu thành biến đối tượng objimgList của nó và gọi cboImageList () chương trình con để thêm hình ảnh từ điều khiển ImageList vào điều khiển ImageComboBox thứ hai. Hãy để chúng tôi xem xét kỹ hơn mã.

Mã vba phần đầu tiên, với Form_Load () cboImageList () các chương trình con được liệt kê bên dưới:

Dim imgcombo1 As MSComctlLib.ImageCombo
Dim imgCombo2 As MSComctlLib.ImageCombo
Dim objimgList As MSComctlLib.ImageList
Const KeyPrfx As String = "X"

Private Sub Form_Load()

Set objimgList = Me.ImageList0.Object

cboImageList 'load imagelist-combo

'CreateMenu 'Create Drop-Down Menu
 
End Sub

Private Sub cboImageList()
Dim j As Integer
Dim strText As String

Set imgCombo2 = Me.ImageCombo2.Object
imgCombo2.ImageList = objimgList

For j = 1 To objimgList.ListImages.Count
    strText = objimgList.ListImages(j).Key
    imgCombo2.ComboItems.Add , , strText,j,,j
Next
    imgCombo2.ComboItems(1).Selected = True
End Sub

Xem lại mã VBA.

Trên khu vực khai báo toàn cục, chúng tôi đã khai báo hai điều khiển ImageComboBox, imgCombo1 cho menu dự án và imgCombo2 để hiển thị hình ảnh từ Danh sách hình ảnh điều khiển. objimgList biến được khai báo cho điều khiển ImageList trên biểu mẫu. Keyprfx biến có ký tự X được khai báo dưới dạng một hằng số.

Trong Form_Load () thủ tục sự kiện objimgList được khởi tạo bằng điều khiển ImageList trên Biểu mẫu, với câu lệnh: Đặt objimgList =Me.ImageList0.Object. Giờ đây, tất cả các hình ảnh được tải trước trong điều khiển ImageList đều có sẵn để truy cập thông qua đối tượng objimgList.

Câu lệnh tiếp theo gọi quy trình con cboImageList () để thêm tất cả các Hình ảnh vào ImgCombo1 kiểm soát.

CreateMenu () cuộc gọi chương trình con hiện đã được nhận xét.

Trong cboImageList () s ubroutine hai biến đã được khai báo.

Tiếp theo, câu lệnh Set imgCombo2 =Me.ImageCombo2.Object gán ImagecomboBox thứ hai trên biểu mẫu cho biến đối tượng imgCombo2.

Giống như điều khiển TreeView, imgCombo2 Danh sách hình ảnh , để chuyển tham chiếu của điều khiển ImageList tới điều khiển ImageComboBox, nhằm truy cập các thuộc tính của ImageList. Câu lệnh tiếp theo: imgCombo2.ImageList =objimgList làm điều đó.

Tiếp theo, mục Đối với. . . Tiếp theo Vòng lặp chạy cho số lượng Hình ảnh trong ImageList Control.

Mục ImageList đầu tiên là Chìa khóa- Giá trị ('form_close') đã được lưu trong strText Biến đổi. Ở đây, chúng tôi đã lấy giá trị Khóa của điều khiển Danh sách Hình ảnh dưới dạng Văn bản hoặc dưới dạng mô tả của hình ảnh ImageCombo, vì đó là Văn bản duy nhất có sẵn. Thẻ thuộc tính trống và chúng tôi có các cách sử dụng khác với thuộc tính này khi chúng tôi làm việc với trình đơn thả xuống.

Tuyên bố tiếp theo là câu quan trọng mà chúng ta phải xem xét kỹ lưỡng, Thêm phương pháp điều khiển ImageComboBox. Cú pháp của câu lệnh như sau:

imgCombo2.ComboItems.Add [Index],[Key],[Text],[Image],[SelImage],[Indentation]

Tất cả các tham số của Thêm () phương pháp là tùy chọn. Đối với lần chạy thử nghiệm đầu tiên của chúng tôi về điều khiển này, chúng tôi sẽ sử dụng các giá trị cho [ Văn bản], [Hình ảnh], [Thụt lề] chỉ . Sau khi xem kết quả của lần chạy thử đầu tiên chế độ xem danh sách hình ảnh, chúng tôi sẽ không sử dụng giá trị tham số [Thụt lề] trên điều khiển ImageCombo này.

Lưu ý:Tuy nhiên, hãy nhớ rằng chúng tôi sẽ cần Thụt lề Giá trị thuộc tính cho Menu thả xuống để làm cho các mục menu trông giống như Root-Node và Child-Node trên TreeView Control. Chúng tôi sẽ sử dụng [Key] Cũng có tham số (cho cả tham số Khóa và văn bản) để truy cập vào Thẻ của một mục menu cụ thể Giá trị tài sản.

Danh sách hình ảnh với Thụt lề tăng dần Cài đặt tham số.

Danh sách hình ảnh chạy thử nghiệm đầu tiên trong ImageCombo2 sẽ giống như hình dưới đây, sau khi áp dụng các giá trị gia tăng cho thụt lề.:

Hiệu ứng của Thụt lề là rõ ràng từ hình ảnh chạy thử nghiệm ở trên. Mỗi mục đã được chuyển sang bên phải, lớn hơn mục trước một khoảng trắng. Chúng tôi có thể sử dụng tính năng này để định vị các Nút mục menu dự án của chúng tôi, trông giống như Nút Cấp độ gốc và Nút Con.

Sau strText value (‘form_close’) biến đầu tiên j đề cập đến số chỉ mục của ImageList, thông số [SelImage] mà chúng tôi đã bỏ qua và giá trị tiếp theo trong j đã được sử dụng để thụt lề cho mỗi mục danh sách khi được đặt trong danh sách ComboBox. Sau lần chạy thử đầu tiên và sau khi xem kết quả, bạn có thể xóa tất cả các tham số sau giá trị chỉ mục hình ảnh.

Câu lệnh tiếp theo: imgCombo2.ComboItems (1) .Selected =True chọn mục đầu tiên trong ComboBox. Khi bạn chọn một mục từ điều khiển ImageCombo thông qua mã, nút Thay đổi () sự kiện xảy ra, nhưng không xảy ra khi bạn chọn một mục trực tiếp trên biểu mẫu. Cập nhật () sự kiện bỏ qua sự kiện cập nhật thủ công và cố gắng gọi thông qua Mã.

Lưu biểu mẫu frmMenu3Combo và mở nó trong Dạng xem Thường. Mở rộng điều khiển ImageList ComboBox thứ hai và xem kết quả. Xóa dấu phẩy và biến j ở cuối , sau biến j đầu tiên, được giữ lại cho số chỉ mục ImageList.

Trình đơn thả xuống Mã VBA của Dự án.

Bây giờ, chúng ta sẽ tiếp tục với phần thứ hai của mã vba mô-đun biểu mẫu để tìm hiểu cách tạo Trình đơn thả xuống Access và xem cách mở Biểu mẫu, Báo cáo và Macro Access bằng cách chọn mục điều khiển ComboBox.

Phần thứ hai của mã vba, bao gồm CreateMenu () chương trình con và ImageCombo1_Click () e thủ tục thông hơi, đã được liệt kê dưới đây:

Private Sub CreateMenu()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
Dim strKey As String
Dim strText As String
Dim typ As Integer

Set imgcombo1 = Me.ImageCombo1.Object
imgcombo1.ImageList = objimgList

strSQL = "SELECT ID, Desc, PID, Type,Macro,Form,Report FROM Menu;"

Set db = CurrentDb
Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)

Do While Not rst.EOF And Not rst.BOF
    If Len(Trim(Nz(rst!PID, ""))) = 0 Then
        strKey = KeyPrfx & CStr(rst!ID)
        strText = rst!Desc
        imgcombo1.ComboItems.Add , strKey, strText, 1, 2, 1 ' image index 1,2([image],[selectedimage])
        'imgcombo1.ComboItems.Add , strKey, strText, "folder_close", "folder_open", 1
    Else
        strKey = KeyPrfx & CStr(rst!ID)
        strText = rst!Desc
        imgcombo1.ComboItems.Add , strKey, strText, 4, 5, 4 'last param is spacing
        'imgcombo1.ComboItems.Add , strKey, strText, "left_arrow", "right_arrow", 4
     
        'Check for the presense of Type Code
        If Nz(rst!Type, 0) > 0 Then
                typ = rst!Type
                With imgcombo1.ComboItems
            Select Case typ
                'save type Code & Form/Report/Macro Name in Tag Property
                Case 1
                    .Item(strKey).Tag = typ & rst!Form
                Case 2
                    .Item(strKey).Tag = typ & rst!Report
                Case 3
                    .Item(strKey).Tag = typ & rst!Macro
            End Select
                End With
        End If
        
    End If
    rst.MoveNext
Loop
rst.Close
imgcombo1.ComboItems.Item(1).Selected = True
End Sub

Private Sub ImageCombo1_Click()
Dim strObject As String
Dim strTag As String
Dim typ As Integer

strTag = ImageCombo1.SelectedItem.Tag
typ = Val(strTag)
strObject = Mid(strTag, 2)

Select Case typ
    Case 1
        DoCmd.OpenForm strObject, acNormal
    Case 2
        DoCmd.OpenReport strObject, acViewPreview
    Case 3
        DoCmd.RunMacro strObject
End Select

End Sub

Tôi nghĩ, trước khi bắt đầu với mã vba, bạn nên xem Hình ảnh bảng (hình ảnh thứ ba từ đầu trang này) nếu bạn chưa thực hiện nó trong phiên tạo Menu Access Project trước đó.

ID trường có giá trị ID duy nhất và là trường Số tự động.

Trường thứ hai Mô tả có tên nhóm loại đối tượng (Biểu mẫu, Báo cáo và Macro) và tên đối tượng thực tế của biểu mẫu, Báo cáo và Macro.

PID Giá trị trường (ID gốc) trống cho tên nhóm đối tượng: Biểu mẫu, Báo cáo, Macro . Các mục giá trị PID trống này, chúng tôi sẽ đặt ở vị trí bên trái trong Menu thả xuống của ImageComboBox, với một thụt lề khoảng cách ký tự và các mục khác sẽ được di chuyển về phía trước với bốn khoảng trắng ký tự. Với việc định vị các mục này, chúng sẽ trông giống như các Nút cấp độ gốc và cấp độ con trong điều khiển TreeView, nhưng chúng tôi sẽ bỏ lỡ các Đường cây kết nối.

Kiểm tra hình ảnh trong điều khiển mục đã chọn ImageComboBox, hình ảnh được đặt ở vị trí ngoài cùng bên trái. Mục Nhóm ở dòng tiếp theo được đặt sau một khoảng trắng ký tự ở phía bên trái và các Mục Nhóm khác cũng xuất hiện ở cùng vị trí. Các mục thành viên con trong mỗi nhóm đã được định vị sau bốn dấu cách ký tự.

Giá trị trường PID đã được kiểm tra và nếu thấy trống thì chúng tôi giả định rằng đó là tên nhóm, nếu không nó là Tên đối tượng Access mà chúng tôi cần mở, khi người dùng nhấp vào nó và đặt họ là thành viên con của nhóm. Giá trị Khóa thực tế trong trường PID không quan trọng ở đây. Trong cả hai trường hợp, chúng tôi cần nó ở đây. Tuy nhiên, chúng tôi có thể sử dụng giá trị trường loại cho mục đích này thay thế.

Tiếp theo, Loại trường chứa loại đối tượng Mã: 1 - Tên biểu mẫu , 2 - Tên Báo cáo, 3 - Tên macro . Ba trường tiếp theo:Biểu mẫu, Báo cáo và Macro có Tên đối tượng thực tế dựa trên mã tương ứng của chúng trong trường Loại. Tôi đã sử dụng ba trường khác nhau để rõ ràng, tất cả chúng đều có thể được đặt trong một cột.

Mã loại Tên đối tượng cặp (giả sử 2rptCategories ) sẽ được lưu trong Thẻ của ImageComboBox Tài sản.

Chương trình con CreateMenu ().

Bây giờ, chuyển sang mã vba của chương trình con CreateMenu ().

Cơ sở dữ liệu và các biến khác đã được khai báo ở phần đầu.

imgcombo1 đối tượng v ariable đã được khởi tạo bằng The Me.ImageCombo1. Đối tượng trên biểu mẫu.

Tiếp theo, imgCombo1.ImageList thuộc tính đã được tải với đối tượng ImageList objimgList Reference , để chúng tôi có thể truy cập trực tiếp vào các giá trị Khóa và Số chỉ mục của ImageList.

Tiếp theo, Trình đơn Tập hợp bản ghi bảng được mở bằng Chuỗi SQL.

Giá trị trường PID đã được kiểm tra, nếu nó trống thì đó là tên nhóm đối tượng, ID giá trị được bắt đầu bằng Constant X và được lưu trong strKey Biến đổi. Trường Mô tả giá trị đã được lưu trong strText Biến đổi.

Câu lệnh tiếp theo gọi phương thức Add () của điều khiển ImageComboBox và mục đầu tiên đã được thêm vào Menu thả xuống.

imgcombo1.ComboItems.Add , strKey, strText, 1, 2, 1

Giá trị tham số đầu tiên Số chỉ mục đã bị bỏ qua, nhưng nó sẽ được tạo tự động. strKey biến bao gồm giá trị Trường ID 1 với hằng số tiền tố X ( X1 ) dưới dạng Chìa khóa tham số. strText chứa Mô tả giá trị trường. Giá trị tiếp theo 1 cái ImageList’s của hình ảnh đầu tiên (Khóa-giá trị folder_close ) Giá trị chỉ số. Nếu bạn thích Khóa-giá trị 'folder_close' trong dấu ngoặc kép, bạn có thể làm như vậy. Giá trị tiếp theo 2 là giá trị chỉ mục của Hình ảnh thứ hai (‘folder_open’) hoặc bạn có thể sử dụng 'folder_open' trong dấu ngoặc kép và tham số cuối cùng 1 là để thụt lề.

Lưu ý: Để xác nhận thứ tự lập chỉ mục của Hình ảnh trong Danh sách hình ảnh Kiểm soát kiểm tra Thứ tự danh sách hình ảnh trong ImageCombo2 Hiển thị chúng tôi đã tạo trước đó. Chúng tôi có thể đã đặt trước giá trị Chỉ mục thành giá trị Khóa bằng một khoảng trắng để thêm số đó cũng vào giá trị Khóa để trông giống như [hình ảnh] 1 form_close. [image] 2 form_open, v.v. . . Điều này tôi sẽ để lại cho bạn như một bài tập cho chính bạn.

Tiếp theo, nếu giá trị trường PID khác 0 thì Tùy chọn menu thực tế sẽ là Thêm ed trong Khác Mệnh đề . Ở đây, chúng tôi đã thêm một mục ImageCombo khác như chúng tôi đã làm trước đó. Đối với [Hình ảnh] [SelImage] tham số mà chúng tôi đã lấy giá trị Chỉ mục mục ImageList 4 5 . Giá trị tham số thụt lề là 4 khoảng trắng ký tự.

Trong mục ImageCombo, Thêm () Phương pháp, trong Khác Mệnh đề, chúng tôi cần lưu Tên đối tượng truy cập ( Mục nhập frmData) cùng với Loại 1 trong Thẻ ( ImageCombo1.ComboItems.Item (strKey) .Tag) Bất động sản. Khi người dùng chọn mục này từ Trình đơn ComboBox thả xuống, nút Nhấp () sự kiện kích hoạt, Thẻ Giá trị thuộc tính đã được trích xuất, Mã loại đã được kiểm tra, nếu mã loại là 1 (Biểu mẫu) rồi đến tên biểu mẫu trong Thuộc tính thẻ ( Mục nhập frmData) được mở bằng DoCmd.OpenForm Lệnh.

Bằng cách này, tất cả Trình đơn Bản ghi bảng đã được thêm vào điều khiển Image ComboBox.

Câu lệnh imgcombo1.ComboItems.Item (1) .Selected =True chọn mục đầu tiên làm mục mặc định trong Image ComboBox Control. Vào thời gian thực thi mã này, Thay đổi () sự kiện kích hoạt, nhưng không kích hoạt khi một mục được chọn bằng cách nhấp vào nó trên Chế độ xem biểu mẫu.

NB: Trước khi mở biểu mẫu cho Chạy thử trình đơn thả xuống, vui lòng xóa Biểu tượng Nhận xét khỏi ‘CreateMenu dòng gọi trong Form_Load () Thủ tục sự kiện. Chúng tôi tạm thời đưa ra nhận xét về dòng này, trong quá trình chạy thử hiển thị Hình ảnh từ ImageList Control trong ImageCombo2 Control.

ImageCombo1_Click () Sự kiện kích hoạt khi người dùng chọn một mục từ Điều khiển Hình ảnh ComboBox. Thẻ của mục đã chọn Giá trị thuộc tính đã được kiểm tra cho Mã loại &Tên đối tượng và mở nó bằng Docmd.Objecttype ObjectName .

Cơ sở dữ liệu demo ProjectMenuV221.accdb ở định dạng .zip được cung cấp bên dưới để Tải xuống.

Tải xuống ProjectMenuV221.zip

ĐỐI TƯỢNG TỪ ĐIỂN

  1. Khái niệm cơ bản về đối tượng từ điển
  2. Khái niệm cơ bản về đối tượng từ điển-2
  3. Sắp xếp các Mục và Khoá Đối tượng Từ điển
  4. Hiển thị Bản ghi từ Từ điển
  5. Thêm các đối tượng lớp dưới dạng các mục từ điển
  6. Cập nhật Mục Từ điển Đối tượng Lớp


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao bạn nên sử dụng PHPs PDO để truy cập cơ sở dữ liệu

  2. Làm thế nào để Ngăn chặn Tham nhũng Cơ sở dữ liệu trong Microsoft Access

  3. Cách khắc phục 'Tài nguyên hệ thống bị vượt quá' khi di chuyển sang Windows 10

  4. Cách mã hóa cơ sở dữ liệu phân tách trong Access 2016

  5. Cách các chuyên gia bất động sản có thể sử dụng Microsoft Access