8 Bước cơ bản để để thiết lập một câu lệnh SQL trong Excel
Quy trình 8 bước chuẩn mực để thiết lập kết nối ADODB.Connection và thực thi câu lệnh truy vấn SQL trực tiếp trong Excel VBA, giúp trích xuất và làm sạch hàng trăm nghìn dòng dữ liệu chỉ trong vài giây.
Bước 1: Tạo đối tượng lấy dữ liệu
Để tiến hành truy cập vào nơi chứa dữ liệu thì đầu tiên ta phải tạo ra một phương thức kết nối với nơi chứa dữ liệu gọi là ADODB.Connection.
Dim Duy As Object
Set Duy = CreateObject("ADODB.Connection")Lưu ý: "Duy" là tên đối tượng có thể thay đổi theo ý muốn.
Bước 2: Tạo túi chứa dữ liệu
Dim rst As Object
Set rst = CreateObject("ADODB.Recordset")Bước 3: Lấy đường dẫn
Dim duong_dan As String duong_dan = "C:\SQL\Database_SQL.xlsx"
Lưu ý: C:\SQL\Database_SQL.xlsx là toàn bộ đường dẫn của file chứa dữ liệu cần lấy.
Bước 4: Mở đường dẫn đi vào nơi chứa dữ liệu
Duy.Open ("Provider = Microsoft.ACE.OLEDB.12.0;Data Source = " & duong_dan & ";Extended Properties = Excel 12.0")Bước 5: Cho dữ liệu vào túi và lọc dữ liệu theo điều kiện của bạn
rst.Open ("SELECT BatNbr,Crtd_User,DocType,InvcNbr FROM [APDoc$]"), DuyBước 6: Làm sạch dữ liệu
Sheet2.Range("A1:V150000").ClearContentsChú thích: | "Sheet2" là tên sheetcode tại file chúng ta đang thao tác lập trình. | Range("A1:V150000") là vùng cần xóa và có thể thay đổi vùng này tùy vào nhu cầu dùng | ClearContents là cú pháp xóa nội dung trong ô tính excel
Bước 7: Lấy tên các cột của dữ liệu từ túi dữ liệu "rst"
Dim i As Integer For i = 1 To rst.Fields.Count Sheet2.Cells(1, i).Value = rst.Fields(i - 1).Name Next
- Dim i as Interger: khởi tạo biến i
- rst.Fields.Count: đếm số cột đã Select được ở bước 5 (cụ thể là có 5 cột => rst.Fields.Count = 5)
- Sheet2.Cells(1, i).Value = rst.Fields(i - 1).Name: tên từng cột được mang qua ô Cell(1,i)
- Ý nghĩa vòng lặp For - Next: Với mỗi biến "i" chạy từ 1-5 thì sẽ mang từng tên của cột tương ứng qua vùng chứa kết quả
Bước 8: Sao chép các dữ liệu từ túi dữ liệu qua vùng chứa kết quả
Sheet2.Range("A2").CopyFromRecordset rstChú thích: | Sheet2 là sheet chứa kết quả | Range("A2") là ô trả kết quả
Mẹo Tối ưu Truy vấn SQL trong Excel VBA & Xử lý Lỗi Thường gặp
Khi triển khai câu lệnh truy vấn SQL thông qua kết nối ADODB.Connection trên nền tảng Microsoft Excel, bạn cần lưu ý 3 quy tắc vàng sau để đảm bảo tốc độ và độ chính xác tuyệt đối:
'' Chuỗi kết nối chuẩn hỗ trợ cả cột trộn kiểu dữ liệu Số và Văn bản (IMEX=1):
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & _
";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";"
'' Quy tắc bọc tên Sheet và tên Cột có khoảng trắng hoặc tiếng Việt:
strSQL = "SELECT [Mã Hàng], [Tên Sản Phẩm], SUM([Thành Tiền]) AS TongTien " & _
"FROM [Data_BanHang$A1:G50000] " & _
"WHERE [Thành Tiền] IS NOT NULL " & _
"GROUP BY [Mã Hàng], [Tên Sản Phẩm]"
- Luôn thêm tham số
IMEX=1: Giúp trình điều khiển OLEDB không tự ý biến các mã hàng vừa có số vừa có chữ thành giá trịNull. - Giới hạn vùng dữ liệu khi Sheet có định dạng thừa: Thay vì gọi
[Sheet1$], bạn có thể chỉ định rõ[Sheet1$A1:Z50000]để bỏ qua các dòng rác cuối bảng. - Đóng kết nối sau khi
CopyFromRecordset: Luôn gọirs.Closevàcn.Closeđể giải phóng bộ nhớ RAM và tránh khóa file nguồn.
Bài viết liên quan
Thông báo
© 2021 CÔNG TY TNHH ERX VIỆT NAM
Địa chỉ văn phòng: 46/4 Nguyễn Cửu Vân, Phường 17, Quận Bình Thạnh, TP.HCM
share
tweet