Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Đọc và Ghi ra QRcode bằng VBA
#1
Chào các Bạn,

Để đọc và ghi ra QRcode ta có thể nhờ vào các dịch vụ trực tuyến trên internet, song cách này có hạn chế là bắt buộc phải kết nối online với Internet mới được.

Có cách khác, không cần kết nối internet online. Các Bạn có thể dùng thư viện ZXing, là dự án mã nguồn mở, link nguồn ở đây: https://zxingnet.codeplex.com/
Với phiên bản ZXing.Net 0.16.0.0 đã có sẵn thư viện DLL của ZXing sẵn sàng cho chúng ta biên dịch file DLL này thành file TLB để chúng ta sử dụng được trong VBA.
Xin đính kèm theo đây file thư viện đã được tôi biên dịch và code VBA mẫu dựa trên hướng dẫn của ZXing.

Chú ý: Muốn sử dụng được thư viện này trong VBA, các Bạn phải:
1. Biên dịch file zxing.dll thành zxing.tlb bằng tiện ích "regasm.exe". Hoặc sử dụng file zxing.tlb tôi đã biên dich sẵn trong file tải xuống từ link sau: 
https://www.mediafire.com/file/9lqcuhc1o...102017.zip

2. Khai báo References trong cửa sổ VBA Editor như ảnh sau:
[Hình: f0iumkijldj6bl14g.jpg]

3. Code VBA tôi đã có sửa lại cho phù hợp và dễ hiểu:
+ Trong khung code bên dưới, các function có tên với từ "Decode" nghĩa là đọc mã QRCode (để cho ra nội dung là Text), "Encode" nghĩa là ghi nội dung Text thành mã QRCode.

Mã:
Option Explicit
Function Decode_QR_Code_From_File(FileName As String, TextVal As String)
   Dim reader As IBarcodeReader
   Dim res As Result

   Set reader = New BarcodeReader

   reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE

   'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
   Set res = reader.DecodeImageFile(FileName)
   TextVal = res.Text
End Function

Function Decode_QR_Code_From_Byte_Array()
   Dim reader As IBarcodeReader
   Dim rawRGB(1000) As Byte
   Dim res As Result

   Set reader = New BarcodeReader

   reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE

   Rem TODO: load bitmap data to byte array rawRGB
   Set res = reader.DecodeImageBytes(rawRGB, 10, 10, BitmapFormat.BitmapFormat_Gray8)
End Function

Function Encode(YourText As String, ToFileName As String)
   Dim writer As IBarcodeWriter
   Dim qrCodeOptions As QrCodeEncodingOptions
   Dim pixelDataResult As PixelData

   Set qrCodeOptions = New QrCodeEncodingOptions
   Set writer = New BarcodeWriter
   writer.Format = BarcodeFormat_QR_CODE
   Set writer.Options = qrCodeOptions
   qrCodeOptions.Height = 100
   qrCodeOptions.Width = 100
   qrCodeOptions.CharacterSet = "UTF-8"
   qrCodeOptions.Margin = 10
   qrCodeOptions.ErrorCorrection = ErrorCorrectionLevel_H

   'writer.WritePngToFile "Test", "D:\interop_qrcode.png"
   writer.WritePngToFile YourText, ToFileName

   Set pixelDataResult = writer.Write("Test")
End Function
Function Decode_QR_Code_From_File_CreateObject(FromFileName As String)
   Dim reader As IBarcodeReader
   Dim res As Result

   Set reader = CreateObject("ZXing.Interop.Decoding.BarcodeReader")

   reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE

   'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
   Set res = reader.DecodeImageFile(FromFileName)
End Function
Chữ ký của lehongduc Lê Hồng Đức
Số ĐT: 0913.941.144
Email: lhongduc@gmail.com, lehongduc@quantribanhang.vn
Website: http://quantribanhang.vn
Reply
Những người đã cảm ơn ongke0711 , kiepgiangho79 , Che_Guevara , maidinhdan , minhminh25767 , jeck09nt , thegioi2018 , mrsiro
#2
Hay quá. Cái này ứng dụng trong nhân sự được nè - dùng tạo mã QR cho nhân viên. App quét QR code cũng nhiều hơn, dễ cài trên các thiết bị di động.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
Cái này hình như không dùng trong Access được phải không? ạ! Mình không thấy file Mdb
Chữ ký của minhminh25767 minhminh25767,gia nhập Thủ Thuật Access từ 22-04 -17.
Reply
Những người đã cảm ơn
#4
(04-10-17, 06:48 PM)lehongduc Đã viết: Chào các Bạn,

Để đọc và ghi ra QRcode ta có thể nhờ vào các dịch vụ trực tuyến trên internet, song cách này có hạn chế là bắt buộc phải kết nối online với Internet mới được.

Có cách khác, không cần kết nối internet online. Các Bạn có thể dùng thư viện ZXing, là dự án mã nguồn mở, link nguồn ở đây: https://zxingnet.codeplex.com/
Với phiên bản ZXing.Net 0.16.0.0 đã có sẵn thư viện DLL của ZXing sẵn sàng cho chúng ta biên dịch file DLL này thành file TLB để chúng ta sử dụng được trong VBA.
Xin đính kèm theo đây file thư viện đã được tôi biên dịch và code VBA mẫu dựa trên hướng dẫn của ZXing.

Chú ý: Muốn sử dụng được thư viện này trong VBA, các Bạn phải:
1. Biên dịch file zxing.dll thành zxing.tlb bằng tiện ích "regasm.exe". Hoặc sử dụng file zxing.tlb tôi đã biên dich sẵn trong file tải xuống từ link sau: 
https://www.mediafire.com/file/9lqcuhc1o...102017.zip

2. Khai báo References trong cửa sổ VBA Editor như ảnh sau:
[Hình: f0iumkijldj6bl14g.jpg]

3. Code VBA tôi đã có sửa lại cho phù hợp và dễ hiểu:
+ Trong khung code bên dưới, các function có tên với từ "Decode" nghĩa là đọc mã QRCode (để cho ra nội dung là Text), "Encode" nghĩa là ghi nội dung Text thành mã QRCode.

Mã:
Option Explicit
Function Decode_QR_Code_From_File(FileName As String, TextVal As String)
   Dim reader As IBarcodeReader
   Dim res As Result

   Set reader = New BarcodeReader

   reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE

   'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
   Set res = reader.DecodeImageFile(FileName)
   TextVal = res.Text
End Function

Function Decode_QR_Code_From_Byte_Array()
   Dim reader As IBarcodeReader
   Dim rawRGB(1000) As Byte
   Dim res As Result

   Set reader = New BarcodeReader

   reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE

   Rem TODO: load bitmap data to byte array rawRGB
   Set res = reader.DecodeImageBytes(rawRGB, 10, 10, BitmapFormat.BitmapFormat_Gray8)
End Function

Function Encode(YourText As String, ToFileName As String)
   Dim writer As IBarcodeWriter
   Dim qrCodeOptions As QrCodeEncodingOptions
   Dim pixelDataResult As PixelData

   Set qrCodeOptions = New QrCodeEncodingOptions
   Set writer = New BarcodeWriter
   writer.Format = BarcodeFormat_QR_CODE
   Set writer.Options = qrCodeOptions
   qrCodeOptions.Height = 100
   qrCodeOptions.Width = 100
   qrCodeOptions.CharacterSet = "UTF-8"
   qrCodeOptions.Margin = 10
   qrCodeOptions.ErrorCorrection = ErrorCorrectionLevel_H

   'writer.WritePngToFile "Test", "D:\interop_qrcode.png"
   writer.WritePngToFile YourText, ToFileName

   Set pixelDataResult = writer.Write("Test")
End Function
Function Decode_QR_Code_From_File_CreateObject(FromFileName As String)
   Dim reader As IBarcodeReader
   Dim res As Result

   Set reader = CreateObject("ZXing.Interop.Decoding.BarcodeReader")

   reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE

   'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
   Set res = reader.DecodeImageFile(FromFileName)
End Function

Cái này làm sao áp dụng vào được vậy Anh. Anh có thể nói các bước để tạo ra được cái mã QR này không anh
Chữ ký của thanhtruong Xin chào, mình là thanhtruong, Tham gia http://thuthuataccess.com/forum từ ngày 23-06 -14.
Reply
Những người đã cảm ơn minhminh25767
#5
(04-10-17, 06:48 PM)lehongduc Đã viết: Chào các Bạn,

Để đọc và ghi ra QRcode ta có thể nhờ vào các dịch vụ trực tuyến trên internet, song cách này có hạn chế là bắt buộc phải kết nối online với Internet mới được.

Có cách khác, không cần kết nối internet online. Các Bạn có thể dùng thư viện ZXing, là dự án mã nguồn mở, link nguồn ở đây: https://zxingnet.codeplex.com/
Với phiên bản ZXing.Net 0.16.0.0 đã có sẵn thư viện DLL của ZXing sẵn sàng cho chúng ta biên dịch file DLL này thành file TLB để chúng ta sử dụng được trong VBA.
Xin đính kèm theo đây file thư viện đã được tôi biên dịch và code VBA mẫu dựa trên hướng dẫn của ZXing.

Chú ý: Muốn sử dụng được thư viện này trong VBA, các Bạn phải:
1. Biên dịch file zxing.dll thành zxing.tlb bằng tiện ích "regasm.exe". Hoặc sử dụng file zxing.tlb tôi đã biên dich sẵn trong file tải xuống từ link sau: 
https://www.mediafire.com/file/9lqcuhc1o...102017.zip

2. Khai báo References trong cửa sổ VBA Editor như ảnh sau:
[Hình: f0iumkijldj6bl14g.jpg]

3. Code VBA tôi đã có sửa lại cho phù hợp và dễ hiểu:
+ Trong khung code bên dưới, các function có tên với từ "Decode" nghĩa là đọc mã QRCode (để cho ra nội dung là Text), "Encode" nghĩa là ghi nội dung Text thành mã QRCode.

Mã:
Option Explicit
Function Decode_QR_Code_From_File(FileName As String, TextVal As String)
   Dim reader As IBarcodeReader
   Dim res As Result

   Set reader = New BarcodeReader

   reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE

   'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
   Set res = reader.DecodeImageFile(FileName)
   TextVal = res.Text
End Function

Function Decode_QR_Code_From_Byte_Array()
   Dim reader As IBarcodeReader
   Dim rawRGB(1000) As Byte
   Dim res As Result

   Set reader = New BarcodeReader

   reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE

   Rem TODO: load bitmap data to byte array rawRGB
   Set res = reader.DecodeImageBytes(rawRGB, 10, 10, BitmapFormat.BitmapFormat_Gray8)
End Function

Function Encode(YourText As String, ToFileName As String)
   Dim writer As IBarcodeWriter
   Dim qrCodeOptions As QrCodeEncodingOptions
   Dim pixelDataResult As PixelData

   Set qrCodeOptions = New QrCodeEncodingOptions
   Set writer = New BarcodeWriter
   writer.Format = BarcodeFormat_QR_CODE
   Set writer.Options = qrCodeOptions
   qrCodeOptions.Height = 100
   qrCodeOptions.Width = 100
   qrCodeOptions.CharacterSet = "UTF-8"
   qrCodeOptions.Margin = 10
   qrCodeOptions.ErrorCorrection = ErrorCorrectionLevel_H

   'writer.WritePngToFile "Test", "D:\interop_qrcode.png"
   writer.WritePngToFile YourText, ToFileName

   Set pixelDataResult = writer.Write("Test")
End Function
Function Decode_QR_Code_From_File_CreateObject(FromFileName As String)
   Dim reader As IBarcodeReader
   Dim res As Result

   Set reader = CreateObject("ZXing.Interop.Decoding.BarcodeReader")

   reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE

   'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
   Set res = reader.DecodeImageFile(FromFileName)
End Function
Cái này làm sao vậy Anh, nghĩa là bây giờ mình tải về rồi, và cài cái thư viên đó như thế nào ạ, rồi làm sao để tạo được nội dung thành Qr,
Mong anh hồi đáp
Chữ ký của minhminh25767 minhminh25767,gia nhập Thủ Thuật Access từ 22-04 -17.
Reply
Những người đã cảm ơn
#6
Chào các Bạn,
Như tôi đã trình bày rõ trong bài, các Bạn chỉ cần làm những việc sau đây là có thể tạo và đọc được QRCode trong Access rồi:
1. Biên dịch file nguồn ra thư viện tlb
Bạn nào không muốn tự làm thì tôi cũng đã làm giúp như trong bài tôi đã nêu. Nếu vậy thì các Bạn chỉ cần sử dụng nữa thôi.
2. Cho đăng ký thư viện này vào hệ thống các thư viện trong ứng dụng Access của các Bạn. Các Bạn xem ảnh chụp màn hình cửa sổ có tiêu đề Preferences - VBA Project
3. Copy nội dung các Procedure tôi đã đăng ở bài trước vào 1 module nào đó rồi sử dụng thôi.
Về tác dụng của các Procedure này đã thể hiện rõ ràng qua tên của nó rồi. Tôi xin nêu cụ thể như sau:

Function Decode_QR_Code_From_File(FileName As String, TextVal As String)

Function này dùng để lấy ra nội dung từ 1 file ảnh QRCode. Các tham số như sau:
+ FileName: tên và đường dẫn của của file ảnh QRCode
+ TextVal: biến chứa nội dung text được đọc ra từ file ảnh


Function Encode(YourText As String, ToFileName As String)

Function này dùng để ghi nội dung text thành file ảnh QRCode. Có các tham số như sau:
+ YourText: nội dung text mà Bạn muốn chuyển thành QRCode
+ ToFileName: tên và đường dẫn file ảnh QRCode (chứa nội dung YourText)

Tất cả đã sẵn sàng rồi. Các Bạn chỉ cần thiết kế Form, trên đó có:
+ Chỗ để chỉ rõ nội dung Text (lấy ra từ QRCode, hay đưa vào thành QRCode)
+ TextBox để nhập vào tên file ảnh QRCode
+ Nút lệnh để lấy nội dung Text ra từ QRCode
+ Nút lệnh để chuyển nội dung chỉ định thành QRCode.
Chữ ký của lehongduc Lê Hồng Đức
Số ĐT: 0913.941.144
Email: lhongduc@gmail.com, lehongduc@quantribanhang.vn
Website: http://quantribanhang.vn
Reply
Những người đã cảm ơn maidinhdan , mrsiro , minhminh25767
#7
Chào các Bạn,

Một số Bạn hỏi có áp dụng được thư viện này vào ứng dụng thực tế hay không?
Cách tốt nhất để chứng minh điều đó là tôi mời các Bạn tham khảo ứng dụng của tôi đang bán ra cho người sử dụng.
Mời các Bạn tham khảo ứng dụng thực tế tại địa chỉ sau: http://quantribanhang.vn/forum và tìm với từ khóa "QRcode" để đọc tài liệu hướng dẫn chi tiết có liên quan.

P/S: Nếu nội dung này vi phạm quy định của diễn đàn này vì đã có nội dung quảng cáo, xin admin cứ tự nhiên xóa. Tôi rất vui lòng tuân thủ quy định chung.
Chữ ký của lehongduc Lê Hồng Đức
Số ĐT: 0913.941.144
Email: lhongduc@gmail.com, lehongduc@quantribanhang.vn
Website: http://quantribanhang.vn
Reply
Những người đã cảm ơn maidinhdan , tranthanhan1962 , mrsiro , minhminh25767
#8
Anh lehongduc cho em hỏi, function ở trên muốn đọc QR code phải có file ảnh của QRcode đó trên máy tính, vậy nếu dùng cách kết nối trực tiếp với các thiết bị quét QRcode thì như thế nào. Tức là không cần phải có file ảnh QRcode nữa mà chỉ cần kết nối các thiết bị quét QRcode là nhận về nội dung trên textbox luôn.
Chữ ký của mrsiro Xin chào, mình là mrsiro, Tham gia http://thuthuataccess.com/forum từ ngày 05-12 -14.
Reply
Những người đã cảm ơn
#9
(06-11-18, 07:21 PM)mrsiro Đã viết: Anh lehongduc cho em hỏi, function ở trên muốn đọc QR code phải có file ảnh của QRcode đó trên máy tính, vậy nếu dùng cách kết nối trực tiếp với các thiết bị quét QRcode thì như thế nào. Tức là không cần phải có file ảnh QRcode nữa mà chỉ cần kết nối các thiết bị quét QRcode là nhận về nội dung trên textbox luôn.
Chào Bạn,
Hiện nay tất cả các thiết bị quét Barcode hoặc QRCode đều được Windows nhận tự động, do vậy Bạn chỉ cần dùng thiết bị quét để quét mã Barcode hoặc QRCode vào thì nội dung của nó sẽ được đưa ra ngay lập tức tại vị trí của con trỏ (tất nhiên, nội dung đó là dạng Text)

Thêm thông tin tham khảo: Bạn có thể sử dụng SmartPhone kết nối với máy tính để làm thiết bị quét mã Barcode / QRCode vào máy tính. Xin mời tham khảo thông tin tại link sau:
http://quantribanhang.vn/forum/viewtopic...=52&t=1700
Chữ ký của lehongduc Lê Hồng Đức
Số ĐT: 0913.941.144
Email: lhongduc@gmail.com, lehongduc@quantribanhang.vn
Website: http://quantribanhang.vn
Reply
Những người đã cảm ơn ongke0711


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Gửi tin nhắn SMS bằng Access lmthu 9 2,032 23-07-18, 07:09 PM
Bài mới nhất: tt1212
  [Help] So sánh giá trị record trên cùng 1 trường trong 1 bảng để có kết quả tính toán đúng tvn_hut 5 478 29-05-18, 10:39 PM
Bài mới nhất: ongke0711
  Active sheet cuối của Excel bằng VBA Access vodainhan 23 3,660 15-05-17, 11:29 PM
Bài mới nhất: vodainhan
  [Help] In bảng ra excell HoangManh 3 1,263 27-03-17, 09:24 PM
Bài mới nhất: maidinhdan
  [Hỏi] Liên kết bảng biểu Excel sang Word thông qua Access vuthaiha90 18 3,423 24-02-17, 04:07 PM
Bài mới nhất: vuthaiha90

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ| PMA Nha Trang| Gỗ Acrylic Không Đường Line