Hàm Query - Kết nối Database truy vấn dữ liệu với câu lệnh SQL

Liên hệ QC

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,589
Được thích
3,979
Giới tính
Nam
Hôm nay các bạn sẽ biết thêm một hàm UDF mới để vận dụng trong việc truy vấn, phân tích dữ liệu.
Với hàm UDF Query tự tạo dưới đây các bạn có thể tận dụng để truy vấn dữ liệu với dòng lệnh SQL với đa dạng nguồn dữ liệu, từ tệp đang đóng và cả tệp dữ liệu đang mở. Hàm Query với đa dạng truy vấn, từ kết nối thư viện ứng dụng Access, cho đến SQLServer, hoặc SQLite hoặc nhiều nhà cung cấp OLEDB khác mà bạn đã cài đặt trên máy tính.


Với lối viết mã mới hoàn toàn so với các hàm thông thường, cách sử dụng Hàm đã được tối ưu rất nhiều để các bạn nhanh chóng nắm được căn bản việc tận dụng hàm. Đơn giản là các bạn chỉ cần nhập công thứccông thức, là có thể truy vấn dữ liệu nhanh chóng.

Với hàm Query này các bạn có thể truy vấn dữ liệu với đầy đủ phương thức mà nhà cung cấp OLEDB và driver ODBC hỗ trợ.

Để sử dụng được hàm QUERY các bạn cần biết kiến thức cơ bản về truy vấn với dòng lệnh SQL:




HƯỚNG DẪN

Hàm QUERY([Các hàm đối số],...)
Các hàm đối số bổ trợ cho hàm QUERY:

Hàm bổ trợKiểuChức năngMặc định
qrSQL(sql)StringChuỗi Query SQL
qrConnect(ConnectString)StringChuỗi mở kết nối Database
QuickAnylisisLongThao tác xử lý dữ liệu căn bản0
qrOrderStyle(Order)IntegerSắp xếp giảm hoặc tăng0
qrCellsInsertBooleanGiản dòng không ghi đè dữ liệu có phía dướiFALSE
qrCellForegroundLongMàu chữ cho tiêu đề0
qrCellBackgroundLongMàu nền cho tiêu đề0
qrCellFontSizeLongCỡ chữ cho tiêu đề12
qrCellFontBoldBooleanTô đậm cho tiêu đềFALSE
qrTitleStringKết quả cho hàm là một tiêu đề tự đặt
qrCopyToRangeÔ trả kết quả mảng


Ví dụ: Truy vấn dữ liệu từ trang tính DATA với cột ID có giá trị là KH01, dữ liệu trả về tại ô B7, sẽ gõ như sau:
=QUERY(qrSQL("SELECT * FROM [DATA$] WHERE ID =""KH01"""),qrCopyTo(B7))
(Nếu không nhập qrCopyTo(B7) thì kết quả sẽ trả về tại ô gõ hàm)

Ví dụ qrConnect:

=QUERY(qrSQL("Select *"),qrConnect("provider=Microsoft.ACE.OLEDB.12.0;Data source='D:\Excel\QueryXL\QueryXL_v1.1.xlsm';mode=Read;Extended Properties=""Excel 12.0;HDR=YES;"";"))
Nếu bạn không nhập qrConnect thì chuỗi sẽ tự động được tạo và kết nối với chính dự án gõ hàm.

Nếu bạn muốn kết nối đến Driver ODBC khác thì sẽ cần đến qrConnect
Bạn có thể đọc phương thức kết nối và driver tại trang
*** Để tìm bản cập nhật mới nhất hãy gõ hàm =QueryUpdateCode()

Để sử dụng hàm QUERY, các bạn chỉ cần sao chép mã trong ứng dụng dưới đây vào Module trong dự án của bạn.

****SẼ SỚM CẬP NHẬT HƯỚNG DẪN VÀ NÂNG CẤP MÃ****

Bạn có thể đọc thêm các bài biết của tôi tại tag #sanbi udf

Tệp tham khảo:
 

File đính kèm

  • QueryXL_v1.1.xlsm
    167.6 KB · Đọc: 45
Lần chỉnh sửa cuối:
Giải pháp
@luong96 qrConnect là hàm tạo chuỗi mở kết nối gồm database và Driver.

Ví dụ đơn giản:
=QUERY(qrSQL("Select *"),qrConnect("provider=Microsoft.ACE.OLEDB.12.0;Data source='D:\Excel\QueryXL\QueryXL_v1.1.xlsm';mode=Read;Extended Properties=""Excel 12.0;HDR=YES;"";"))

Nếu bạn không nhập
qrConnect thì chuỗi sẽ tự động được tạo và kết nối với chính dự án gõ hàm.

Nếu bạn muốn kết nối đến Driver ODBC khác thì sẽ cần đến qrConnect

Bạn có thể đọc phương thức kết nối và driver tại trang

Do tôi chưa có thời gian để cập nhật, các hàm chưa được tối ưu để bổ trợ.
Mình có thử trực tiếp file của b khi chuyển câu lệnh SQL sang khách hàng 02 thì bên dưới trả về có cả KH01 là sao nhỉ?
 
Upvote 0
@caube_vn Dự án đang phát triển dần dần nên có nhiều lỗi phát sinh. Bạn có thể theo dõi cập nhật.
 
Upvote 0
xin hỏi bác @HeSanbi hàm đối số qrConnect(ConnectString) là để làm gì ạ?
 
Upvote 0
@luong96 qrConnect là hàm tạo chuỗi mở kết nối gồm database và Driver.

Ví dụ đơn giản:
=QUERY(qrSQL("Select *"),qrConnect("provider=Microsoft.ACE.OLEDB.12.0;Data source='D:\Excel\QueryXL\QueryXL_v1.1.xlsm';mode=Read;Extended Properties=""Excel 12.0;HDR=YES;"";"))

Nếu bạn không nhập
qrConnect thì chuỗi sẽ tự động được tạo và kết nối với chính dự án gõ hàm.

Nếu bạn muốn kết nối đến Driver ODBC khác thì sẽ cần đến qrConnect

Bạn có thể đọc phương thức kết nối và driver tại trang

Do tôi chưa có thời gian để cập nhật, các hàm chưa được tối ưu để bổ trợ.
 
Upvote 0
Giải pháp
CHo em hỏi, hiện em dùng hàm này nhưng cái header của trường đầu tiên trả về bị mất. E xem code nhưng ko tự sửa đc, anh hỗ trợ em với.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom