Hướng dẫn câu lệnh INSERT, UPDATE, DELETE trong SQL Excel (ADODB)

Ngày tạo 08/05/2022

 -  1.556 Lượt xem

Hướng dẫn nhóm câu lệnh thao tác dữ liệu (DML) gồm INSERT INTO (chèn thêm dòng/bảng mới), UPDATE SET (cập nhật hàng loạt theo điều kiện) và DELETE (xóa dữ liệu) trực tiếp trên file Excel bằng SQL VBA.

1.INSERT

Insert cho phép bạn chèn một bảng khác vào vị trí cuối cùng của bảng đã có.

Insert dùng cho data mới hoàn toàn (chưa có trong bảng có sẵn).

Có 2 loại Insert: Insert một dòng và Insert một bảng.

1.1.INSERT 1 DÒNG

Chức năng: Thêm 1 dòng vào vị trí cuối cùng trong bảng

Cú pháp: INSERT INTO [Table_name$] (Col1,Col2...Coln) VALUES (...,...,.......)

Ví dụ:

TRUY VẤN SQLSQL Statement
INSERT INTO [Inventory$] (InvtID, Desr) VALUES (‘S0010’, ‘Dien thoai Iphone 12’)

1.2.INSERT BẢNG

Chức năng: chèn thêm 01 vùng (> 1 dòng) dữ liệu mới vào bảng đang có sẵn

Cú pháp: INSERT INTO [Table_name_1$] SELECT Col1,Col2... FROM

[Table_name_2$] WHERE .....

Table_name_1: bảng dữ liệu có sẵn, bảng này sẻ được thêm data vào

Table_name_2: bảng dữ liệu chứa data được dùng để thêm vào bảng table_name_1

Ví dụ:

TRUY VẤN SQLSQL Statement
INSERT INTO [Inventory$] SELECT InvtID, Desr FROM

[D:/Test.xlsx;HRD=YES].[Sheet1$] WHERE InvtID IS NOT NULL

2.UPDATE

Update giúp bạn cập nhật dữ liệu vào bảng đã có tại vị trí dữ liệu bị sai hoặc cần cập nhật mới.

Có 2 loại update: Update một dòng và Update một bảng

2.1.UPDATE 1 DÒNG

Chức năng: cập nhật 01 dòng dữ liệu vào bảng đang có sẵn

Cú pháp: UPDATE [Table_name$] SET Col1 = ..., Col2 = ... WHERE Col3 = ....

Trong đó:

Col3 là tiêu chí cần thiết để dò tìm dòng cần update trên bảng dữ liệu

Có thể kết hợp nhiều điều kiện khác nhau trong mệnh đề WHERE

Ví dụ: UPDATE [Inventory$] SET Desr = ...., Price = ...WHERE InvtID = ‘S0001’

2.2.UPDATE BẢNG

Chức năng: cập nhật nhiều dòng dữ liệu vào bảng đang có sẵn

Cú pháp:

TRUY VẤN SQLSQL Statement
UPDATE [Table_name$] SET Col1 = range_1&i, Col2 = range_2&i WHERE Col3 =

range_3&i

Trong đó:

Col3 là tiêu chí cần thiết để dò tìm dòng cần update trên bảng dữ liệu

Có sử dụng vòng lặp for...next để duyệt qua từng dòng dữ liệu

Ví dụ:

TRUY VẤN SQLSQL Statement
UPDATE [Inventory$] SET Desr =''" & Range("B" & i) & "'', Price =''" & Range("C" & i)

& “’ WHERE InvtID = ''" & Range("A" & i) & "''

3.DELETE

Chức năng: cập nhật “trạng thái” của dòng dữ liệu muốn delete

Cú pháp: (EXCEL: không có chức năng delete data mà chỉ có thể UPDATE trạng thái của 1 hay nhiều dòng)

TRUY VẤN SQLSQL Statement
UPDATE [Table_name$] SET Deleted = 1, Deleted_Date = ‘" & Date & "'' WHERE InvtID = ''"

& Range("A" & i) & “’Trong đó:

Có sử dụng vòng lặp for...is để duyệt qua từng dòng dữ liệu

Ví dụ:

UPDATE [inventory_TM$] " & _

"SET Deleted=1, " & _

"Deleted_Date=''" & Date & "'' " & _

"WHERE invtID =''" & Range("A" & i) & "''

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 & CÚ PHÁP CHUẨNMicrosoft ACE OLEDB 12.0
'' 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ọi rs.Close và cn.Close để giải phóng bộ nhớ RAM và tránh khóa file nguồn.
Web Admin

 
 
Gọi (028) 3514 2046