Thủ thuật lưu hình nhân viên vào table Access với đường dẫn động.

Liên hệ QC

ongke0711

Thành viên gắn bó
Tham gia
7/9/06
Bài viết
1,947
Được thích
2,526
Giới tính
Nam
Tôi thấy có bạn hỏi về vấn đề trên nên sẳn đây tôi cũng chia sẻ cái cách lưu hình cho từng nhân viên trong form của Access. Bạn có thể áp dụng cho việc chèn hình khác như: sản phầm, phụ tùng, văn phòng phẩm v.v...
Có 3 cách lưu hình trong Ms Access:
1. Lưu trong OLE field và dùng Bound Object Frame để hiển thị ảnh.
2. Lưu dưới dạng file Binary Bitmap (BLOB) và dùng Image control để hiển thị ảnh.
3. Lưu đường dẫn tới file ảnh và cũng dùng Image control để hiển thị ảnh.

Cách 1 và 2 tôi không khuyên dùng vì:
- Cách 1: nhiều người đã thường hay gặp lỗi ngoài ý muốn đối với field dạng OLE (OLE Server Error). Mặc dù trường này cũng chỉ lưu liên kết (linking) thôi nhưng thực ra Access cũng tạo ra file bitmap để lưu vào table. Do vậy cách này cũng làm tăng dung lượng file .accdb(.mdb). Bên cạnh đó việc thao tác chọn file ảnh rồi copy rồi paste vô ô trên form cũng gây phiền phức cho người dùng. Nếu chọn cách click phải chuột và chọn "Insert object" thì gặp trở ngại khác là khi phân phối ứng dụng thường Form sẽ bị vô hiệu hoá tính năng click phải chuột để mở menu con mặc định của hệ thống nên việc "Insert object" cũng không làm được luôn.
- Cách 2: Access lưu trực tiếp file ảnh dưới dạng nhị phân vô luôn trong table nên cách này làm tăng dung lượng file Access lên rất nhiều. File Access tối đa chỉ được 2G mà lưu file kèm file ảnh vô thì quá lãng phí bộ nhớ.
Bổ sung thêm:
- Access 2007 trở lên có thêm dạng dữ liệu "Attachement" rất tiện dụng là chỉ cần click đôi chuột ngay trên field rồi chọn file để đính kèm là nó lưu luôn vào table. Cách này cũng làm tăng dung lượng file Access lên nhiều nên tôi cũng không khuyên dùng.
- Hơn nữa nếu dùng các kiểu dữ liệu quá đặc thù của Acces sau này bạn muốn nâng cấp CSDL lên SQL Server cũng không tương thích với mấy dạng dữ liệu này.


Vì lý do trên mà tôi chỉ sử dụng cách thứ 3 và sẽ chia sẻ với các bạn demo dưới đây.
Cách thứ 3 có một điểm bất tiện là bạn phải tạo một folder lưu riêng file ảnh và phải luôn đóng gói đi kèm ứng dụng. Nhưng vấn đề này không phải là lớn vì rất nhiều ứng dụng khi phân phối cũng phải đi kèm các gói khác như: font, OCX, dll, mẫu biểu v.v..

Tuy là dùng cách thứ 3 nhưng có sự thay đổi thuận tiện hơn đó là thay vì lưu đường dẫn cố định của file ảnh vào một trường (Field) của Table thì tôi chỉ dùng đường dẫn động mỗi khi gọi Form hiển thị hình ảnh từng nhân viên (hạng mục), không cần có thêm trường để lưu đường dẫn trong table.
Tại sao tôi dùng đường dẫn động? Vì nếu dùng cách lưu truyền thống (lưu chết đường dẫn lên table) , mỗi khi đem ứng dụng sang máy khác, lại phải chạy code cập nhật lại toàn bộ đường dẫn của file ảnh. Đây là thủ thuật nhỏ nhưng nó khắc phục phiền phức trên.
(File demo tách ra từ file khác nên sẽ bỏ code các nút lệnh không liên quan cho gọn nhẹ)

- Code hàm tạo đường dẫn động:

Mã:
Option Compare Database
Option Explicit

Public Const sFolderName As String = "HinhNhanVien_3x4"     'Khai bao ten folder chua file anh nhan vien

Public Function synImage(ID As Variant, sImgPath As String, sImg As String, frm As Form)
    frm.Controls(sImgPath) = GetImagePath(ID)
    If Dir(frm.Controls(sImgPath)) = "" Then
        frm.Controls(sImg).Picture = ""  'GetImagePath("NoImage")
    Else
        frm.Controls(sImg).Picture = frm.Controls(sImgPath)
    End If
End Function

Public Function GetImagePath(staffID As Variant) As String  'Dung variant vì staffID có the là Number, Text
    Dim vFolderPath As String
    vFolderPath = Application.CurrentProject.path
    GetImagePath = vFolderPath & "\" & sFolderName & "\" & staffID & ".jpg"
End Function





Link file demo: Lưu hình NV với đường dẫn động

Hy vọng có ích cho các bạn mới vào Access. :)
 
Lần chỉnh sửa cuối:
@ongke0711
Mình thấy GPE lâu rồi ko có bài về access (hoặc mình tìm chưa ra). Bạn có thời gian thì viết bài giảng đi, cho GPE thêm phong phú. Kiểu như nhập môn cho access ấy.
 
Mạnh nhớ trên GPE ... HLMT có bài viết lưu hình ảnh qua Access đó
...............................
nên học thêm Access vì trước kia mạnh dùng Excel tạm keo Database.xlsb thấy dùng chán lắm
bỏ Chuyển qua Database.accdb một cái thấy nó sướng tê hết cả người ... hehehehe
 
Lần chỉnh sửa cuối:
Mạnh nhớ trên GPE ... HLMT có bài viết lưu hình ảnh qua Access đó
...............................
nên học thêm Access vì trước kia mạnh dùng Excel tạm keo Database.xlsb thấy dùng chán lắm
bỏ Chuyển qua Database.accdb một cái thấy nó sướng tê hết cả người ... hehehehe
hihi cái dụ này em cũng làm lâu rồi mà cũng lăn tăn là không biết nên lưu trực tiếp hay gián tiếp, cái nào nó cũng có khuyết điểm.
Còn cái vụ "thêm mục về Access " em thấy 2 anh @ongke0711@Hai Lúa Miền Tây giỏi về Access nên có ai cần hỏi hay những có những bài hay chỉ cho người mới
 
hihi cái dụ này em cũng làm lâu rồi mà cũng lăn tăn là không biết nên lưu trực tiếp hay gián tiếp, cái nào nó cũng có khuyết điểm.
Còn cái vụ "thêm mục về Access " em thấy 2 anh @ongke0711@Hai Lúa Miền Tây giỏi về Access nên có ai cần hỏi hay những có những bài hay chỉ cho người mới
Tham khảo thêm bài 79 nhé của HLMT ... cũng là 1 cách hay đó
https://www.giaiphapexcel.com/diendan/threads/xin-nhờ-xem-giúp-code-về-ado.107846/page-4
 
hihihih "Hai Lúa" mà giỏi về công nghệ thông tin nhỉ hihihi
 
Nên copy nó vào thư mục của file luôn ạ
Ví dụ : app/attachments/images/
 
Web KT
Back
Top Bottom