Professional Documents
Culture Documents
SQL, VBA VÀ
EXCEL”
MỤC LỤC
Contents
LỜI CẢM ƠN TỪ MASTERMOS.............................................................................................................................. 1
Bài 1: Logic & trình tự học thực hành................................................................................................................ 9
Bài 2: SQL là gì ....................................................................................................................................................... 10
1. SQL là gì? .................................................................................................................................................... 10
2. Tại sao sử dụng SQL ................................................................................................................................. 10
3. Lịch sử ngắn gọn của SQL........................................................................................................................ 10
4. Các câu lệnh SQL có các dạng DDL, DML, DCL ..................................................................................... 11
Bài 3: RDBMS là gì?............................................................................................................................................... 12
1. RDBMS là gì? .............................................................................................................................................. 12
2. Bảng là gì? .................................................................................................................................................. 12
3. Trường là gì ............................................................................................................................................... 12
4. Bản ghi hoặc một hàng (row) là gì?....................................................................................................... 12
5. Cột (column) là gì? ................................................................................................................................... 13
6. Một giá trị NULL là gì? .............................................................................................................................. 13
7. Constraint (ràng buộc) trong SQL ......................................................................................................... 13
8. Toàn vẹn dữ liệu ....................................................................................................................................... 14
Bài 4: Các hệ quản trị cơ sở dữ liệu .................................................................................................................. 15
1. MySQL ......................................................................................................................................................... 15
2. MS SQL Server ........................................................................................................................................... 15
3. ORACLE ....................................................................................................................................................... 16
4. MS ACCESS.................................................................................................................................................. 17
Bài 5: Tìm hiểu sự khác biệt giữa Windows 64bit và Windows 32bit ....................................................... 19
Bài 6: Hướng dẫn cài đặt phần mềm SQL Server 2014 ................................................................................. 22
Bài 7: Tạo thư mục thực hành SQL_Excel......................................................................................................... 41
Bài 8: Cấu hình SQL Server Configuration Manager đảm bảo sự sẵn sàng sử dụng của SQL Server .... 42
Bài 9: Sử dụng SQL Server Management Studio (SSMS) để quản trị cơ sở dữ liệu .................................. 59
Bài 10: Tạo cơ sở dữ liệu INTERFACE, DATA_MART & REPORT_SYSTEM ................................................. 63
Bài 11: Tạo các bảng trong cơ sở dữ liệu, import và export dữ liệu .......................................................... 69
1. TẠO BẢNG DỮ LIỆU VỚI FILE TEXT .......................................................................................................... 69
2. TẠO BẢNG DỮ LIỆU VỚI FILE EXCEL ........................................................................................................ 87
3. TẠO BẢNG BẰNG CÁCH COPY TABLE GIỮA CÁC DATABASE .............................................................. 113
1. Giới thiệu nội dung khóa học và các tài liệu kèm theo khóa học
2. Cài đặt SQL Server 2014
3. Tạo các Database để sử dụng
4. Tạo bảng dữ liệu
a. Tạo bảng bằng import file Excel
b. Tạo bảng bằng import file Text
c. Tạo bảng bằng export – import dữ liệu giữa các Database
d. Tạo bảng bằng câu lệnh SQL
5. Các kiểu dữ liệu thường dùng – SQL Server Data Type
6. Các câu lệnh làm việc với bảng dữ liệu
7. Các câu lệnh làm việc với dữ liệu
8. Các hàm thường dùng trong SQL Server
9. Viết thủ tục xử lý dữ liệu tự động có tham số, để có thể chạy theo các biến khác nhau
(ngày, …)
10. Tạo bảng dữ liệu đích để làm template lên báo cáo Excel
11. Link dữ liệu tự động từ Excel vào SQL Server, đặt biến để có thể thay đổi theo định
kỳ.
12. Xây dựng Data Model trên Excel để làm các loại báo cáo
13. Xây dựng báo cáo dạng Dashboard trên Excel.
14. Giới thiệu SSIS tự động hóa việc ETL dữ liệu hàng (mức giới thiêu, chi tiết sẽ có ở
khóa học khác)
15. Giới thiệu về VBA phân phối kết quả báo cáo tự động (mức giới thiêu, chi tiết sẽ có ở
khóa học khác)
16. Các kiến thức SQL nâng cao góp phần đẩy nhanh tốc độ viết code, tốc độ xử lý của hệ
thống
Bài 2: SQL là gì
SQL là một ngôn ngữ để tương tác với cơ sở dữ liệu, ó bao gồm việc tạo ra cơ sở dữ liệu, xóa,
lấy các hàng, sửa đổi các hàng, vv SQL là một ngôn ngữ chuẩn ANSI (American National Standards
Institute), nhưng có nhiều phiên bản khác nhau của ngôn ngữ SQL. Vậy SQL là gì?
1. SQL là gì?
SQL là viết tắt của Structured Query Language có nghĩa là ngôn ngữ truy vấn có cấu trúc, là
một ngôn ngữ máy tính để lưu trữ, thao tác và truy xuất dữ liệu được lưu trữ trong một cơ sở dữ
liệu quan hệ.
SQL là ngôn ngữ chuẩn cho hệ cơ sở dữ liệu quan hệ. Tất cả các hệ thống quản lý cơ sở dữ
liệu quan hệ (RDMS) như MySQL, MS Access, Oracle, Sybase, Informix, Postgres và SQL Server đều
sử dụng SQL làm ngôn ngữ cơ sở dữ liệu chuẩn.
Ngoài ra, họ đang sử dụng các ngôn ngữ khác nhau, chẳng hạn như:
Cho phép người dùng truy cập dữ liệu trong các hệ thống quản lý cơ sở dữ liệu quan hệ.
Cho phép người dùng mô tả dữ liệu.
Cho phép người dùng xác định dữ liệu trong cơ sở dữ liệu và thao tác dữ liệu đó.
Cho phép nhúng trong các ngôn ngữ khác sử dụng mô-đun SQL, thư viện và trình biên dịch
trước.
Cho phép người dùng tạo và thả các cơ sở dữ liệu và bảng.
Cho phép người dùng tạo chế độ view, thủ tục lưu trữ, chức năng trong cơ sở dữ liệu.
Cho phép người dùng thiết lập quyền trên các bảng, thủ tục và view.
1970 – Tiến sĩ Edgar F. “Ted” Codd của IBM được biết đến như là cha đẻ của các cơ sở dữ liệu
quan hệ. Ông mô tả một mô hình quan hệ cho cơ sở dữ liệu.
1974 – Đã xuất hiện Structured Query Language.
1978 – IBM đã làm việc để phát triển các ý tưởng của Codd và đưa ra một sản phẩm có tên
System / R.
1986 – IBM đã phát triển nguyên mẫu đầu tiên của cơ sở dữ liệu quan hệ và được tiêu chuẩn
hóa bởi ANSI. Cơ sở dữ liệu quan hệ đầu tiên được phát hành bởi Relational Software sau này
được gọi là Oracle.
Lệnh Mô tả
CREATE Tạo ra một bảng mới, một view của một bảng, hoặc các đối tượng khác trong cơ sở dữ
liệu.
ALTER Sửa đổi một đối tượng cơ sở dữ liệu hiện có, chẳng hạn như một bảng.
DROP Xoá toàn bộ một bảng, view của một bảng hoặc các đối tượng khác trong cơ sở dữ liệu.
Lệnh Mô tả
SELECT Lấy ra các bản ghi nhất định từ một hoặc nhiều bảng.
Lệnh Mô tả
REVOKE Lấy lại các đặc quyền được cấp từ người dùng.
Bảng là hình thức lưu trữ dữ liệu phổ biến và đơn giản nhất trong một cơ sở dữ liệu quan hệ.
Chương trình sau đây là một ví dụ về một bảng KHACH_HANG
+----+----------+------+-----------+----------+
+----+----------+------+-----------+----------+
+----+----------+-----+------------+----------+
3. Trường là gì
Mỗi bảng được chia thành các thực thể nhỏ gọi là các trường. Các trường trong bảng
KHACH_HANG bao gồm ID, TEN, TUOI, DIA_CHI VÀ LUONG.
Trường là một cột trong một bảng được thiết kế để lưu trữ thông tin cụ thể về mỗi bản ghi
trong bảng.
+----+----------+------+-----------+----------+
+----+----------+-----+------------+----------+
Ví dụ: một cột trong bảng KHÁCH HÀNG là DIA_CHI, mô tả vị trí và sẽ như dưới đây:
+-----------+
| DIA_CHI |
+-----------+
| Ha Noi |
| Vinh Phuc |
| Ha Noi |
+-----------+
Điều quan trọng là phải hiểu rằng một giá trị NULL khác với giá trị bằng không hoặc một
trường có chứa khoảng trắng (space). Trường có giá trị NULL là giá trị đã để trống trong quá trình
tạo bản ghi.
Constraint có thể là cấp độ cột hoặc cấp độ bảng. Các ràng buộc cấp độ cột chỉ được áp dụng
cho một cột trong khi các ràng buộc mức bảng được áp dụng cho toàn bộ bảng.
Sau đây là một số các ràng buộc phổ biến nhất được sử dụng trong SQL:
NOT NULL – Đảm bảo rằng một cột không thể có giá trị NULL.
DEFAULT – Cung cấp một giá trị mặc định cho một cột khi không có gì được chỉ định.
UNIQUE – Đảm bảo rằng tất cả các giá trị trong một cột là khác nhau.
PRIMARY Key – Xác định mỗi hàng / bản ghi là duy nhất trong một bảng cơ sở dữ liệu.
FOREIGN Key – Xác định một hàng / bản ghi là duy nhất trong bất kỳ bảng cơ sở dữ liệu khác.
CHECK – CHECK constraint đảm bảo rằng tất cả các giá trị trong một cột thỏa mãn một số
điều kiện.
INDEX – Dùng để tạo và lấy dữ liệu từ cơ sở dữ liệu rất nhanh.
Thực thể toàn vẹn – Không có hàng trùng lặp trong một bảng.
Domain Integrity Thực thi kiểm tra tính hợp lệ cho một cột nhất định bằng cách hạn chế
kiểu, định dạng hoặc phạm vi giá trị.
Tính toàn vẹn tham chiếu Các hàng không thể bị xóa, được sử dụng bởi các bản ghi khác.
Tính toàn vẹn do người dùng định nghĩa Thực thi một số quy tắc kinh doanh cụ thể không
rơi vào thực thể, miền hoặc toàn vẹn tham chiếu.
1. MySQL
MySQL là một hệ quản trị cơ sở dữ liệu SQL mã nguồn mở, được phát triển bởi một công ty
Thụy Điển – MySQL AB.
MySQL hỗ trợ nhiều nền tảng khác nhau bao gồm Microsoft Windows, Linux, UNIX và Mac
OS X.
MySQL có các phiên bản miễn phí và trả phí, tùy thuộc vào cách sử dụng của nó (phi thương
mại / thương mại) và các tính năng. MySQL đi kèm với một máy chủ cơ sở dữ liệu SQL rất nhanh,
đa luồng, nhiều người dùng và mạnh mẽ.
Lịch sử
Sự phát triển của MySQL bởi Michael Widenius & David Axmark bắt đầu từ năm 1994.
Phát hành nội bộ đầu tiên vào ngày 23 thứ Tháng năm 1995.
Phiên bản Windows được phát hành vào 8 ngày tháng 1 năm 1998 cho Windows 95 và NT.
Phiên bản 3,23: beta từ tháng 6 năm 2000, sản xuất tháng 1/2001.
Phiên bản 4.0: phiên bản beta từ tháng 8/2002, phát hành sản phẩm tháng 3/2003 (công
đoàn).
Phiên bản 4.01: beta từ tháng 8 năm 2003, Jyoti thông qua MySQL để theo dõi cơ sở dữ liệu.
Phiên bản 4.1: Phiên bản beta từ tháng 6 năm 2004, sản xuất tháng 10 năm 2004.
Phiên bản 5.0: beta từ tháng 3 năm 2005, phát hành sản phẩm tháng 10 năm 2005.
Sun Microsystems mua MySQL AB trên 26 ngày tháng 2 năm 2008.
Version 5.1: sản xuất phát hành 27 ngày tháng 11 năm 2008.
2. MS SQL Server
T-SQL
ANSI SQL
Lịch sử
3. ORACLE
Đây là một hệ thống quản lý cơ sở dữ liệu đa người dùng rất lớn. Oracle là một hệ quản lý cơ
sở dữ liệu quan hệ được phát triển bởi ‘Tổng công ty Oracle’.
Oracle làm việc để quản lý hiệu quả các nguồn lực, một cơ sở dữ liệu thông tin giữa nhiều
khách hàng yêu cầu và gửi dữ liệu trong mạng.
Đây là một lựa chọn máy chủ cơ sở dữ liệu tuyệt vời cho khách hàng / máy tính máy tính.
Oracle hỗ trợ tất cả các hệ điều hành chính cho cả khách hàng và máy chủ, bao gồm MSDOS,
NetWare, UnixWare, OS / 2 và hầu hết các hương vị UNIX.
Lịch sử
Oracle bắt đầu vào năm 1977 và kỷ niệm 32 năm tuyệt vời của nó trong ngành công nghiệp (từ năm 1977
đến năm 2009).
1977 – Larry Ellison, Bob Miner và Ed Oates thành lập các Phòng thí nghiệm Phát triển phần
mềm để đảm nhận công việc phát triển.
1979 – Phiên bản 2.0 của Oracle được phát hành và trở thành cơ sở dữ liệu quan hệ thương
mại đầu tiên và cơ sở dữ liệu SQL đầu tiên. Công ty đổi tên thành Relational Software Inc.
(RSI).
1981 – RSI bắt đầu phát triển các công cụ cho Oracle.
1982 – RSI được đổi tên thành Tổng công ty Oracle.
1983 – Oracle phát hành phiên bản 3.0, viết lại bằng ngôn ngữ C và chạy trên nhiều nền tảng.
1984 – Oracle phiên bản 4.0 được phát hành. Nó chứa các tính năng như kiểm soát đồng thời
– sự nhất quán đọc nhiều phiên bản, v.v …
1985 – Oracle phiên bản 4.0 đã được phát hành. Nó chứa các tính năng như kiểm soát đồng
thời – tính nhất quán đọc nhiều phiên bản, v.v …
2007 – Oracle phát hành Oracle11g. Phiên bản mới tập trung vào phân vùng tốt hơn, di
chuyển dễ dàng, v.v.
4. MS ACCESS
Đây là một trong những sản phẩm phổ biến nhất của Microsoft. Microsoft Access là một
phần mềm quản lý cơ sở dữ liệu cấp cơ sở. Cơ sở dữ liệu MS Access không chỉ là không tốn kém
mà còn là một cơ sở dữ liệu mạnh mẽ cho các dự án quy mô nhỏ.
MS Access sử dụng công cụ cơ sở dữ liệu Jet, sử dụng một ngôn ngữ cụ thể ngôn ngữ SQL
(đôi khi được gọi là Jet SQL).
MS Access đi kèm với phiên bản chuyên nghiệp của gói MS Office. MS Access có giao diện
đồ họa trực quan sử dụng easyto.
Người dùng có thể tạo bảng biểu, truy vấn, biểu mẫu và báo cáo và kết nối chúng cùng với
macro.
Tùy chọn nhập và xuất dữ liệu sang nhiều định dạng bao gồm Excel, Outlook, ASCII, dBase,
Paradox, FoxPro, SQL Server, Oracle, ODBC …
Cũng có định dạng Jet Database (MDB hoặc ACCDB trong Access 2007), có thể chứa ứng dụng
và dữ liệu trong một tệp. Điều này làm cho nó rất thuận tiện để phân phối toàn bộ ứng dụng
cho người dùng khác, những người có thể chạy nó trong môi trường bị ngắt kết nối.
Microsoft Access cung cấp truy vấn tham số. Những truy vấn và bảng truy cập có thể được
tham chiếu từ các chương trình khác như VB6 và. NET thông qua DAO hoặc ADO.
Các phiên bản máy tính để bàn của Microsoft SQL Server có thể được sử dụng với Access như
là một sự thay thế cho Jet Database Engine.
Microsoft Access là một cơ sở dữ liệu dựa trên máy chủ tập tin. Không giống như các hệ thống
quản lý cơ sở dữ liệu quan hệ khách hàng (RDBMS), Microsoft Access không thực hiện các
trình khởi tạo cơ sở dữ liệu, các thủ tục lưu trữ hoặc đăng nhập giao dịch.
2. Xử lý các ứng dụng tốt hơn và khả năng phân phối bộ nhớ tốt hơn so với Win 32-bit.
Win 64bit nó không giới hạn dung lượng RAM cho ứng dụng, nghĩa là nhu cầu của bạn không bị
giới hạn, bạn có thể chạy ứng dụng nặng tốn nhiều RAM như mô hình 3D, autocad, hay Photoshop,...
một cách thoải mái, ứng dụng sẽ làm việc hiệu quả, ổn định và nhanh hơn trong nền tảng này.
Win 32bit chỉ cung cấp tối đa cho mỗi ứng dụng khi chạy là 2GB RAM do vậy nếu ta chạy những
ứng dụng nặng, tốn nhiều dung lượng Ram thì hiệu quả và tốc độ bị hạn chế.
Tuy nhiên không phải máy nào cũng có thể cài được Win 64bit. Nếu CPU của máy không hỗ trợ
thì bạn sẽ không cài và sử dụng được hệ điều hành Win 64bit. Và một số ứng dụng phần mềm hoạt
động được trên Windows 64bit
Với những thông số trên, bạn cũng đã phần nào hiểu và biết được sự khác nhau giữa 2 nền tảng
của Windows 32bit và 64bit. Biết được sự khác biệt giữ Windows 64 bit và Windows 32 bit và sẽ
biết mình nên sử dụng hệ điều hành nào mục đích sử dụng của mình như thế nào với số RAM ra sao
để đảm bảo hiệu quả và tối ưu nhất.
Tương ứng với hệ điều hành của chúng ta, chúng ta sẽ lựa chọn cài đặt phiên bản SQL Server
2014 là 32 bit hay 64 bit để phù hợp với Hệ điều hành.
Tìm file Setup có hình mũi tên đi lên rồi chuột phải chọn Run as Admin, đợi một chút cho máy khởi
động trình cài đặt SQL lên
CHọn Installation,
Trong Installation, chọn New SQL Server stand – alone … -> Lựa chọn đầu tiên
Đến phần nhập key, đây là key do trình cài đặt nhập sẵn, chỉ cần ấn NEXT
TIếp theo chọn I accept phần điều khoản điều kiện của Microsoft
Trình cài đặt chạy phần check theo yêu cầu, đẻ máy tự chạy
Trình cài đặt tự chạy qua 2 màn hình sau, để trình cài đặt tự chạy
Ấn NEXT
Chọn cái đầu tiên trong ảnh sau (Mặc định) rồi ấn Next
Sau khi chọn Select All ở trên, bỏ chọn phân Reporting Services - Native
Sau đó ấn Next
Phần tiếp theo chọn đặt tên cho SQL server của mình
Ấn Next
CHuyển sang chọn Mixed Mode để có thể sử dụng SQL với user và mật khẩu riêng
NHập Password tại phần Mixed Mode, đồng thời phía dưới ấn chọn Add Current user sau đó ấn
Next
RỒi ấn Next
Màn hình check tiếp theo, tất cả mọi thứ tích xanh là được, rồi ấn Next
Trình cài đặt tự chạy, để cho trình cài đặt chạy hết là xong việc cài đặt
Ấn vào Close là hoàn thành, anh chị có thể xem log file trong quá trình cài đặt, 1 file dạng text theo
đường dẫn xuất hiện trên màn hình.
Ấn close
Trong phần All Program của máy tính đã có phần mềm SQL Server 2014
(2) Xây dựng Data Model gồm 3 folder chứa 3 DATABASE như sau:
- INTERFACE: Nơi chứa dữ liệu thô ban đầu, thông thường chỉ lưu dữ liệu 1 ngày, kiểu dữ
liệu chưa được chuẩn hóa.
- DATA_MART: Nơi lưu dữ liệu đã được chuẩn hóa về mặt cấu trúc bảng, kiểu dữ liệu. Lưu dữ
liệu xếp chồng theo nhiều ngày.
- REPORT_SYSTEM: Nơi lưu các dữ liệu đã được tổng hợp, là nguồn để link với Excel, tạo ra
các báo cáo cuối cùng, lưu dữ liệu nhiều ngày.
Trong phần SQL Server Configuration Manager (Local) chú ý phần “SQL Server Services”.
Ở phần màn hình bên phải, hãy chắc chắn rằng SQL Server đang ở State là Running. Nếu
như nó đang ở chế độ Stop thì chúng ta sẽ không truy cập được vào SQL Server
Khi SQL Server Services đang ở chế độ State là Stop, thì khi chúng ta đăng nhập vào SQL
Server sẽ bị thông báo lỗi như sau:
Để bật dịch vụ SQL Server, chúng ta chuột phải vào dịch vụ SQL Server trên máy chúng ta
rồi ấn chọn Start
2. Cấu hình SQL Server để truy cập được từ các máy khác trong mạng LAN1
Vào chức năng:
Bạn cần Start service: SQL Server Browser. Nhấn phải chuột vào nó chọn Property.
1
https://skyit.vn/thu-thuat/huong-dan-cai-dat-va-cau-hinh-sql-server-2014-express-t205633.html
Tương tự bật: Named Pipes, cho phép máy tính khác kết nối vào SQL Server thông qua Server
name.
Tiếp theo, đảm bảo rằng SQL Server của bạn đang chạy dưới chế độ Network Service.
Sau khi cấu hình xong, restart lại service của SQL Server.
Trong trường hợp cấu hình đến đây mà vẫn chưa truy cập được từ máy tính khác vào SQL
Server của chúng ta qua mạng LAN, chúng ta thực hiện tiếp như sau2:
B1: Vào Start > All Programs > SQL Server 2008 R2 > Configuration Tools > SQL Server
Configuration Manager (cách làm tương tự cho SQL Server 2014)
B2: Chọn SQL Server Network Configuration > Protocols for SQLEXPRESS > Chọn TCP/IP >
Enable = Yes
2
https://www.mrcyclo.com/2015/05/cac-set-sql-server-co-truy-cap-qua-mang.html
B3: Chuyển qua tab IP Address > Tại ô TCP Port của IP1 và IPAll đặt là 1433 (đây là cổng kết nối
của SQL Server) > OK
B4: Chuyển qua SQL Server Services > SQL Server (SQLEXPRESS) > Chuột phải > Restart
Để cho chắc chắn hơn là đã có thể truy cập từ máy khác thông qua mạng LAN, bạn nên cho phép
cổng 1433 lưu thông dễ dàng qua cái tường lửa.
Control Panel > System and Security > Windows Firewall > Advanced settings
Phần Inbound Rules, chọn New Rule... > chọn Port > Next > chọn TCP > chọn Specific local
ports: > để là 1433 > Next > chọn Allow the connection > Next > Next > ô Name để là SQL cho
dễ nhớ (bạn có thể chọn tên tùy ý) > Finish
Màn hình SQL Server hiện ra cho phép chọn kết nối vào cơ sở dữ liệu SQL
Lưu ý: Lựa chọn Server type là Database Engine
Có 2 chế độ xác thực là Windows Authentication và SQL Server Authentication
Chế độ Windows Authentication: Là chế độ xác thực người dùng windows, chỉ cần có user
vào windows là được, không cần nhập Password.
Sau khi đăng nhập thành công SQL Server, giao diện sẽ như hình ảnh phía dưới.
Trong ảnh dưới đây, chúng ta đã đăng nhập thành công vào SQL Server với cả 2 chế độ
Windows Authentication (MasterMOS-PC\MasterMOS) và SQL Server Authentication
(sa).
- Màn hình hộp thoại New Database hiện ra, trong phần
o Database name: gõ tên Database là INTERFACE
o Path: Là đường dẫn đến thư mục Database trong thư mục SQL_Excel đã tạo ở các
bước trước đó. Để chọn đường dẫn, ấn vào hình vuông nổi có dấu …, sau đó chọn
đúng đường dẫn đã có sẵn folder.
Trong ổ cứng máy tính của chúng ta cũng có 2 file INTERFACE (lưu Data file) và
INTERFACE_LOG (lưu lịch sử tác động vào SQL Server) xuất hiện tại thư mục
INTERFACE. Đây là thư mục chúng ta đã chọn để lưu ra trong phần File Path.
Tương tự chúng ta cùng thực hành để tạo thêm 2 Database còn lại là DATABASE CHO
DATA_MART VÀ REPORT_SYSTEM
Kết quả hiện ra trong ổ cứng của máy tính như sau:
Database INTERFACE
DATABASE DATA_MART
DATABASE REPORT_SYSTEM
Bắt đầu thực hiện import file TEXT vào DATABASE INTERFACE.
Chuột phải vào Database INTERFACE, chọn Task/Import Data
Màn hình Choose a Data Source hiện ra, mặc định là .Net framework Data Provider for ODBC
Ấn chuột trái vào phần mũi tên, chọn định dạng là Flat File Source
Ấn vào nút Browse để tìm đến file TEXT đang lưu trong máy, trong ví dụ cụ thể này đường dẫn lưu
file TEXT là : D\SQL_EXCEL\1. RAW DATA, chọn FILE TEXT SaoKeTGTT_20170922
Chuyển chuột trái ấn vào phần Columns, tại mục Column Delimiter, lựa chọn ký tự phân tách các
cột, nhìn xuống phần Preview là dấu # thì gõ dấu #, nếu là dấu * thì gõ dấu *, .vvv
Sau khi gõ xong ký tự phân tách các cột thì ấn vào nút Refresh.
Lúc này các cột đã được phân cách bởi một đường thẳng.
Chuyển sang phần Advanced để lựa chọn loại dữ liệu và độ dài của dữ liệu.
Thông thường để cho nhanh khi import text file, người ta hay ấn chuột trái vào cột đầu tiên, sau đó
giữ phím Shift, rồi ấn chuột trái vào cột cuối cùng để lựa chọn tất cả các cột (các cột sẽ được bôi
xanh thể hiện đã chọn hết), rồi chuyển sang phần Data Type mặc định để String, có thể chuyển
sang Unicode String, phần OutputColumnWidth là độ rộng của trường dữ liệu chuyển lên 500.
Nếu trong phần trường dữ liệu, có một giá trị nào đó của trường dữ liệu có độ dài lớn hơn 500 ký
tự thì máy sẽ báo lỗi khi import vào cơ sở dữ liệu, lúc đó cần phải tăng độ rộng của trường dữ liệu
lên ví dụ 1000, …
Nếu gặp các lỗi bất thường khác khi import file, anh chị hãy chụp ảnh rồi gửi qua email
mastermosvn@gmail.com cho NgocChienCN để bạn ấy giải đáp nhé
Phần Preview cho xem trước kết quả đầu ra của dữ liệu được import vào Database, ấn Next
Sau đó tại phần Serer name chọn Server sẽ import, thông thường nếu trên máy của chúng ta thì là
có sẵn tên máy\tên Server, nếu import vào máy khác phải biết tên máy đó hoặc địa chỉ IP của máy
đích.
Chọn mục Authentication là User SQL Server Authentication, nhập user và password.
Mục Database, do khi trỏ chuột ban đầu ta trỏ vào Database INTERFACE, nên phần này hiện ra sẵn
là Database INTERFACE, nếu ta muốn chọn Database khác thì trỏ chuột trái xuống phần mũi tên để
chọn Database khác. Sau đó ấn Next
Mục Destination tiếp theo, đặt tên cho Bảng dữ liệu sẽ được import vào Database, rồi ấn Next
Mục tiếp theo là xác nhận của phần mềm chạy ngay lập tức Run immediately, ấn Next
SQL Server sẽ thực hiện việc import file text vào Cơ sở dữ liệu
Sau khi SQL Server báo Success với tích màu xanh là tất cả các phần đã thành công, việc import
hoàn thành, nếu xảy ra lỗi anh chị hãy tự tìm hiểu với Google, nếu không được tiếp hãy chụp ảnh
hỏi NgocChienCN
Sau khi import xong, ấn Refresh vào phần Table trong Database INTERFACE, bảng dữ liệu vừa
được import sẽ xuất hiện, cho phép chúng ta thực hiện các công việc khác liên quan.
Màn hình Choose a Data Source hiện ra, mặc định là .Net framework Data Provider for ODBC
Ấn chuột trái vào phần mũi tên, chọn định dạng là Microsoft Excel
Phần Browse chọn đường dẫn với file Excel đang lưu trong máy
Chọn file SaoKeBaoLanh_20170922, sau đó ấn Open, hoặc ấn đúp chuột trái vào file
SaokeBaoLanh_20170922
Trong trường hợp ấn Next mà máy báo lỗi thì cài đặt AccessDatabaseEngine như em có gửi để
chữa lỗi import với file Excel dạng *.xlsx
Sau đó tại phần Serer name chọn Server sẽ import, thông thường nếu trên máy của chúng ta thì là
có sẵn tên máy\tên Server, nếu import vào máy khác phải biết tên máy đó hoặc địa chỉ IP của máy
đích.
Chọn mục Authentication là User SQL Server Authentication, nhập user và password.
Màn hình tiếp theo xuất hiện, lựa chọn đặt tên cho bảng dữ liệu, đổi tên chỗ Sheet1$ thành
SaoKeBaoLanh_20170922
Lưu ý, SQL Server sẽ tự động xác định loại dữ liệu khi import file Excel vào, dựa trên nội dung dữ
liệu nó đọc được trong File Excel, nếu muốn SQL Server hiểu 1 cột chỉ toàn số thành chữ, thì trước
đó trong Excel phải Convert cột số đó thành dạng Text. Chọn Next sau khi đổi xong tên file.
Phần Edit Mapping (tham khảo) sẽ cho biết các loại trường dữ liệu sẽ được import vào do SQL tự
định nghĩa, ấn OK khi xem xong, sau đó ấn Next
Màn hình xác nhận lại các nội dung xuất hiện, ấn Finish để máy bắt đầu import file Excel vào
Database.
Máy sẽ import file Excel vào Database một cách rất nhanh chóng, sau đó máy cho biết số lượng bản
ghi đã được import thành công, ấn Close để kết thúc.
Ấn chuột phải vào mục Table của Database Interface, chọn Refresh, bảng dữ liệu được import từ
file Excel sẽ xuất hiện.
Màn hình Choose a Data Source hiện ra, mặc định là .Net framework Data Provider for ODBC
Ấn chuột trái vào phần mũi tên, chọn định dạng là Microsoft Excel
Phần Browse chọn đường dẫn với file Excel đang lưu trong máy
Chọn file SaoKeBaoLanh_20170922, sau đó ấn Open, hoặc ấn đúp chuột trái vào file
SaokeBaoLanh_20170922
Sau đó tại phần Server name chọn Server sẽ import, thông thường nếu trên máy của chúng ta thì là
có sẵn tên máy\tên Server, nếu import vào máy khác phải biết tên máy đó hoặc địa chỉ IP của máy
đích.
Chọn mục Authentication là User SQL Server Authentication, nhập user và password.
Mục Database, chúng ta trỏ chuột xuống chọn Database INTERFACE là Database chúng ta muốn
import vào. Khác với cách 1, ở cách 2 chúng ta cần lựa chọn 1 Database với tên cụ thể để import
vào. Sau đó chúng ta ấn Next
Màn hình tiếp theo xuất hiện, lựa chọn đặt tên cho bảng dữ liệu, đổi tên chỗ Sheet1$ thành
SaoKeBaoLanh_20170922
Lưu ý, SQL Server sẽ tự động xác định loại dữ liệu khi import file Excel vào, dựa trên nội dung dữ
liệu nó đọc được trong File Excel, nếu muốn SQL Server hiểu 1 cột chỉ toàn số thành chữ, thì trước
đó trong Excel phải Convert cột số đó thành dạng Text. Chọn Next sau khi đổi xong tên file.
Phần Edit Mapping (tham khảo) sẽ cho biết các loại trường dữ liệu sẽ được import vào do SQL tự
định nghĩa, ấn OK khi xem xong, sau đó ấn Next
Màn hình xác nhận lại các nội dung xuất hiện, ấn Finish để máy bắt đầu import file Excel vào
Database.
Máy sẽ import file Excel vào Database một cách rất nhanh chóng, sau đó máy cho biết số lượng bản
ghi đã được import thành công, ấn Close để kết thúc.
Ấn chuột phải vào mục Table của Database Interface, chọn Refresh, bảng dữ liệu được import từ
file Excel sẽ xuất hiện.
Trong phần Choose a Data Source, lựa chọn SQL Server Native Client 11.0
Nhập user SQL Server như thông thường để truy cập vào Database nguồn là Database INTERFACE
Mục Servername, gõ tên ServerName mà chúng ta muốn thực hiện việc copy bảng dữ liệu vào.
Nếu Servername trên máy chúng ta, có thể thực hiện copy tên server này bằng cách quay lại màn
hình của SSMS (SQL Server Management Studio), chuột phải vào tên máy chủ SQL của chúng ta, chọn
Connect, rồi sau đó tại Màn hình connect, chọn Ctrl + C để copy tên Server Name. Sau khi copy xong
thì ấn Cancel tại màn hình Connect này.
Paste (Ctrl +V) phần tên Server name vào phần Server name ở mục phía dưới. Nhập user và
password để truy cập Database.
Lưu ý: Nếu muốn copy table lên Database của máy khác thì phải biết tên của máy đó hoặc địa chỉ IP
của máy đó, sau đó cũng tiến hành nhập user và pass truy cập bình thường.
Phần tên Database, chọn Database đích để copy bảng dữ liệu vào, trong trường hợp này là
Database DATA_MART
Phần tiếp theo lựa chọn bảng dữ liệu muốn copy sang, ở đây chúng ta có thể lựa chọn một hoặc
nhiều bảng dữ liệu để copy từ Database nguồn sang Database đích.
Tại Database đích chúng ta có thể thực hiện đổi tên bảng dữ liệu nếu muốn
Trong ví dụ này là copy bảng dữ liệu SaoKeTGTK_20170922 thì tích vào ô vuông bên cạnh bảng
này là được, sau đó ấn Next
SQL Server sẽ tiến hành export bảng từ Database nguồn sang Database đích.
4. EXPORT RA TEXT FILE TỪ 1 BẢNG DỮ LIỆU ĐỂ GỬI CHO ĐƠN VỊ KHÁC SỬ DỤNG
Giả sử cơ sở dữ liệu nguồn Interface có chứa bảng SaoKeTGTK_20170922, chúng ta muốn export
dữ liệu của bảng này để gửi số liệu cho một đơn vị khác, chúng ta sẽ xuất bảng này ra dạng file text
(đuôi *.txt), để làm việc này chúng ta sử dụng tính năng Export data như sau:
Chuột phải vào Database INTERFACE chọn Task/Export Data
Trong phần Choose a Data Source, lựa chọn SQL Server Native Client 11.0
Nhập user SQL Server như thông thường để truy cập vào Database nguồn là Database INTERFACE
Sau đó ấn Next để chọn điểm đến Destionation, ở đây chúng ta muốn xuất ra Text file nên chúng ta
cần lựa chọn Destionation là: Flat File Destination
Sau đó chúng ta ấn Browse để chọn 1 nơi sẽ lưu file text được xuất ra, chúng ta chọn folder sẽ lưu
file, rồi đặt tên cho file cần xuất ra, ví dụ đặt tên là SaoKe_TGTK_20170922_OP
Chú ý tích chọn mục Column Names in the first data row tức là phần tiêu đề cột có trong cột đầu
tiên của bảng dữ liệu được xuất ra.
Sau đó ấn Next
Mục tiếp theo lựa chọn Next, để mặc định các phần khác
Màn hình tiếp theo, chúng ta cần chọn bảng dữ liệu mà chúng ta định export ra Text file, trong ví
dụ này là SaoKeTGTK_20170922
Trong phần Column Delimiter, nhập ký tự # từ bàn phím. # là ký tự sẽ được sử dụng để ngăn cách
giữa các cột trong file dữ liệu đích.
SQL Server sẽ export ra file text bảng dữ liệu SaoKeTGTK_20170922 từ Databae Interface và lưu ra
file tên là SaoKeTGTK_20170922_OP.txt đặt trên ổ cứng. Chúng ta có thể gửi file này cho đơn vị
khác sử dụng
5. CÁCH IMPORT FILE TEXT VÀO EXCEL MỘT CÁCH CHUẨN NHẤT (MICROSOFT HƯỚNG
DẪN)
B1: Vào Tab Data, chọn From Text trong nhóm Get External Data
B2: Trỏ chuột tới file Text cần mở, sau đó ấn Import.
B3: Màn hình Text Import Wizard xuất hiện, lựa chọn Delimited (nếu các cột các nhau bởi 1 ký tự
đặc biệt như dấu #,*, /, Tab…) hoặc Fixed width (nếu các cột cách nhau bởi dấu cách) -> Thông
thường hay chọn Delimited
B4: Nhập ký tự phân chia các cột, tích vào nút kiểm Other, và trong ví dụ này nhập dấu #, các cột đã
được chia ra, không bị díu vào nhau như lúc đầu.
Sau đó ấn Finish.
B6: Màn hình hiện ra hỏi nơi sẽ lưu dữ liệu, mặc định là tại trang tính hiện thời. Nếu chọn New
Worksheet thì dữ liệu sẽ hiển thị trong trang tính mới của cùng bảng tính workbook. Sau đó ấn OK
B7: Dữ liệu file text đã được import thành công vào Excel.
SQL Server cung cấp sáu Kiểu dữ liệu được liệt kê như dưới đây:
Kiểu dữ liệu Từ Từ
tinyint 0 255
bit 0 1
decimal -10 ^ 38 +1 10 ^ 38 -1
numeric -10 ^ 38 +1 10 ^ 38 -1
date Lưu trữ một ngày như ngày 30 tháng 6 năm 1991
Lưu ý: datetime có độ chính xác 3,33 mili giây, trong đó độ chính xác của smalldatetime là 1 phút.
1 char
Chiều dài tối đa 8.000 ký tự (cố định chiều dài ký tự không phải là ký tự Unicode)
2 varchar
Tối đa 8.000 ký tự. (Dữ liệu không phải dạng Unicode có độ dài biến đổi).
Chiều dài tối đa 231 ký tự, Dữ liệu không phải dạng Unicode có độ dài biến (chỉ có
trong SQL Server 2005).
4 text
Dữ liệu không phải dạng Unicode có chiều dài không thay đổi với độ dài tối đa là
2,147,483,647 ký tự.
1 nchar
2 nvarchar
Chiều dài tối đa 231 ký tự (chỉ SQL Server 2005). (Chiều dài biến Unicode)
4 ntxt
1 binary
Chiều dài tối đa 8.000 byte (Dữ liệu nhị phân chiều dài cố định)
2 varbinary
Chiều dài tối đa 8.000 byte (Dữ liệu nhị phân chiều dài biến đổi)
3 varbinary(max)
Chiều dài tối đa 231 byte (chỉ SQL Server 2005). (Dữ liệu nhị phân chiều dài biến)
4 image
Chiều dài tối đa là 2,147,483,647 byte. (Dữ liệu nhị phân chiều dài biến)
1 sql_variant
Lưu trữ các giá trị của các Kiểu dữ liệu khác nhau được hỗ trợ bởi SQL Server, ngoại
trừ văn bản, ntext và dấu thời gian.
2 timestamp
Lưu trữ một số duy nhất trong cơ sở dữ liệu được cập nhật mỗi khi một hàng được
cập nhật
3 uniqueidentifier
Lưu trữ một định danh duy nhất trên toàn cầu(GUID)
4 xml
Lưu trữ dữ liệu XML. Bạn có thể lưu trữ các thể hiện xml trong một cột hoặc một
biến (chỉ có SQL Server 2005).
6 table
Chúng ta thường chỉ cần nhớ một số kiểu dữ liệu hay dùng nhất như sau:
Toán tử số học
Toán tử so sánh
Toán tử logic
Các toán tử sử dụng để phủ định các điều kiện
Toán tử Mô tả Ví dụ
+ (cộng) Thêm các giá trị ở hai bên của toán tử. a + b sẽ cho 30
– (trừ) Lấy toán hạng bên phải trừ toán hạng bên trái. a – b sẽ cho -10
* (nhân) Nhân giá trị ở hai bên của toán tử. A * b sẽ cho 200
Toán tử Mô tả Ví dụ
= Kiểm tra nếu các giá trị của hai toán hạng bằng nhau hay (a = b) là false.
không, nếu có thì điều kiện trở thành true.
!= Kiểm tra nếu các giá trị của hai toán hạng bằng hoặc không, (a != b) là true.
nếu các giá trị không bằng nhau thì điều kiện trở thành true.
<> Kiểm tra nếu các giá trị của hai toán hạng bằng hoặc không, (a <> b) là true.
nếu các giá trị không bằng nhau thì điều kiện trở thành true.
> Kiểm tra nếu giá trị của toán hạng trái lớn hơn giá trị của (a > b) là là false.
toán hạng phải, nếu có thì điều kiện trở thành true.
< Kiểm tra nếu giá trị của toán hạng trái nhỏ hơn giá trị của (a < b) là true.
toán hạng phải, nếu có thì điều kiện trở thành true.
>= Kiểm tra nếu giá trị của toán hạng trái lớn hơn hoặc bằng (a >= b) là là false.
giá trị của toán hạng phải, nếu có thì điều kiện trở thành
true.
<= Kiểm tra nếu giá trị của toán hạng trái nhỏ hơn hoặc bằng (a <= b) là true.
giá trị của toán hạng phải, nếu có thì điều kiện trở thành
true.
!< Kiểm tra nếu giá trị của toán hạng trái không nhỏ hơn giá trị (a !< b) là sai.
của toán hạng phải, nếu có thì điều kiện trở thành true.
!> Kiểm tra nếu giá trị của toán hạng trái không lớn hơn giá trị (a! b) là true.
của toán hạng phải, nếu có thì điều kiện trở thành true.
1 ALL
Toán tử ALL được sử dụng để so sánh một giá trị với tất cả các giá trị trong một
tập hợp giá trị khác.
2 AND
Toán tử AND cho phép tồn tại nhiều điều kiện trong mệnh đề WHERE của câu
lệnh SQL.
3 ANY
Toán tử ANY được sử dụng để so sánh một giá trị với bất kỳ giá trị thích hợp
nào trong danh sách theo điều kiện.
4 BETWEEN
Toán tử BETWEEN được sử dụng để tìm kiếm các giá trị trong một tập các giá
trị, với giá trị nhỏ nhất và giá trị lớn nhất.
5 EXISTS
Toán tử EXISTS được sử dụng để tìm kiếm sự tồn tại của một hàng trong một
bảng được chỉ định đáp ứng một tiêu chí nhất định.
6 IN
Toán tử IN được sử dụng để so sánh một giá trị với một danh sách các giá trị
văn bản đã được chỉ định.
7 LIKE
Toán tử LIKE được sử dụng để so sánh một giá trị với các giá trị tương tự sử
dụng toán tử ký tự đại diện.
8 NOT
Toán tử NOT đảo ngược ý nghĩa của toán tử logic mà nó được sử dụng. Ví dụ:
NOT EXISTS, NOT BETWEEN, NOT IN, vv Đây là một toán tử phủ định.
9 OR
Toán tử OR được sử dụng để kết hợp nhiều điều kiện trong mệnh đề WHERE
của câu lệnh SQL.
10 IS NULL
Toán tử NULL được sử dụng để so sánh một giá trị với một giá trị NULL.
11 UNIQUE
Toán tử UNIQUE tìm kiếm tất cả các hàng của một bảng quy định cho tính duy
nhất (không có bản sao).
1. Cú pháp
Cú pháp cơ bản của câu lệnh SELECT như sau:
FROM table_name
WHERE [CONDITION|EXPRESSION];
Có các loại biểu thức SQL khác nhau, được đề cập dưới đây –
Boolean
Numeric
Date
FROM table_name
[FROM table_name
WHERE CONDITION];
Trong đó, phép tính số được sử dụng cho một biểu thức toán học hoặc bất kỳ công thức nào. Sau
đây là một ví dụ đơn giản về việc sử dụng biểu thức SQL Numeric:
SELECT CURRENT_TIMESTAMP;
+---------------------+
| Current_Timestamp |
+---------------------+
| 2009-11-12 06:40:23 |
+---------------------+
1 row in set (0.00 sec)
Một ví dụ khác về biển thức Date trong SQL:
SELECT GETDATE();
+-------------------------+
| GETDATE |
+-------------------------+
| 2009-10-22 12:07:18.140 |
+-------------------------+
1 row in set (0.00 sec)
Cú pháp
Cú pháp cơ bản của câu lệnh CREATE DATABASE này như sau:
Ví dụ
Nếu bạn muốn tạo một cơ sở dữ liệu mới <testDB>, thì câu lệnh CREATE DATABASE sẽ như
dưới đây:
Đảm bảo bạn có quyền quản trị viên trước khi tạo bất kỳ cơ sở dữ liệu nào. Một khi cơ sở dữ
liệu được tạo ra, bạn có thể kiểm tra nó trong danh sách các cơ sở dữ liệu như sau:
Cú pháp
Ví dụ
Nếu bạn muốn xóa một cơ sở dữ liệu đang tồn tại <testDB>, thì câu lệnh DROP DATABASE
sẽ như thể hiện dưới đây:
Chú ý – Hãy cẩn thận trước khi sử dụng hoạt động này bởi vì bằng cách xóa một cơ sở dữ liệu hiện có sẽ
dẫn đến mất thông tin được lưu trữ trong cơ sở dữ liệu.
Đảm bảo bạn có quyền quản trị viên trước khi xóa (drop) bất kỳ cơ sở dữ liệu nào. Khi cơ sở
dữ liệu bị xóa, bạn có thể kiểm tra nó trong danh sách các cơ sở dữ liệu như hình dưới đây:
SHOW DATABASES;
Kết quả:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| orig |
| test |
+--------------------+
4 rows in set (0.00 sec)
3. Select Database
Khi bạn có nhiều cơ sở dữ liệu trong lược đồ SQL. Khi đó trước khi thao tác với cơ sở dữ liệu,
bạn cần phải chọn một cơ sở dữ liệu để làm việc với nó.
Câu lệnh SQL USE được sử dụng để chọn bất kỳ cơ sở dữ liệu nào hiện có trong lược đồ SQL.
Cú pháp
USE DatabaseName;
Ví dụ
Bạn có thể kiểm tra các cơ sở dữ liệu sẵn có như hình dưới đây:
Kết quả:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| orig |
| test |
| testDB |
+--------------------+
5 rows in set (0.00 sec)
Bây giờ, nếu bạn muốn làm việc với cơ sở dữ liệu testDB thì bạn có thể thực hiện lệnh SQL
sau và bắt đầu làm việc với cơ sở dữ liệu testDB.
USE testDB;
CREATE TABLE là từ khóa cho hệ thống cơ sở dữ liệu được sử dụng để tạo một bảng mới với
tên bảng là duy nhất trong CSDL
Sau đó trong ngoặc đơn là khai báo cho các cột trong bảng và kiểu dữ liệu của nó.
Cú pháp:
CREATE TABLE TEN_DATABASE.dbo.TEN_BANG
(
COT1 LOAIDULIEU1,
COT2 LOAIDULIEU2,
COT3 LOAIDULIEU3,
...(CAC COT TIEP THEO - LOAI DU LIEU TIEP THEO)
)
---VI DU
---VI DU
---CU PHAP
TRUNCATE TABLE TEN_DATABASE.dbo.TEN_BANG
---VI DU
---VI DU
DROP TABLE DATA_MART.dbo.FactTermDeposits1
6. Đổi kiểu dữ liệu Data Type cho 1 trường/cột dữ liệu – ALTER TABLE ALTER COLUMN
---Tac dung: Doi kieu du lieu cho truong du lieu tu kieu du lieu nay sang kieu du lieu khac
---CU PHAP:
ALTER TABLE TEN_DATABASE.dbo.TEN_BANG ALTER COLUMN TEN_COT KIEUDULIEU
---Vi du: Doi ten kieu du lieu cua truong STT bang DimBranches tu int sang float
---LƯU Ý: VIẾT CÂU LỆNH CÓ ĐẦY ĐỦ TÊN DATABASE VÀ TÊN BẢNG ĐỂ TRÁNH TRƯỜNG HỢP BỊ LỖI
---KHI CHẠY CÂU LỆNH DO PHẦN DATABASE ĐANG ĐỂ MẶC ĐỊNH LÀ DATABASE master
1.2 SELECT *
---TÁC DỤNG: XEM TOÀN BỘ CÁC TRƯỜNG DỮ LIỆU, CÁC DÒNG DỮ LIỆU CÓ TRONG 1 BẢNG DỮ LIỆU.
---CHÚ Ý: CÂU LỆNH NÀY KHÔNG KHUYẾN KHÍCH SỬ DỤNG VÌ CÓ THỂ LÀM ĐƠ HỆ THỐNG DO SỐ LƯỢNG
--- BẢN GHI TRUY VẤN RA KẾT QUẢ LÀ QUÁ LỚN
--VÍ DỤ:
---TÁC DỤNG: Xem TOP n, n = 10, 20, vvv... CÁC BẢN GHI TRONG BẢNG DỮ LIỆU
---THÔNG THƯỜNG CHÚNG TA DÙNG CÚ PHÁP NÀY ĐỂ BIẾT CÁC TRƯỜNG DỮ LIỆU TRONG BẢNG
---MỘT CÁCH NHANH CHÓNG ---> VÀ CÂU LỆNH NÀY SẼ KHÔNG LÀM ĐƠ HỆ THỐNG KHI CÓ NHIỀU DÒNG DỮ LIỆU
---VÍ DỤ:
SELECT TOP 100 * FROM INTERFACE..SaoKeTGTT_20170922
--- CHÚ Ý: ĐỂ TIẾT KIỆM THỜI GIAN VIẾT CODE, VÀ TĂNG ĐỘ CHÍNH XÁC CHO CÂU LỆNH
--- CHÚNG TA SẼ VIẾT MỆNH ĐỀ SELECT FROM TEN_DATABASE..TEN_TABLE TRƯỚC
----SAU ĐÓ CHÚNG TA MỚI VIẾT CÁC CỘT/TRƯỜNG TRONG BẢNG DỮ LIỆU
----VÌ KHI ĐÓ SQL SERVER SẼ CÓ CHỨC NĂNG GỢI NHỚ CÁC CỘT/TRƯỜNG DỮ LIỆU CHO CHÚNG TA.
----VÍ DỤ
----TÁC DỤNG: CÂU LỆNH SELECT DISTINCT SẼ GIÚP CHÚNG TA GỌI RA DUY NHẤT
----CÁC BẢN GHI KHÔNG TRÙNG NHAU CỦA 1 TRƯỜNG DỮ LIỆU HOẶC MỘT SỐ TRƯỜNG DỮ LIỆU
----TRONG BẢNG DỮ LIỆU CỦA CHÚNG TA.
----CÁCH NÀY SẼ GIÚP CHÚNG TA NHANH CHÓNG XÁC ĐỊNH CÁC THÀNH PHẦN CỦA MỘT TRƯỜNG DỮ LIỆU TRONG BẢNG
---VÍ DỤ: XÁC ĐỊNH CÁC CHI NHÁNH CÓ TRONG BẢNG SAO KÊ TGTT_20170922
--- XÁC ĐỊNH CÁC LOẠI TIỀN TỆ Có tRONG BẢNG TIỀN GỬI tHANH TOÁN 20170922
---VÍ DỤ XÁC ĐỊNH CÁC CHI NHÁNH VÀ TỪNG LOẠI TIỀN TỆ TƯƠNG ỨNG VỚI TỪNG CHI NHÁNH CÓ TRONG BẢNG
--- SAO KÊ TGTT_20170922
--- TÁC DỤNG: COPY TOÀN BỘ BẢNG DỮ LIỆU HIỆN THỜI SANG 1 BẢNG DỮ LIỆU MỚI
---- CHÚNG TA THƯỜNG HAY DÙNG CÂU LỆNH NÀY ĐỂ BACKUP 1 BẢNG DỮ LIỆU TRƯỚC KHI
--- LÀM MỘT VIỆC GÌ ĐÓ QUAN TRỌNG TÁC ĐỘNG LÊN BẢNG DỮ LIỆU HIỆN THỜI
---- (VÍ DỤ DELETE BẢN GHI, UPDATE BẢN GHI...)
--- VÍ DỤ:
SELECT * INTO INTERFACE..SAOKETGTT_20170922_BAK
FROM INTERFACE..SaoKeTGTT_20170922
---TÁC DỤNG: COPY MỘT PHẦN BẢNG DỮ LIỆU GỐC SANG BẢNG DỮ LIỆU MỚI NHỎ HƠN
--- NHỜ CÂU LỆNH LỌC DỮ LIỆU SAU MỆNH ĐỀ WHERE
---VÍ DỤ THỰC TẾ: CHÚNG TA CÓ MỘT BẢNG DỮ LIỆU GỒM TẤT CẢ CÁC KHỐI ĐƯỢC IMPORT VÀO DATABASE
--- SAU ĐÓ CHÚNG TA CHỈ MUỐN TẠO RA BẢNG DỮ LIỆU MỚI BAO GỒM DỮ LIỆU CỦA KHỐI KHÁCH HÀNG CÁ NHÂN
--- THÌ ĐIỀU KIỆN LỌC DỮ LIỆU CỦA CHÚNG TA SẼ LÀ WHERE KHOI = 'INDIV' HOẶC SECTOR GIỮA 1602 VÀ 1899
--- VÍ DỤ:
Mệnh đề WHERE trong SQL được sử dụng để chỉ định một điều kiện trong khi lấy dữ liệu từ một
bảng hoặc bằng cách join với nhiều bảng. Nếu điều kiện thỏa mãn, thì nó trả về một giá trị cụ thể từ
bảng. Bạn nên sử dụng mệnh đề WHERE để lọc các bản ghi và chỉ lấy các bản ghi cần thiết.
Mệnh đề WHERE không chỉ được sử dụng trong câu lệnh SELECT, mà nó còn được sử dụng trong
câu lệnh UPDATE, DELETE, vv, mà sẽ được đề cập đến trong các bài tiếp theo.
---TÁC DỤNG: CHO PHÉP LỌC DỮ LIỆU TỪ CÂU LỆNH SELECT ĐỂ CHỈ HIỂN THỊ CÁC LOẠI DỮ LIỆU
--- MONG MUỐN VỚI CÁC ĐIỀU KIỆN LỌC DỮ LIỆU SAU MỆNH ĐỀ WHERE
--- LƯU Ý: KHI TRUY XUẤT DỮ LIỆU TRONG DATABASE TỪ HỆ THỐNG CỦA IT, VÍ DỤ ORS, DWH
--- BẮT BUỘC PHẢI SỬ DỤNG MỆNH ĐỀ WHERE SAU CÂU LỆNH SELECT ĐỂ LỌC MỘT SỐ BẢN GHI MONG MUỐN
--- TRÁNH LÀM ĐƠ HỆ THỐNG.
----VÍ DỤ TÌM CÁC BẢN GHI CỦA KHÁCH HÀNG CÓ MÃ KHÁCH HÀNG LÀ 149753 TRONG BẢNG SAO KÊ TIỀN GỬI
----THANH TOÁN 20170922
--- CÂU LỆNH:
-----CÚ PHÁP:
----TÁC DỤNG: CHO PHÉP CHÚNG TA SỬ DỤNG CÁC HÀM TÍNH TOÁN TỔNG HỢP DỮ LIỆU ĐỂ TỔNG HỢP DỮ LIỆU
---- THEO CÁC TRƯỜNG ĐƯỢC NHÓM BỞI MỆNH ĐỀ GROUP BY
--- LƯU Ý: TÊN CỘT PHÍA SAU MỆNH ĐỀ SELECT VÀ MỆNH ĐỀ GROUP BY DÙNG ĐỂ NHÓM DỮ LIỆU LẠI
---- CẦN PHẢI GIỐNG NHAU
--- VÍ DỤ: TÍNH TOÁN SỐ DƯ TIỀN GỬI THANH TOÁN BẰNG VND CỦA CÁC CHI NHÁNH CÓ TRONG BẢNG SAO KÊ
TGTT_20170922
----VÍ DỤ: TÍNH TOÁN SỐ DƯ TIỀN GỬI THANH TOÁN BẰNG NGOẠI TỆ THEO TỪNG CHI NHÁNH, TỪNG SBV_CODE
----TRONG BẢNG SAO KÊ TGTT 20170922
---CÚ PHÁP:
SELECT TEN_COT_CAN_XEM FROM TEN_DATABASE.dbo.TEN_BANG_DU_LIEU
WHERE DIEU_KIEN_LOC_DU_LIEU
ORDER BY TEN_COT_1, TEN_COT_2
----TÁC DỤNG: CHO PHÉP SẮP XẾP THỨ TỰ XUẤT HIỆN SAU CÂU LỆNH SELECT
---- VÍ DỤ: LIỆt kê CÁC BẢN GHI CỦA BẢNG DỮ LIỆU SAO KÊ TGTT_20170922
---SẮP XẾP THEO TÊN CHI NHÁNH
---CÂU LỆNH:
SELECT * FROM INTERFACE..SaoKeTGTT_20170922
ORDER BY CO_CODE
---LƯU Ý: TRONG TRƯỜNG HỢP MUỐN SẮP XẾP DỮ LIỆU TỪ Z TỚI A, HOẶC TỪ LỚN NHẤT TỚI NHỎ NHẤT
--- THÌ CHÚNG TA THÊM VÀO MỆNH ĐỀ ORDER BY CÚ PHÁP DESC
---- MẶC ĐỊNH CỦA SQL KHI SỬ DỤNG MỆNH ĐỀ ORDER BY LÀ SẮP TỪ A TỚI Z, TỪ NHỎ TỚI LỚN, TƯƠNG ỨNG VỚI CÚ
PHÁP ASC
----- VÍ DỤ: TÌM TOP 3 CHI NHÁNH CÓ SỐ DƯ TIỀN GỬI THANH TOÁN THEO VND LỚN NHẤT TRONG BẢNG DỮ LIỆU
----- SAO KÊ TGTT_20170922
----- CHÚNG TA SẼ SỬ DỤNG KẾT HỢP CÁC MỆNH ĐỀ SELECT TOP, WHERE, GROUP BY, ORDER BY ĐỂ LÀM VÍ DỤ NÀY
---- VÍ DỤ: TẠO BẢNG DỮ LIỆU ĐIỂM THI SAU ĐÓ CHÈN THÔNG TIN CỦA 3 THÍ SINH VÀO BẢNG
--- TẠO BẢNG DỮ LIỆU ĐIỂM THI
Lưu ý: Muốn sử dụng câu lệnh này không bị lỗi, chúng ta cần phải nhớ trong đầu số cột của bảng dữ liệu, kiểu dữ liệu trong
bảng dữ liệu
----CÁCH 2:
--CÚ PHÁP
---CACH NAY AP DUNG KHI CHUNG TA CHI MUON INSERT DU LIEU VAO MOT SO COT TRONG BANG DU LIEU
---MA KHONG PHAI LA INSERT VAO TOAN BO CAC COT DU LIEU. VI TA DA CHI RO RA COT NAO SE DUOC INSERT DU LIEU
---CAU LENH NAY CHI RO BAO NHIEU TRUONG DU LIEU DUOC CHEN DU LIEU VAO
---TUONG UNG VOI CAC GIA TRI DU LIEU O SAU VALUES NEN SE IT BI SAI HON
---Vi du: Them gia tri vao mot so truong/cot du lieu cua bang TGTT_20170922
---CO_CODE = 'MM123'; ACCTNO = '123456'; BALANCE = '100'
----CACH 3:
---CU PHAP NHU SAU:
INSERT INTO TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_1
SELECT * FROM TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_2
---TAC DUNG: CHO PHEP THEM DU LIEU VAO BANG DU LIEU DICH TU KET QUA LA MOT CAU LENH SELECT.
---CACH NAY SE CHO PHEP CHUNG TA TIET KIEM THOI GIAN CHEN DU LIEU VI KHONG PHAI INSERT TUNG BAN GHI MOT
---LUU Y: DE SU DUNG CAU LENH NAY THI CAC TRUONG DU LIEU O BANG_DU_LIEU_1 VA BANG_DU_LIEU_2 PHAI BANG
NHAU
---VA CAC KIEU DU LIEU CUA BANG_DU_LIEU_1 VA BANG_DU_LIEU_2 PHAI TUONG THICH VOI NHAU
---- VI DU:
--1. TAO BANG DU LIEU BACKUP CUA BANG INTERFACE..SaoKeTGTT_20170922
----CACH 4:
---CU PHAP:
INSERT INTO TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_1 (COT1, COT2, COT3, ... COTN)
SELECT (COT1, COT2, COT3, ... COTN) FROM TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_2
---TAC DUNG: CAU LENH CHO PHEP CHEN DU LIEU VAO MOT SO COT/TRUONG TRONG BANG DU LIEU
---TU NGUON DU LIEU LA KET QUA CUA MOT CAU LENH SELECT
---CHU Y: SO COT TRONG BANG DICH VA SO COT TRONG CAU LENH SELECT TU BANG NGUON PHAI GIONG NHAU
---TAC DUNG CUA CACH NAY SE GIUP CHO CAU LENH CUA CHUNG TA CHAY ON DINH QUA THOI GIAN, KHONG BI BAO LOI
----VI: THUC TE LA BANG DU LIEU CO THE THEM TRUONG DU LIEU MA KHONG BAO CHO CHUNG TA BIET
----NEU SU DUNG INSERT INTO MA KHONG CHI RO RA TRUONG DU LIEU CAN INSERT THI CO THE BI LOI CU PHAP.
----NEN SU DUNG CACH 4
Tác dụng của cách này sẽ giúp cho câu lệnh của chúng ta chạy ổn định qua thời gian không bị báo lỗi. Vì thực tế là bảng dữ
liệu có thể thêm trường dữ liệu mà không báo cho chúng ta biết. Nếu sử dụng Insert Into mà không chỉ rõ ra trường dữ liệu
cần Insert thì có thể bị lỗi cú pháp. Nên sử dụng cách 4
-----
--VI DU: INSERT INTO CAC TRUONG CO_CODE, ACCTNO, BALANCE TU BANG INTERFACE..SaoKeTGTT_20170922
--VAO BANG INTERFACE..SaoKeTGTT_20170922_BACKUP
Có 1 bảng dữ liệu có sẵn với 200 chi nhánh, PGD. Sang tháng mới, ngân hàng phát triển thêm 20 Chi nhánh, PGD. Làm thế nào
để chèn dữ liệu mới vào bảng dữ liệu đang có một cách nhanh nhất.
Cách xử lý: Lấy danh sách 20 Chi nhánh, PGD mới đưa vào file Excel. Import file Excel vào Database. Sử dụng Insert Into và
Select * from bảng dữ liệu mới Import từ Excel vào chúng ta sẽ được bảng dữ liệu update một cách nhanh chóng với 20 – CN
– PGD mới.
UPDATE TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_1
SET COT1 = value1, COT2 = value2,...
FROM TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_2
WHERE TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_1.COTTHAMCHIEU
= TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_2.COTTHAMCHIEU
----TAC DUNG: CAU LENH NAY CHO PHEP CHUNG TA CAP NHAT DU LIEU VAO BANG DU LIEU DICH
--- TU DU LIEU CUA MOT BANG DU LIEU NGUON KHAC
---CU PHAP 2
UPDATE TEN_DATABASE.dbo.TEN_BANG_DU_LIEU
SET COT1 = value1, COT2 = value2,...
WHERE COTN = ValuesN
---TAC DUNG: CAU LENH NAY CHO PHEP CHUNG TA CAP NHAT DU LIEU VAO BANG DU LIEU DICH
--- VOI CAC COT DU LIEU TRONG CHINH BANG DU LIEU DO THEO MOT DIEU KIEN NHAT DINH (NEU CO)
----- CAP NHAT TY GIA CUA BANG TY GIA VAO TRONG COT TY GIA CUA BANG
INTERFACE.dbo.SaoKeTGTT_20170922_BACKUP
---1. IMPORT BANG DU LIEU SAO KE TY GIA NGAY 20170922 vao DATABASE INTERFACE
---SU DUNG VIEC IMPORT VOI FILE TEXT DA HOC TRONG BUOI TRUOC
---2. THEM COT DU LIEU TY_GIA VAO BANG INTERFACE.dbo.SaoKeTGTT_20170922_BACKUP
---3. SU DUNG CAU LENH UPDATE DE CAP NHAT TY GIA VAO BANG INTERFACE.dbo.SaoKeTGTT_20170922_BACKUP
UPDATE TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_1
SET COT1 = value1, COT2 = value2,...
FROM TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_2
WHERE TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_1.COTTHAMCHIEU
= TEN_DATABASE.dbo.TEN_BANG_DU_LIEU_2.COTTHAMCHIEU
UPDATE INTERFACE.dbo.SaoKeTGTT_20170922_BACKUP
SET TY_GIA = CONVERSION_RATE
FROM INTERFACE.dbo.SaoKeTyGia_20170922
WHERE INTERFACE.dbo.SaoKeTGTT_20170922_BACKUP.CURRENCY = INTERFACE.dbo.SaoKeTyGia_20170922.CURRENCY
---TRONG TRUONG HOP TEN COT CAN UPDATE HOAC TEN COT THAM CHIEU O BANG DU LIEU 1 VA 2 TRUNG NHAU
---CHUNG TA CAN CHI RO CA TEN BANG TRONG CAU LENH
---VI DU INTERFACE.dbo.SaoKeTGTT_20170922_BACKUP.CURRENCY = INTERFACE.dbo.SaoKeTyGia_20170922.CURRENCY
---5. DUNG CAU LENH UPDATE DE TINH TOAN SODU_QUYDOI = BALANCE * TY_GIA VAO BANG
INTERFACE.dbo.SaoKeTGTT_20170922_BACKUP
UPDATE INTERFACE.dbo.SaoKeTGTT_20170922_BACKUP
SET SODU_QUYDOI = BALANCE * TY_GIA
---------------------------------------
SELECT TOP 1000 * FROM INTERFACE.dbo.SaoKeTGTT_20170922_BACKUP
SELECT TOP 1000 * FROM INTERFACE.dbo.SaoKeTyGia_20170922
---HOAC CU PHAP 2
DELETE FROM TEN_DATABASE.dbo.TEN_BANG_DU_LIEU
WHERE DIEU_KIEN_LOC_DU_LIEU
---VI DU 1:
---CU PHAP
---CHU Y: DANH SACH CAC COT DU LIEU TRONG BANG DU LIEU 1 VA DU LIEU 2 PHAI GIONG NHAU
---VI DU: TINH SO DU HUY DONG VON THEO TUNG CHI NHANH VA HIEN THI TRONG 1 BANG DU LIEU
--- NGUON DU LIEU TU 2 BANG SAOKETGTT_20170922 và SAOKETGTK_20170922
--- SAU DO SU DUNG CAU LENH SELECT LONG NHAU DE HIEN THI KET QUA HUY DONG VON THEO TUNG CHI NHANH.
--- TAC DUNG: LENH UNION SE LOAI TRU CAC BAN GHI BI TRUNG TRONG KET
----QUA HIEN THI CUA CAU LENH GHEP GIUA 2 BANG DU LIEU SO VOI DUNG UNION ALL
----VI DU:
----TAI NGAY 22/09: TA CO CHI NHANH A VOI SO TIEN LA 100 TY
----TAI NGAY 23/09: TA CO CHI NHANH A VOI SO TIEN LA 100 TY
----KET QUA CUA CAU LENH UNION ALL: SE HIEN THI 2 DONG VOI CHI NHANH A, SO TIEN 100 TY
----CON KET QUA CUA CAU LENH UNION: SE HIEN THI 1 DONG VOI CHI NHANH A, SO TIEN 100 TY
----CAU LENH UNION GIONG CHUC NANG REMOVE DUPLICATE TRONG EXCEL NEU CO BAN GHI BI TRUNG NHAU
SELECT MÃ CHI NHÁNH, SUM(SỐ DƯ) FROM TIỀN GỬI TIẾT KIỆM
WHERE TRANSACTION_DATE = 'NGÀY DỮ LIỆU'
GROUP BY MÃ CHI NHÁNH
UNION ALL
SELECT MÃ CHI NHÁNH, SUM(SỐ DƯ) FROM TIỀN GỬI THANH TOÁN
WHERE TRANSACTION_DATE = 'NGÀY DỮ LIỆU'
GROUP BY MÃ CHI NHÁNH
---> CÂU LỆNH NÀY SẼ GIÚP CHÚNG TA HIỂN THỊ CẢ TIỀN GỬI THANH TOÁN vÀ Tiền GưI tiết KIỆM TRONG CÙNG 1 CÂU
LỆNH.
---TÁC DỤNG: CÂU LỆNH HAVING GIÚP CHÚNG TA LỌC DỮ LIỆU SAU KHI CÓ KẾT QUẢ NHÓM TỪ CÂU LỆNH GROUP BY
---DO ĐÓ HAVING BAO GIỜ CŨNG PHẢI ĐI SAU GROUP BY
---Ví dụ:
---Xác định các Chi nhánh có số tiền gửi VND lớn hơn 100 tỷ trong ngày 22/09 từ bảng TGTT.
---THAY THE 3 BUOC TRONG EXCEL: 1 LOC DU LIEU VOI TIEN TE BANG VND, 2 PIVOT TABLE, 3 FILTER > 100
---Xác định các khách hàng xuất hiện lớn hơn 20 lần trong sao kê tiền gửi tiết kiệm ngày 22/09.
--- TÁC DỤNG: AND DÙNG ĐỂ GIỚI HẠN CÁC ĐIỀU KIỆN LỌC DỮ LIỆU SAU MỆNH ĐỀ WHERE
--- VÍ DỤ: XÁC ĐỊNH CÁC BẢN GHI CÓ SỐ DƯ TIỀN GỬI LÀ VND THUỘC CHI NHÁNH 'MM0010005'
----TẠI BẢNG DỮ LIỆU SAO KÊ TIỀN GỬI THANH TOÁN 20170922
----CÂU LỆNH:
---Ví dụ: Xác định các bản ghi có loai tien khac VND cua Chi nhanh MM0010005
----TẠI BẢNG DỮ LIỆU SAO KÊ TIỀN GỬI THANH TOÁN 20170922
----TÁC DỤNG: OR DÙNG ĐỂ MỞ RỘNG CÁC ĐIỀU KIỆN LẤY DỮ LIỆU SAU MỆNH ĐỀ WHERE
CÂU LỆNH:
SELECT COUNT(*) FROM INTERFACE..SaoKeTGTT_20170922
WHERE CURRENCY = 'VND'
AND (CO_CODE = 'MM0010005' OR CO_CODE = 'MM0010004' OR CO_CODE = 'MM0010003')
LƯU Ý: LỆNH OR RẤT HAY BỊ VIẾT NHẦM NHƯ SAU, DẪN TỚI LÀM ĐƠ MÁY DO SELECT QUÁ NHIỀU BẢN GHI
Ví dụ: Chúng ta muốn tìm những bản ghi vừa có ngày giao dịch là 2017-09-22, vừa có currency là VND hoặc Sector = 1700
--134408 rows
---CÂU LỆNH:
Dấu phần trăm thể hiện không, một hoặc nhiều ký tự. Dấu gạch dưới đại diện cho một số hoặc một
ký tự. Những ký hiệu này có thể được sử dụng trong sự kết hợp.
---TÁC DỤNG: LIKE CHO PHÉP CHÚNG TA LỌC CÁC BẢN GHI THỎA MÃN ĐIỀU KIỆN CÓ SỬ DỤNG KÝ TỰ TÌM KIẾM % và _
---ĐỂ ĐẠI DIỆN CHO MỘT NHÓM KÝ TỰ (%) HAY 1 KÝ TỰ (_).
VÍ DỤ: XÁC ĐỊNH CÁC TÀI KHOẢN KẾT THÚC BỞI SỐ 5 trong BẢNG DỮ LIỆU SAO KÊ TIỀN GỬI THANH TOÁN 20170922
CÂU LỆNH
SELECT * FROM INTERFACE..SaoKeTGTT_20170922
WHERE ACCTNO like '%5'
----TÁC DỤNG: LỆNH BETWEEN CHO PHÉP CHÚNG TA GIỚI HẠN ĐIỀU KIỆN LỌC DỮ LIỆU TRONG CÂU LỆNH SELECT
----GIỮA CÁC KHOẢNG GIÁ TRỊ KHÁC NHAU.
----CHÚNG TA THƯỜNG DÙNG BETWEEN CHO CÁC SỐ VÀ CHO THỜI GIAN ( VÍ DỤ GIỮA CÁC NGÀY)
VI DỤ: XÁC ĐỊNH CÁC BẢN GHI CÓ GIÁ TRỊ QUY ĐỔI TỪ 10.000.000 ĐẾN 100.000.000
TRONG BẢNG INTERFACE..SaoKeTGTT_20170922
CÂU LỆNH:
CONVERT(LOAI_DU_LIEU_SE_DUOC_CHUYEN_SANG, TRUONG_DU_LIEU_MUON_CHUYEN_DOI_DU_LIEU)
Ví dụ: Chuyển dữ liệu của cột BALANCE_QD từ TEXT sang FLOAT ta sẽ viết CONVERT(FLOAT, BALANCE_QD)
Ví dụ: Chuyển dữ liệu của cột TRANSACTION_DATE từ TEXT sang DATE ta sẽ viết CONVERT(DATE, TRANSACION_DATE)
Function Description
CURRENT_TIMESTAMP Returns the current date and time
DATEADD Returns a date after a certain time/date interval has been added
Returns the difference between two date values, based on the interval
DATEDIFF specified
DATENAME Returns a specified part of a given date, as a string value
DATEPART Returns a specified part of a given date, as an integer value
DAY Returns the day of the month (from 1 to 31) for a given date
GETDATE Returns the current date and time
GETUTCDATE Returns the current UTC date and time
MONTH Returns the month (from 1 to 12) for a given date
YEAR Returns the year (as a four-digit number) for a given date
---DE HIEN THI NGAY THANG NAM MOT CACH CHINH XAC, TRONG SQL SERVER DINH DANG NGAY LA
---KIEU DATE VOI FORMAT HIEN THI LA YYYY-MM-DD
--SQL Server comes with the following data types for storing a date or a date/time value in the database:
--• DATE - format YYYY-MM-DD
--• DATETIME - format: YYYY-MM-DD HH:MI:SS
--• SMALLDATETIME - format: YYYY-MM-DD HH:MI:SS
Cú pháp: DATEADD(day/month/year,
SO_NGAY_THANG_NAM_MUON_TANG_HOAC_GIAM,
NGAY_GIAO_DICH)
Tác dụng: Cho phép xác định khoảng cách giữa các ngày, tháng, năm
CÚ PHÁP: DATEDIFF(Day/Month/year,Ngay_thu_nhat,Ngay_thu_hai)
DATEDIFF(interval, date1, date2)
SELECT DATEDIFF(year,'2017-01-01','2019-07-26')
----2 nam 7 thang 26 ngay
SELECT EOMONTH('2018-01-16')
Lưu ý: Chúng ta có thể sử dụng kết hợp các hàm với nhau
để ra được một kết quả như chúng ta mong muốn.
Ví dụ: Để xác định một ngày đầu năm từ một ngày hiện tại
chúng ta sẽ làm như sau:
SELECT DATEADD(day,-1,EOMONTH('2018-02-08'))
SELECT 'SO_DU_TIEN_GUI_THANH_TOAN_TOAN_HANG'
SELECT SUM(CONVERT(FLOAT,BALANCE_QD))/COUNT(DISTINCT(CUS_ID))
AS SO_DU_TIEN_GUI_TK_THEO_KHACH_HANG
FROM INTERFACE..SaokeTGTK_20170922
----MAX
----1. 3 HÀM MAX
--Tác dụng: Dùng để tính số lớn nhất trong các giá trị
--của bản ghi trong câu lệnh SELECT theo từng cột
Cú pháp: MAX(TEN_COT_CAN_TIM_GIA_TRI_LON_NHAT)
--Ví dụ: Tính số dư tiền gửi thanh toán lớn nhất
--của các bản ghi trong ngày 22/09/2017
SELECT 'SO_DU_TIEN_GUI_THANH_TOAN_MAX'
AS LOAI_CHI_TIEU,
MAX(CONVERT(FLOAT, BALANCE_QD))/1e9
as SO_DU_LON_NHAT
FROM INTERFACE..SaokeTGTT_20170922
----MIN
----1. 4 HÀM MIN
--Tác dụng: Dùng để tính số nhỏ nhất trong các giá trị của bản ghi
--trong câu lệnh SELECT theo từng cột
Cú pháp: MIN(TEN_COT_CAN_TIM_GIA_TRI_NHO_NHAT)
--Ví dụ: Tính số dư tiền gửi thanh toán nhỏ nhất
--của các bản ghi trong ngày 22/09/2017
SELECT 'SO_DU_TIEN_GUI_THANH_TOAN_MIN',
MIN(CONVERT(FLOAT, BALANCE_QD))
as SO_DU_NHO_NHAT
FROM INTERFACE..SaokeTGTT_20170922
----COUNT
----1.5 HÀM COUNT
---Tác dụng: Đếm số lượng bản ghi thỏa mãn
---một điều kiện nào đó
---trong bảng dữ liệu theo một cột hoặc
---một số cột sau câu lệnh SELECT
Cú pháp: COUNT(TEN_COT_CAN_DEM)
---Lưu ý: Chúng ta thường sử dụng COUNT
---kết hợp với DISTINCT
---để tìm ra duy nhất các đối tượng cần đếm.
---Ví dụ:
---Đếm số lượng khách hàng có trong bảng
---SaoKeTGTK_20170922
SELECT COUNT(DISTINCT(CUS_ID)) AS SO_LUONG_KHACH_HANG
FROM INTERFACE..SAOKETGTK_20170922
----CONCAT
CONCAT(CHUOI_1, CHUOI_2, ...., CHUOI_N)
--Tác dụng: Nối chuỗi giống hàm CONCATENATE TRONG EXCEL
SELECT CONCAT('SQL', ' that la', ' thu vi!');
----LEFT
LEFT(CHUOI_KY_TU, SO_KY_TU_CAN_CAT_TU_BEN_TRAI)
--Tác dụng: Cắt trái giống hàm LEFT TRONG EXCEL
---Ví dụ 1:
SELECT LEFT('NGUYEN VAN A',6) as Ho
---Ví dụ 2:
--Xác định 2 ký tự đầu tiên và duy nhất
--của trường CO_CODE trong
--bảng Interface..SaoKeTGTK_20170922
SELECT DISTINCT LEFT(CO_CODE,2)
FROM INTERFACE..SaoKeTGTK_20170922
----RIGHT
RIGHT(CHUOI_KY_TU, SO_KY_TU_CAN_CAT_TU_BEN_PHAI)
----Tác dụng: Cắt phải giống hàm RIGHT TRONG EXCEL
SELECT RIGHT('Tran Thi Hong Linh',4) as Ten
----LEN
LEN(CHUOI_KY_TU)
---Tác dụng: Đếm số lượng ký tự có trong 1 chuỗi văn bản
---Giống hàm LEN trong Excel
Ví dụ
SELECT LEN('Tran Thi Hong Linh')
----SUBSTRING
SUBSTRING(CHUOI_KY_TU, Vi_tri_ky_tu_bat_dau_cat,
So_luong_ky_tu_can_cat)
---Tác dụng: Giống hàm MID trong Excel
---Cắt một số ký tự từ một ký tự nào đó là ký tự bắt đầu
---VÍ dụ: Xác định hai ký tự đầu tiên
và duy nhất của CO_CODE trong bảng
SaoKeTGTT_20170922 sử dụng hàm SUBSTRING
SELECT DISTINCT SUBSTRING(CO_CODE,3,5)
AS HAI_KY_TU_DAU_TIEN
FROM INTERFACE.Dbo.SaoKeTGTT_20170922
Function Description
The CONVERT() function converts an expression from one data type to another data type.
Note: When converting from a float or numeric to an integer, the CONVERT() function will
truncate the result. For other conversions, the CONVERT() function will round the result.
Syntax
CONVERT(data_type(length), expression, style)
Parameter Values
Value Description
data_type Required. The datatype to convert expression to. Can be one of the
following: bigint, int, smallint, tinyint, bit, decimal, numeric, money,
smallmoney, float, real, datetime, smalldatetime, char, varchar, text, nchar,
nvarchar, ntext, binary, varbinary, or image
(length) Optional. The length of the resulting data type (for char, varchar, nchar,
nvarchar, binary and varbinary)
style Optional. The format used to convert between data types, such as a date or
string format. Can be one of the following values:
1 101 mm/dd/yyyy US
8 108 hh:mm:ss -
Value Explanation
1 8 digits
2 16 digits
Value Explanation
More Examples
Example
Function Description
CURRENT_USER Returns the name of the current user in the SQL Server
database
SESSION_USER Returns the user name of the current session in the SQL
Server database
SYSTEM_USER Returns the login name information for the current user in
the SQL Server database
Bài 22:
Hướng dẫn sử dụng Excel để viết câu lệnh SQL, tăng tốc độ
viết câu lệnh
Chúng ta sẽ soạn câu lệnh trong Excel, sau đó dùng tính năng AutoFill cũng như hàm IF để có được kết câu lệnh mong muốn một cách
nhanh chóng, sau đó sẽ copy câu lệnh từ Excel vào SQL để thực thi
Độ dài của
Kiểu dữ trường - Viết câu lệnh trong Excel để
Tên Table - Table liệu - Data Data sử dụng Autofill tiết kiệm thời
Nname Type Length gian gõ lệnh FINAL COPY TO SQL
CREATE TABLE DimBranches CREATE TABLE
( DATA_MART.dbo.DimBranches (
DimBranches int STT int(), STT int, STT,
DimBranches varchar 25 BRANCH_CODE varchar(25), BRANCH_CODE varchar(25), BRANCH_CODE,
DimBranches varchar 25 BRANCH_NAME varchar(25), BRANCH_NAME varchar(25), BRANCH_NAME,
SUB_BRANCH_CODE
DimBranches varchar 25 varchar(25), SUB_BRANCH_CODE varchar(25), SUB_BRANCH_CODE,
SUB_BRANCH_NAME
DimBranches varchar 25 varchar(25), SUB_BRANCH_NAME varchar(25), SUB_BRANCH_NAME,
DimBranches varchar 25 AREA varchar(25), AREA varchar(25), AREA,
DimBranches varchar 25 REGION varchar(25) REGION varchar(25) REGION,
) )
CREATE TABLE
DATA_MART.dbo.DimCustomer (
SUB_BRANCH_CODE
DimCustomer varchar 25 varchar(25), SUB_BRANCH_CODE varchar(25), SUB_BRANCH_CODE,
DimCustomer varchar 25 CIF varchar(25), CIF varchar(25), CIF,
CUSTOMER_NAME
DimCustomer varchar 100 varchar(100), CUSTOMER_NAME varchar(100), CUSTOMER_NAME,
DimCustomer varchar 5 SECTOR varchar(5), SECTOR varchar(5), SECTOR,
DimCustomer date CUS_OPEN_DATE date(), CUS_OPEN_DATE date, CUS_OPEN_DATE,
DimCustomer varchar 10 SEGMENT varchar(10) SEGMENT varchar(10) SEGMENT,
) ) ,
Ứng dụng tạo các bảng dữ liệu trong 2 Database Data_Mart và Report
System, để có được kết quả như sau:
Màn hình tiếp theo hiện ra, chú ý phần Message không có gì thì có thể ấn OK để thực hiện Detach bình thường.
Nếu màn hình Message thông báo có 1 hoặc nhiều connection như hình dưới đây
Thì khi ấn OK, máy sẽ báo lỗi: Database đang được sử dụng nên không detach được.
Cách đơn giản để xử lý vấn đề này là bạn hãy thoát khỏi ứng dụng SQL Server, sau đó bật lại SQL Server. Trong trường
hợp làm như vậy mà chưa được, bạn hãy Restart lại Windows, sau đó mở lại SQL Server và chọn Detach Database. Trong
trường hợp làm như vậy vẫn chưa được nữa, bạn hãy vào SQL Server 2014 Configuration Manager, để Restart lại service của
SQL Server thì chắc chắn sẽ Detach được. Phần SQL Server 2014 Configuration Manager sẽ được hướng dẫn trọng mục SQL
Server nâng cao trong bài học cuối cùng.
Sau khi Detach thành công, Database sẽ biến mất khỏi màn hình giao diện SQL Server Management Studio
Lưu ý: Database mới bị ngắt kết nối khỏi SQL Server Management Studio, chứ không bị xóa khỏi máy tính, mọi dữ liệu
của chúng ta vẫn còn nguyên. Bây giờ chúng ta có thể copy Database sang một thư mục/USB/máy tính khác bình thường để sử
dụng.
2. Attach Database
Để attach được database không bị báo lỗi Cấp quyền truy cập, chúng ta cần phải làm 2 việc sau đây:
Màn hình tiếp theo hiện ra chọn kiểu Authentication là Windows Authentication, sau đó ấn Connect
Sau khi đăng nhập thành công, SQL Server sẽ hiển thị tên người dùng Admin, chứ không hiển thị user là sa hoặc 1 user do
chúng ta tạo ra để truy cập vào SQL Server
Đây là cách hiển thị khi ta truy cập bằng SQL User: sa
(2) Để cấp quyền truy cập cho user Windows vào file Database, ta làm như sau:
Chuột phải vào file (lưu ý ta phải làm cho cả 2 file Database và file log), chọn Properties
Trong phần này ấn vào chữ Edit, màn hình Permissions cho Database xuất hiện, ta lựa chọn user muốn cấp quyền truy cập (ví
dụ ở đây là MasterMOS), các máy khác có thể có “user”, sau đó chọn Full Control phần Allow.
Cấp quyền truy cập Full control vào file cho cả 2 file Database và file log.
Sau khi làm xong 2 phần trên, thực hiện Attach Database theo các bước sau:
Chuột phải vào Database chọn Attach
Màn hình Locate Database Files hiện ra, tìm đến thư mục có chứa Database cần Attach, chọn file database có đuôi là mdf, ví dụ
DATA_MART.mdf Sau đó ấn OK
Máy thực thi công việc Executing, sau đó thành công, trên phần Database của chúng ta sẽ có thêm Database chúng ta vừa mới
Attach.
Để tạo Stored Procedure, chúng ta làm theo các bước sau đây:
Mở rộng phần Database (ấn vào dấu +) ví dụ Database REPORT_SYSTEM, sau đó tìm đến mục
Programmability, chuột phải vào Stored Procedure, chọn New, sau đó chọn Stored Procedure
Màn hình sau đây hiện ra một template mẫu, cho phép chúng ta chỉnh sửa để tạo ra Stored Procedure
Các phần chữ màu xanh, bắt đầu bởi dấu ---- là phần ghi chú, không làm ảnh hưởng đến cú pháp tạo ra
Stored Procedure.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Description: <Description,,>
-- =============================================
AS
BEGIN
END
GO
Chúng ta có thể nhập tên tác giả là chúng ta, ngày tạo, và mô tả về chức năng của thủ tục Stored
Procedure này là gì để người khác có thể dễ dàng nắm bắt được việc chúng ta đang thực hiện ở đây.
Những từ khóa Create PROCEDURE chúng ta để nguyên, chúng ta thay đổi phần Procedure_Name và đưa
thêm các biến @Param1, @Param2, … vào trong thủ tục
Lưu ý chúng ta sử dụng bao nhiêu biến trong thủ tục thì khai báo bấy nhiêu biến, khi khai báo biến sẽ khai
báo kiểu dữ liệu của biến đó.
Trong phần BEGIN và END; sau từ khóa SET NOCOUNT ON là các câu lệnh của chúng ta. Chúng ta viết bao
nhiêu câu lệnh cũng được.
Ví dụ một thủ tục đơn giản để hiển thị giá trị của biến chúng ta sử dụng sẽ như sau:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- =============================================
AS
BEGIN
@NGAYDULIEU
END
GO
Sau khi chúng ta soạn thảo xong nội dung của Stored Procedure, chúng ta ấn F5 để thực hiện tạo thủ tục,
màn hình báo “Command(s) completed successfully.” Là chúng ta đã thực hiện tạo thủ tục thành công
Từ khóa Exec, sau đó đến tên Database, rồi .dbo, rồi đến tên thủ tục, rồi đến giá trị của biến nằm giữa 2
dấu ngoặc đơn.
Sau khi chạy thủ tục đơn giản trên, màn hình sẽ hiển thị ngày 01/12/2017
Để sửa đổi thủ tục, thêm mới các đoạn code, sửa đổi các đoạn code, chúng ta làm như sau:
Chuột phải vào thủ tục muốn chỉnh sửa, chọn Modify
Màn hình soạn thảo code xuất hiện, với một số thành phần chính như sau:
USE [REPORT_SYSTEM] : Thể hiện cơ sở dữ liệu đang chứa thủ tục
ALTER PROCEDURE: Cú pháp thể hiện việc sửa thủ tục.
Trong phần BEGIN và END chúng ta có thể thêm các câu lệnh như mong muốn
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- =============================================
AS
BEGIN
@NGAYDULIEU
END
Đoạn code bôi vàng ở trên được thêm vào thủ tục đang có Stored Procedure, sau khi việc thêm code hoàn
tất, chúng ta ấn F5 để lưu lại đoạn code. Nếu các đoạn code chúng ta thêm đều chính xác, máy sẽ báo
“Command(s) completed successfully.”
Ảnh minh họa như sau:
Chạy thủ tục để kiểm tra lại kết quả, kết quả như hình minh họa phía dưới.
EXEC REPORT_SYSTEM.dbo.TEST_TAO_PROC '2017-09-22'
AS
BEGIN
UPDATE DATA_MART..FactTermDeposits
SET SEGMENT =
(CASE WHEN CONVERT(FLOAT, SECTOR) BETWEEN 1602 AND 1899 THEN 'INDIV'
WHEN CONVERT(FLOAT, SECTOR) BETWEEN 3000 AND 3999 THEN 'CIB'
WHEN CONVERT(FLOAT, SECTOR) BETWEEN 1095 AND 1100 THEN 'DVC'
WHEN CONVERT(FLOAT, SECTOR) BETWEEN 5000 AND 8999 THEN 'FI'
WHEN SECTOR = ''THEN 'KXD'
ELSE 'SME'
END)
WHERE TRANSACTION_DATE = @DATE
Xử lý những trường hợp kỳ hạn trong dữ liệu đầu vào bị nhập sai: chuyển 1 M, 1 T, 90D về đơn vị số tháng. Để trong câu
lệnh tổng hợp dữ liệu sẽ cho ra kết quả chính xác nhất.
UPDATE DATA_MART.dbo.FactTermDeposits
SET TERM = REPLACE(TERM,'M','')
WHERE TERM LIKE '%M'
UPDATE DATA_MART.dbo.FactTermDeposits
SET TERM = REPLACE(TERM,'T','')
WHERE TERM LIKE '%T'
UPDATE DATA_MART.dbo.FactTermDeposits
SET TERM = CONVERT(FLOAT,REPLACE(TERM,'D',''))/30
(5) Phần cú pháp ban đầu của thủ tục, như template, khai báo 1 biến ngày để có thể chạy các ngày dữ liệu khác nhau.
USE [REPORT_SYSTEM]
GO
/****** Object: StoredProcedure [dbo].[KQKD_DAILY_TABLE_PROCESS] Script Date: 12/9/2017 8:55:19
AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[KQKD_DAILY_TABLE_PROCESS]
@DATE VARCHAR(10)
AS
BEGIN
(6) Trong thủ tục chúng ta thường cho 1 câu lệnh DELETE đầu tiên để xóa dữ liệu có ngày bằng ngày hiện thời chúng
ta muốn chạy dữ liệu – để tránh bị lỗi trùng lặp dữ liệu – chúng ta có thể chạy thủ tục nhiều lần mà không làm đúp,
sai lệch số liệu.
----XOA DU LIEU HIEN TAI DE CHAY LAI DU LIEU TU DAU NEU PHAI CHAY DI CHAY LAI NHIEU LAN
DELETE FROM REPORT_SYSTEM.[dbo].[KQKD_DAILY_TABLE]
WHERE CONVERT(DATE,[TRANSACTION_DATE]) = CONVERT(DATE,@DATE)
(7) Ví dụ ta thi hành thủ tục EXEC REPORT_SYSTEM.dbo.KQKD_DAILY_TABLE_PROCESS '2017-09-22', SQL Server sẽ thực
hiện tuần tự các bước từ trên xuống dưới theo thứ tự chúng ta viết dòng lệnh, câu lệnh sau là câu lệnh sẽ được ưu
tiên nếu có cả 2 lệnh tác động vào cùng 1 loại số liệu.
(8) Đầu tiên bảng của chúng ta NULL, chưa có gì
(9) Sau đó chúng ta bắt đầu đưa các Chi nhánh vào bảng đầu tiên
---- CAP NHAT CHI NHANH VAO BANG DU LIEU HANG NGAY
(10) Kết quả chạy câu lệnh là bảng dữ liệu đã được thêm tên các phong giao dịch khu vực, theo từng khối vào
Template tổng hợp dữ liệu cuối cùng
(11)Sau đó chúng ta update dữ liệu vào trường TRANSACTION_DATE cho ngày dữ liệu bị NULL.
UPDATE REPORT_SYSTEM.[dbo].[KQKD_DAILY_TABLE]
SET [TRANSACTION_DATE] = CONVERT(DATE,@DATE) WHERE [TRANSACTION_DATE] IS NULL
(14) Tính toán dữ liệu thô rồi lưu kết quả vào bảng tạm
UPDATE REPORT_SYSTEM.[dbo].[KQKD_DAILY_TABLE]
SET HDV_CKH = SODU_TP/1e9 from REPORT_SYSTEM..TEMPLATE_TABLE
WHERE TRANSACTION_DATE = CONVERT(DATE,@DATE)
AND KHOI = KHOI_TP AND CO_CODE = CO_CODE_TP
(18) Tính toán dữ liệu cho chỉ tiêu mới, cập nhật vào bảng tạm, rồi lại update dữ liệu tổng hợp từ bảng tạm vào
bảng đích. Cứ làm tuần tự như vậy cho đến khi tính xong hết các chỉ tiêu.
UPDATE REPORT_SYSTEM.[dbo].[KQKD_DAILY_TABLE]
SET HDV_KKH = SODU_TP/1e9 from REPORT_SYSTEM..TEMPLATE_TABLE
WHERE TRANSACTION_DATE = CONVERT(DATE,@DATE)
AND KHOI = KHOI_TP AND CO_CODE = CO_CODE_TP
(19) Cách tiếp cận trên là cách làm đơn giản, dễ hiểu, dễ duy trì, dễ tìm ra lỗi sai khi có lỗi phát sinh, không yêu cầu
kỹ thuật phức tạp nên có thể áp dụng cho tất cả mọi người ở mọi trình độ Đặc biệt dữ liệu tính toán luôn đạt
chính xác tuyệt đối.
(20) Sau khi viết xong thủ tục tính toán tổng hợp, chúng ta bắt đầu chạy dữ liệu để tổng hợp dữ liệu theo từng ngày
từ 22/09/2017 đến 29/09/2017. Lưu ý, có thể bôi đen tất cả các dòng thi hành thủ tục rồi ấn F5 để chạy luôn một
lần.
(21) Sau khi chạy xong, ta đã được 1 bảng dữ liệu tổng hợp theo nhiều chiều, trong 1 tuần, sẵn sàng có thể link với
Excel để chuẩn bị lên báo cáo Dashboard.
Chi tiết xem trong file Dashboard_Template – tài liệu đính kèm khóa học
này
Phần Choose Data Source hiện ra, chọn New Data Source
Phần Select a driver for the type of database you want to accees, chọn SQL Server Native Client 11.0
Phần SQL Server Login, chỗ tên Server có thể nhập tên Server hoặc địa chỉ IP của Server
Phần Login ID và Password nhập tên user (ví dụ sa) và pass truy cập, sau đó ấn Options >>
Trong phần Options, mục Database chọn Database ta muốn kết nối đến, ví dụ REPORT_SYSTEM
Sau đó ấn OK
Sau đó lại ấn OK khi phần lựa chọn màu xanh đang ở tên Data Source của chúng ta (trong ví dụ này là
KQKD_DAILY_TABLE)
Màn hình Microsoft Query xuất hiện, màn hình này sẽ giúp chúng ta viết câu lệnh SQL để lấy dữ liệu từ SQL Server
đưa vào Excel.
Chú ý mục tiêu của chúng ta là viết câu lệnh SQL nên ở mục Query Winzard – Choose Columns này ta có thể chọn
mặc định phần all_columns cho nhanh, sau đó ấn mũi tên >
Ấn Next tiếp
Ấn Next tiếp
Dưới đây là một lựa chọn quan trọng, Mục What would you like to do next, ta sẽ chọn “View Data or edit query in
Microsoft Query”, sau đó Ấn Finish
Màn hình Query form KQKD_DAILY_TABLE xuất hiện, ta chọn biểu tượng ô vuông SQL
Thêm tham số
Các kiến thức Excel khác, anh chị vui lòng tham dự khóa học online tại Học viện Unica
được giảng viên Nguyễn Ngọc Chiến trực tiếp giảng dạy:
Tên khóa học: “Thành thạo Excel từ A tới Z, tự tin thi đỗ chứng chỉ MOS”
Link khóa học: https://unica.vn/thanh-thao-excel-2013-tu-tin-thi-do-chung-chi-mos?aff=12948
Cách kích hoạt khóa học trực tuyến tại học viên Unica:
VBA là gì?
VBA (Visual Basic for Applications) là 1 ngôn ngữ lập trình được tích hợp trong ứng dụng văn phòng như
Excel, Word, PowerPoint, … Vì vậy, tất cả các chương trình mà bạn thực hiện trong Excel hoặc trong ứng
dụng văn phòng khác sẽ có thể được thực hiện với VBA.
Về mặt kỹ thuật, VBA là một ngôn ngữ lập trình hướng sự kiện của Microsoft. VBA cũng được gọi là một
ngôn ngữ lập trình mở rộng được tạo thành từ một tập các lệnh cốt lõi và được mở rộng trên cơ sở mỗi
ứng dụng để có thể làm việc trực tiếp với các đối tượng trong ứng dụng đó.
Sử dụng Excel VBA bạn có thể làm hầu như bất kỳ tác vụ nào tương tự trong Excel.
Do đó Microsoft đã cung cấp VBA như là một sự bổ sung cho khoảng trống đó, nó cho phép người dùng tự
viết các phương thức hoặc lệnh của mình để thực hiện nhiệm vụ của mình.
Khi bạn có kinh nghiệm với lập trình VBA trong Excel, bạn sẽ không bị mắc kẹt trong những vấn đề khó
khăn đó nữa!
Macro là gì?
Macro là một chuỗi các lệnh mà bạn có thể sử dụng để tự động hóa các tác vụ được sử dụng thường xuyên
để tiết kiệm thời gian gõ phím và thao tác chuột.
Một Macro có thể được tạo bằng cách sử dụng Visual Basic for Applications (VBA) và được viết bởi người
sử dụng.
Với Excel VBA, bạn có thể tự động hóa các tác vụ trong Excel bằng cách viết code macro và gọi nó. Bài này hướng
dẫn bạn cách tạo một macro trong excel đơn giản và sẽ thực thi code bằng một button.
2. Save As Excel file thành Excel Macro File (từ excel 2007 trở lên).
3. Viết code VBA.
4. Run code VBA.
2. Click chuột phải vào bất kỳ chỗ nào trong vùng ribbon -> chọn Customize the Ribbon…
4. Bạn có thể thấy Developer tab bên cạnh View tab như sau:
2. Save As Excel file thành Excel Macro File (từ excel 2007 trở lên)
Để tạo một macro từ excel, bạn cần phải Save As file excel thành tập tin với phần mở rộng có định dạng .xlsm
(excel 2007 trở lên) hoặc .xls (excel 2003)
Note: Để tạo một macro từ excel, nếu bạn đang dùng excel 2003 (.xls) thì bạn không phải làm việc này. Nếu bạn
dùng excel 2007 (.xlsx) trở lên thì bạn làm theo các bước sau.
2. Chọn kiểu file phần mở rộng .xlsm (hoặc .xls) -> click Save
3. Click Ok.
1. Mở Visual Basic Editor: chọn Vusual Basic hoặc bấm tổ hợp phím Alt + F11.
2. Tạo module mới: click chuột phải vào VBAProject -> Insert -> Module.
3. Tạo một Sub có tên ClickButton() vào Module1 với nội dung như trong hình.
3. Insert button
Tại Developer tab, bạn có thể insert một button như sau:
1. Chọn Insert -> click vào biểu tượng button trong phần ActiveX Controls.
2. Click chuột phải vào “Button1” tạo ở trên -> chọn Assign Macro…
5. Run
Done.
MsgBox là một hộp thoại được sử dụng để hiển thị thông tin đến người dùng.
Ví dụ 1:
MsgBox ("Hello!")
Kết quả:
Ví dụ 2:
Hệ thống các đối tượng trong Excel VBA được kết nối với nhau bởi dấu chấm (.).
Các đối tượng VBA được tổ chức trong một hệ thống phân cấp. Ở đầu phân cấp này là đối tượng
Application. Tất cả các đối tượng trong Excel là các member (thành viên) hoặc sub-member (thành viên
con) của đối tượng Application.
Application.Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value = 100
Dấu chấm (.) từ cho phép chúng ta tham chiếu (gọi) các thành viên của hệ thống phân cấp từ trên xuống
dưới. Vì vậy, application là cấp cao nhất của hệ thống phân cấp, và Workbook là một thành viên của
application. Thuộc tính Workbooks() trả về một tập hợp tất cả các bảng tính đang mở trên máy tính.
Application.Workbooks("Book1.xlsx")
Worksheets là một thành viên của đối tượng Workbook. Thuộc tính Worksheets() trả về một tập hợp tất
cả các sheet của đối tượng Workbook đang được active.
Application.Workbooks("Book1.xlsx").Worksheets("Sheet1")
Cuối cùng để trỏ đến Range “A1” của sheet “Sheet1” và gán bằng 100 như sau:
Application.Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value = 100
Chúng ta sẽ tìm hiểu về các thành viên của các đối tượng trong hệ thống các đối tượng trong Excel VBA
trong những bài học tiếp theo.
Đối tượng application trong Excel VBA là đối tượng được sử dụng thường xuyên nhất khi thực hiện bất kỳ tác
vụ nào với VBA.
Dưới đây là các phương thức và thuộc tính được sử dụng nhiều nhất của đối tượng Application. Để bạn có thể
nhanh chóng tìm ra giải pháp, cú pháp bất cứ khi nào bạn cần sử dùng nó.
Phương thức Mô tả
Properties Mô tả
Cú pháp:
Application.FindFile
Ví dụ:
Sub Demo_FindFile()
Application.FindFile
End Sub
Cú pháp:
Trong đó:
Reference: Nó chỉ định đích đến.
Scroll: Đây là tham số tùy chọn. Nó có giá trị Boolean hoặc True hay False. Nếu giá trị là true thì nó sẽ di chuyển
thanh cuộn đến vị trí chỉ đích. Nếu đó là false thì nó sẽ không di chuyển thanh cuộn.
Sub Demo_Goto()
End Sub
Cú pháp:
Trong đó:
Macro: Nó chỉ định macro để run.
Arg1 to Arg30: Đây là tham số tùy chọn. Nó được sử dụng để truyền các tham số cho function.
Ví dụ sau run một thủ tục macro có tên “MyMacro” của workbook có tên “Workbook1.xls”.
Sub Demo_Run()
Application.Run "'Workbook1.xls'!MyMacro"
End Sub
Cú pháp:
Application.Wait(Time)
Trong đó:
Time: Đây là một tham số được yêu cầu. Nó chỉ định thời gian bạn muốn tiếp tục macro.
Sub Demo_Wait1()
Application.Wait "16:00:00"
End Sub
Sub Demo_Wait2()
End Sub
Ví dụ 1: không hiển thị bất kỳ cảnh báo nào trong khi đóng workbook đang hoạt động.
Sub Display_Alert_Example1()
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub
Ví dụ 2: Hiển thị cảnh báo trong khi đóng workbook đang hoạt động.
Sub Display_Alert_Example1()
ActiveWorkbook.Close
End Sub
Ví dụ 1: hiển thị đường dẫn tuyệt đối của thư mục chứa ứng dụng excel.
Sub Path_Example1()
End Sub
Kết quả:
Sub Path_Example1()
End Sub
Kết quả:
Sub Path_Example2()
End Sub
Kết quả:
Ví dụ 1: Trong ví dụ sau, nó sẽ hiển thị số từ 1 đến 100 trong cột đầu tiên của Sheet1. Chúng ta có thể quan sát màn
hình đang cập nhật trong khi cập nhật Sheet1.
Sub ScreenUpdating_Example1()
Dim i As Integer
For i = 1 To 100
Sheets("Sheet1").Cells(i, 1) = i
Next
End Sub
Ví dụ 2: Trong ví dụ sau, nó sẽ hiển thị số từ 1 đến 100 trong cột đầu tiên của Sheet1. Chúng ta không thể quan sát
màn hình đang cập nhật trong khi cập nhật Sheet1.
Sub ScreenUpdating_Example1()
Application.ScreenUpdating = False
Dim i As Integer
For i = 1 To 100
Sheets("Sheet1").Cells(i, 1) = i
Next
Application.ScreenUpdating = True
End Sub
Đối tượng Workbook trong Excel VBA là một trong những đối tượng được sử dụng thường xuyên nhất trong
khi tự động hóa bất kỳ tác vụ nào với VBA. Bài này cung cấp các phương thức hay sử dụng của đối tượng
Workbook.
Mỗi đối tượng Workbook tương ứng với một file excel.
Các phương thức của Workbook giúp chúng ta thực hiện các hành động khác nhau với Excel Workbooks. Ví dụ,
chúng ta có thể Kích hoạt một Workbook và Xóa một Workbook hoặc Move Workbook. Và chúng ta cũng có thể
Protect và UnProtect Workbooks.
Phương thức Mô tả
Tại sao chúng ta cần phải kích hoạt một Workbook bằng VBA?
Khi chúng ta phải xử lý nhiều workbooks (nhiều file excel) và bạn muốn đọc hoặc ghi vào một Workbook cụ thể
thì bạn phải kích hoạt Workbook đó.
Application.Workbooks("myFile.xlsx").Activate
End Sub
Set wb = Application.Workbooks(2).Activate
End Sub
Sub ActiveWorkbookExample3()
ThisWorkbook.Activate
End Sub
Note: với Workbook đang được activate, tức là Workbook mà đang được chọn. Khi đó mọi thao tác đọc và ghi từ macro
sẽ ảnh hưởng trực tiếp đến nó.
Tạo biến tham chiếu đến Workbook
Vấn đề: Khi bạn phải làm việc với nhiều workbooks (nhiều file excel), mỗi Workbook có nhiều Worksheet. Bạn
phải sử dụng phương thức Activate với hết Workbook này đến Workshet khác để đọc hoặc ghi dữ liệu từ chúng,
điều này có thể dẫn đến mã rối rắm, khó hiểu khiến bạn lúng túng.
Ví dụ:
Sau đó, khi nào bạn sử dụng đến hai đối tượng wbInput, wbOutput thì nó tự động được kích hoạt, Khi đó bạn
không cần phải gọi phương thức Activate nữa.
Set wb = Application.ThisWorkbook
Set wb = Application.ActiveWorkbook
' 4. khởi tạo bằng cách sử dụng tên của một Workbook
Set wb = Application.Workbooks("myFile.xlsx")
' 5. khởi tạo bằng cách sử dụng chỉ số của một Workbook
Set wb = Application.Workbooks(2)
Set wb = Workbooks.Add
Cú pháp:
Workbooks(“Workbook Name”).Close ([SaveChanges], [Filename], [RouteWorkbook])
Sub CloseWorkbookExample()
Dim wb As Workbook
Set wb = Workbooks.Open("D:\myFile.xlsx")
wb.Close Savechanges:=True
End Sub
Trong ví dụ trên, chúng ta tạo ra một biến có tên là wb trong câu lệnh đầu tiên. Chúng ta đã sử dụng phương thức
‘Open’ của workbook object để mở một bảng tính có tên là “D:\myFile.xlsx” và sau đó gán nó cho đối tượng wb
trong câu lệnh thứ hai. Cuối cùng trong câu lệnh thứ ba, chúng ta đã sử dụng phương thức ‘Close’ của đối tượng
workbook để đóng lại trên bảng tính đã xác định. Cuối cùng chúng ta đã đề cập đến ‘Savechanges: = True’, có nghĩa
là nếu chúng ta đã thực hiện bất kỳ thay đổi trong bảng tính thì nó sẽ lưu các thay đổi.
Sub CloseWorkbookExample2()
Workbooks("D:\myFile.xlsx").Close Savechanges:=False
End Sub
Ví dụ trên giống như ví dụ 1. Sự khác biệt là chúng ta sử dụng ‘Savechanges:=False’, điều đó có nghĩa là nếu chúng
ta thực hiện bất kỳ thay đổi trong bảng tính nó sẽ không được lưu lại.
Sub CloseWorkbookExample3()
ActiveWorkbook.Close Savechanges:=False
End Sub
Ví dụ trên đóng bẳng tính đang được chọn và không lưu lại những gì thay đổi.
Cú pháp:
Workbooks(“Workbook Name”).Save
Sub SaveWorkbookExample1()
Dim wb As Workbook
Set wb = Workbooks.Add
wb.Save
End Sub
Trong ví dụ trên, chúng ta đã tạo ra biến có tên wb trong câu lệnh đầu tiên. Chúng ta đã sử dụng phương thức
‘Add’ của đối tượng Workbook để tạo ra bảng tính mới và sau đó gán nó cho đối tượng wb trong câu lệnh thứ hai.
Cuối cùng trong câu lệnh thứ ba, chúng ta đã sử dụng phương thức ‘Save’ của đối tượng Workbook để lưu lại bảng
tính vừa tạo.
Câu hỏi: Trong ví dụ trên, bảng tính trên đã được tạo ra và lưu ở đâu?
Trả lời: Trong ví dụ trên bảng tính trên đã được lưu tại thư mục Documents.
Sub SaveWorkbookExample1()
ActiveWorkbook.Save
End Sub
Trong ví dụ trên mọi thay đổi của Workbook đang được kích hoạt sẽ được lưu lại.
Cú pháp:
Sub SaveAsWorkbookExample()
Dim wb As Workbook
Set wb = Workbooks.Add
wb.SaveAs Filename:="D:\test\Sample.xlsx"
End Sub
Trong ví dụ trên, chúng ta đã tạo ra biến có tên wb trong câu lệnh đầu tiên. Chúng ta đã sử dụng phương thức
‘Add’ của đối tượng Workbook để thêm bảng tính mới và sau đó gán nó cho đối tượng wb trong câu lệnh thứ hai.
Cuối cùng trong câu lệnh thứ ba chúng ta đã sử dụng phương thức ‘SaveAs’ của đối tượng Workbook để lưu bảng
tính ở vị trí khác và tên file là “D:\test\Sample.xlsx” (Bạn có thể thay đổi tên tập tin theo ý muốn của bạn).
Cú pháp:
Workbooks(“Workbook Name”).SaveCopyAs([Filename])
Sub WorkbookSaveCopyAsExample()
End Sub
Properties Mô tả
Đối tượng Worksheet trong Excel VBA là một trong những đối tượng được sử dụng thường xuyên nhất trong
khi tự động hoá các tác vụ với VBA.
Đối tượng Worksheet đại diện cho các sheet trong Workbook, tức là mỗi Workbook chứa một hoặc nhiều
Worksheet.
Phương thức Mô tả
Tại sao chúng ta cần phải kích hoạt một Worksheet bằng VBA?
Khi chúng ta phải xử lý nhiều Worksheet (sheet trong một Workbook) và bạn muốn đọc hoặc ghi vào một
Worksheet (sheet) cụ thể thì bạn phải kích hoạt Worksheet đó.
Cú pháp:
Worksheets(“Worksheet Name”).Activate
' Or
Worksheets(“Worksheet Index”).Activate
Áp dụng cú pháp trên bạn sẽ kích hoạt được đối tượng Worksheet cụ thể của một Workbook đang được kích
hoạt.
Sub ActiveWorksheetExample1()
Worksheets("data").Activate
'Or
Sheets("data").Activate
End Sub
Sub ActiveWorksheetExample1()
Worksheets(2).Activate
'Or
Sheets(2).Activate
End Sub
Ví dụ:
Sub vidu3()
Dim wb As Workbook
Set wb = Application.ActiveWorkbook
End Sub
Cú pháp:
Sub CopySheet_Beginning1()
Worksheets("Sheet3").Copy Before:=Worksheets(1)
End Sub
Ví dụ trên, chúng ta sao chép worksheet đang hoạt động đến vị trí đầu tiên trong cùng Workbook.
Sub CopySheet_Beginning2()
ActiveSheet.Copy Before:=Worksheets(1)
End Sub
Sub CopySheet_Ending1()
Worksheets("Sheet3").Copy After:=Worksheets(Worksheets.Count)
End Sub
Ví dụ trên, chúng ta sao chép worksheet đang hoạt động đến vị trí cuối cùng trong cùng Workbook.
Sub CopySheet_Ending2()
ActiveSheet.Copy After:=Worksheets(Worksheets.Count)
End Sub
Cú pháp:
Worksheets(“Sheet Name”).Delete
Sub DeleteSheetExample1()
Sheets("Sheet2").Delete
' or
Sheet2.Delete
End Sub
Ví dụ trên, sẽ hiển thị hộp thoại Excel và thông báo xác nhận tới người dùng để xóa “Sheet2”.
Sub DeleteSheetExample1()
ActiveSheet.Delete
End Sub
Ví dụ trên, chúng ta thực hiện xóa đối tượng Worksheet đang hoạt động từ một Workbook bằng cách sử dụng
phương thức Delete của đối tượng Worksheet.
Sub DeleteSheetExample1()
Application.DisplayAlerts = False
Sheets("Sheet2").Delete
Application.DisplayAlerts = True
End Sub
Ví dụ trên, xóa “Sheet2” nhưng KHÔNG hiển thị hộp thoại Excel thông báo xác nhận tới người dùng.
Đối tượng Range trong Excel VBA là một trong những đối tượng được sử dụng nhiều nhất trong khi tự động hóa
bất kỳ tác vụ nào với VBA. Chúng ta tham chiếu đến các Range khác nhau trong một Worksheet và thực hiện các
hoạt động khác nhau trên Range trong Excel. Chúng ta có các thuộc tính và các phương thức khác nhau để xử lý
các đối tượng Range trong Excel.
Đối tượng Range là đại diện của một cell (hoặc cells) trên Worksheet, là đối tượng quan trọng nhất của Excel VBA.
Range("B3").Value = 2
Kết quả:
Ví dụ 2: đặt một nút lệnh trên Worksheet và thêm dòng code sau:
Range("A1:A4").Value = 5
Kết quả:
Ví dụ 3: đặt một nút lệnh trên Worksheet và thêm dòng code sau:
Cells(3, 2).Value = 2
Kết quả:
Ví dụ 4: đặt một nút lệnh trên Worksheet và thêm dòng code sau:
Kết quả:
rangeObj .Value = 8
Kết quả:
Phương thức Mô tả
Clear Để xóa một Excel Range hoàn toàn bao gồm các định dạng và dữ liệu
ClearComments Để chỉ xóa các bình luận trong Excel Range cụ thể
ClearContents Để chỉ xóa nội dung/dữ liệu trong một Excel Range
ClearFormats Để chỉ xóa các định dạng của một Excel Range
ClearHyperlinks Để chỉ xóa các siêu liên kết trong một Excel Range
Copy Để sao chép một Excel Range đến một vị trí khác
CopyFromRecordset Sao chép dữ liệu từ recordset và dán vào một Excel Range
ListNames Để liệt kê các Excel Range được đặt tên trong bảng tính
PasteSpecial Để dán dữ liệu với các tiêu chí khác nhau, như các giá trị, các định dạng có hoạt động
toán học hoặc chuyển đổi
Ví dụ:
rangeObj.Select
Kết quả:
Lưu ý: Để chọn các ô trên một Worksheet khác, bạn phải kích hoạt Worksheet này trước. Ví dụ, các dòng code sau đây
chọn ô B7 trên Worksheet thứ ba từ bên trái.
Worksheets(3).Activate
Worksheets(3).Range("B7").Select
Ví dụ:
Range("A1:A2").Select
Selection.Copy
Range("C3").Select
ActiveSheet.Paste
Kết quả:
Mặc dù phương thức Copy/Paste được cho phép sử dụng trong Excel VBA, nhưng tốt hơn là bạn sử dụng dòng
code dưới đây thay vì đoạn code trên.
Range("C3:C4").Value = Range("A1:A2").Value
ActiveSheet.Paste
Range("A1").ClearContents
Range("A1").Value = ""
Ví dụ:
Range("A1").Formula = "=Sum(B1:B5)"
Phương thức Mô tả
Rows Thuộc tính Rows cho phép truy cập vào một hàng cụ thể của range.
Columns Thuộc tính Columns cho phép truy cập vào một cột cụ thể trong một range.
Ví dụ:
rangeObj.Rows(3).Select
Kết quả:
Ví dụ:
rangeObj.Columns(2).Select
Kết quả:
Ví dụ 1:
MsgBox rangeObj.Count
Kết quả:
Ví dụ 2:
MsgBox rangeObj.Rows.Count
Kết quả:
LongPtr 4 bytes trên hệ thống 32- -2,147,483,648 tới 2,147,483,647 trên hệ thống 32-bit,
bit, -9,223,372,036,854,775,808 tới 9,223,372,036,854,775,807 trên
8 bytes trên hệ thống 64- hệ thống 64-bit
bit
Single 4 bytes -3.402823E38 tới -1.401298E-45 cho các giá trị âm;
1.401298E-45 tới 3.402823E38 cho các giá trị dương
Variant (kiểu 22 bytes + độ dài của chuỗi Giống như String có đội dài thay đổi
ký tự) ký tự (24 bytes trên hệ
thống 64-bit)
n = 100
MsgBox n
MsgBox str
Dim x As Integer
x=6
Range("A1").Value = x
Kết quả:
Range("A1").Value = str
Kết quả:
Dim x As Integer
x = 5.5
Kết quả:
Đó không phải là giá trị đúng! Rõ ràng giá trị biến x được khởi tạo với giá trị 5.5 ở dòng code thứ 2. Vậy tại sao kết
quả lại là 6? Vì chúng ta đã khai báo kiểu dữ liệu của biến x là Integer nên giá trị có chứa dấu phảy động sẽ được ép
thành kiểu Integer.
Ví dụ 2: để sử dụng số có chứa dấu phảy động, chúng ta nên khai báo biến có kiểu giá trị là Double
Dim x As Double
x = 5.5
Kết quả:
flag = True
End If
Kết quả:
Một toán tử (Operator) có thể được định nghĩa bằng cách sử dụng một biểu thức đơn giản – 4 + 5 bằng
9. Ở đây, 4 và 5 được gọi là các toán hạng và + được gọi là toán tử.
Giả sử biến A có giá trị là 5 và biến B có giá trị là 10, sau đó:
Toán tử Mô tả Ví dụ
Mod Phép chia lấy phần dư hai toán hạng B Mod A sẽ cho 0
Giả sử biến A có giá trị là 5 và biến B có giá trị là 10, sau đó:
Toán tử Mô tả Ví dụ
= Kiểm tra nếu giá trị của hai toán hạng bằng nhau hay không. (A = B) là False.
Nếu có, thì điều kiện là đúng.
<> Kiểm tra nếu giá trị của hai toán hạng bằng nhau hay không. (A <> B) là True.
Nếu các giá trị không bằng nhau, thì điều kiện là đúng.
> Kiểm tra nếu giá trị của toán hạng bên trái lớn hơn giá trị của (A > B) là False.
toán hạng bên phải không. Nếu có, thì điều kiện là đúng.
< Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn giá trị (A < B) là True.
của toán hạng bên phải không. Nếu có, thì điều kiện là đúng.
>= Kiểm tra nếu giá trị của toán hạng bên trái lớn hơn hoặc bằng (A >= B) là False.
giá trị của toán hạng bên phải không. Nếu có, thì điều kiện là
đúng.
<= Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn hoặc (A <= B) là True.
bằng giá trị của toán hạng bên phải không. Nếu có, thì điều
kiện là đúng.
Toán tử Mô tả Ví dụ
AND Nếu cả hai điều kiện là True, thì true. a<>0 AND b<>0 là False.
OR Nếu một trong hai điều kiện là True, thì true. a<>0 OR b<>0 là true.
NOT Được sử dụng để đảo ngược trạng thái logic của toán hạng. NOT(a<>0 OR b<>0) là
Nếu một điều kiện có giá trị true, thì toán tử NOT điều kiện đó false.
sẽ là false.
XOR Nếu chỉ một trong hai điều kiện là true thì biểu thức là true, (a<>0 XOR b<>0) là true.
ngược lại là false.
Toán tử Mô tả Ví dụ
Giả sử biến A có giá trị là “Hello” và biến B có giá trị là ” VBA!”, sau đó:
Toán tử Mô tả Ví dụ
Chú ý: Có thể áp dụng toán tử móc nối cho cả số và chuỗi. Đầu ra phụ thuộc vào ngữ cảnh, nếu các biến có giá trị số hoặc
giá trị chuỗi.
Một Function trong VBA (chức năng do người dùng tự định nghĩa) là một nhóm các mã tái sử dụng, được gọi là
bất cứ nơi nào trong chương trình của bạn. Điều này giúp loại bỏ sự việc viết mã giống nhau lặp đi lặp lại. Điều này
cho phép các lập trình viên phân chia một chương trình lớn thành một số chức năng nhỏ và dễ quản lý.
Ngoài các Function sẵn có, VBA cũng cho phép người dùng tạo ra các Function của riêng bạn.
Function FunctionName([parameter-list])
statement 1
statement 2
statement 3
.......
statement n
End Function
statement 1
statement 2
statement 3
.......
statement n
End Function
Trong đó:
[parameter-list]: là danh sách tham số, có thể có không, một hoặc nhiều.
[data-type]: là kiểu giá trị trả về của function, có thể định nghĩa hoặc không.
Ví dụ: bạn có thể truyền hai số vào trong một Function và sau đó bạn mong muốn Function đó trả về tích của hai
số đã cho.
If IsMissing(Width) Then
Else
End If
End Function
Hoặc không cần chỉ rõ kiểu giá trị trả về của function:
If IsMissing(Width) Then
Else
End If
End Function
Note: Một giá trị có thể được trả về với tên của chính Function đó, trong ví dụ trên là giá trị findArea sẽ được trả về cho
Function có tên findArea.
Gọi một Function trong một Function khác hoặc trong một Sub khác
Ví dụ:
Sub ClickButton()
area1 = findArea(10, 5)
area2 = findArea(10)
MsgBox "aria1 = " & area1 & ", area2 = " & area2
End Sub
Kết quả:
Kết quả:
Sub trong VBA hay còn gọi là thủ tục trong VBA là tương tự như function, tuy nhiên có một số khác biệt.
Các thủ tục Sub KHÔNG không có giá trị trả về trong khi các function có thể hoặc không trả lại một giá
trị.
Các thủ tục Sub được gọi với từ khóa Call hoặc không.
statement 1
statement 2
statement 3
.......
statement n
End Sub
Trong đó:
Ví dụ
Ví dụ sau hiển thị tích của hai số đã cho trong một hộp thoại thông báo.
MsgBox x * y
End Sub
Bạn có thể sử dụng hoặc không cần sử dụng từ khóa Call để gọi Sub.
Sub ClickButton()
End Sub
If IsMissing(width) Then
Else
End If
End Function
Gọi Sub trong Cell của Worksheet thông qua một function
Bây giờ bạn sẽ chỉ có thể gọi Sub trong Cell của Worksheet thông qua một function như thể hiện trong ảnh chụp
màn hình sau đây:
Tích của hai số được tính và chỉ được hiển thị trong hộp thoại thông báo:
Kết quả hiển thị trong cell là 0, vì Sub trong VBA không có giá trị trả về:
Khối lệnh With-End With trong VBA cho phép bạn thực hiện nhiều thao tác trên một đối tượng duy nhất. Đây là
một cách khác để làm cho mã chạy nhanh hơn và hiệu quả hơn.
Cú pháp
With objectExpression
[statements]
End With
Trong đó:
objectExpression: Bắt buộc, nó là một biểu thức đối tượng.
statements: Không bắt buộc, một hoặc nhiều câu lệnh có thể tham chiếu đến các thành viên của đối tượng
objectExpression.
Sub WithExample()
With Range("B3")
.Interior.ColorIndex = 7
.Value = "Violet"
End With
End Sub
Ví dụ 2: hiển thị hộp thoại chọn file bằng khối lệnh With.
Dim fd As Office.FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = False
.Filters.Clear
SelectedFile = .SelectedItems(1)
End If
End With
End Sub
Kết quả:
Dim arr1()
Dim arr2(5)
Dim arr3
arr3 = Array("Java","C++","PHP")
TH không chỉ định rõ kiểu giá trị của mảng khi khai báo thì mảng có thể lưu giá trị bất kỳ.
TH chỉ định rõ kiểu giá trị của mảng khi khai báo thì mảng chỉ có thể lưu kiểu giá trị đó.
Sub arrayExample1()
Dim i As Integer
For i = 0 To UBound(arr)
MsgBox ("Gia tri duoc luu trong Array co index " & i & ": " & arr(i))
Next i
End Sub
Kết quả:
Ví dụ
Sub arrayExample2()
arr(0, 0) = "Apple"
arr(0, 1) = "Orange"
arr(0, 2) = "Grapes"
arr(0, 3) = "pineapple"
arr(1, 0) = "cucumber"
arr(1, 1) = "beans"
arr(1, 2) = "carrot"
arr(1, 3) = "tomato"
arr(2, 0) = "potato"
arr(2, 1) = "sandwitch"
arr(2, 2) = "coffee"
arr(2, 3) = "nuts"
MsgBox ("Gia tri duoc luu trong Array co index 0,1: " & arr(0, 1))
MsgBox ("Gia tri duoc luu trong Array co index 2,2: " & arr(2, 2))
End Sub
Kết quả:
Gia tri duoc luu trong Array co index 0,1: Orange
Trong đó:
Preserve: Một tham số tùy chọn, được sử dụng để bảo toàn dữ liệu trong một mảng hiện có khi bạn thay đổi kích
thước của mảng.
arrayName: Một tham số bắt buộc, là tên của biến mảng.
new_size : Một tham số bắt buộc, cho biết kích thước của mảng.
Ví dụ
Trong ví dụ sau, một mảng đã được định nghĩa lại và các giá trị được bảo toàn khi kích thước hiện tại của mảng
được thay đổi.
Sub arrayExample3()
Dim i As Integer
ReDim a(5)
a(0) = "XYZ"
a(1) = 41.25
a(2) = 22
For i = 3 To 7
a(i) = i
Next
For i = 0 To UBound(a)
MsgBox a(i)
Next
End Sub
Kết quả:
XYZ
41.25
22
3
4
5
6
7
Lưu ý: Khi thay đổi kích thước mảng nhỏ hơn ban đầu, dữ liệu trong các phần tử đã loại bỏ sẽ bị mất.
1 LBound
Trả về một số nguyên tương ứng với chỉ số nhỏ nhất của mảng đã cho.
2 UBound
Trả về một số nguyên tương ứng với chỉ số lớn nhất của mảng đã cho.
3 Split
Trả về một mảng chứa một số giá trị nhất định. Split dựa trên một dấu phân cách.
4 Join
Trả về một chuỗi có chứa một số lượng quy định của chuỗi con trong một mảng. Đây là một chức năng đối
lập với phương thức Split.
5 Filter
Ttrả về một mảng chứa một tập hợp con của một mảng chuỗi đã cho dựa trên một tiêu chí lọc cụ thể.
6 IsArray
Trả về một giá trị boolean cho biết biến đầu vào có là mảng hay không.
7 Erase
Được sử dụng để giải phóng bộ nhớ được phân bổ cho các biến mảng.
Trong đó:
ArrayName: Một tham số bắt buộc. Tham số này tương ứng với tên của mảng.
dimension: Một tham số tùy chọn. Nếu nó là ‘1’, thì nó sẽ trả về giới hạn dưới của kích thước thứ nhất; nếu nó là
‘2’, thì nó sẽ trả về giới hạn dưới của thứ hai, vv.
Ví dụ
Sub LBoundArrayExample()
MsgBox ("Chi so nho nhat cu mang arr la: " & LBound(arr))
MsgBox ("Chi so nho nhat cua chieu dau tien cua mang arr2 la: " & _
LBound(arr2, 1))
MsgBox ("Chi so nho nhat cua chieu thu hai cua mang arr2 la: " & _
LBound(arr2, 2))
End Sub
Kết quả:
Trong đó:
ArrayName: Một tham số bắt buộc. Tham số này tương ứng với tên của mảng.
dimension: Một tham số tùy chọn. Nếu nó là ‘1’, thì nó sẽ trả về giới hạn dưới của kích thước thứ nhất; nếu nó là
‘2’, thì nó sẽ trả về giới hạn dưới của thứ hai, vv.
Ví dụ
Sub UBoundArrayExample()
MsgBox ("Chi so nho nhat cu mang arr la: " & UBound(arr))
MsgBox ("Chi so nho nhat cua chieu dau tien cua mang arr2 la: " & _
UBound(arr2, 1))
MsgBox ("Chi so nho nhat cua chieu thu hai cua mang arr2 la: " & _
UBound(arr2, 2))
End Sub
Kết quả:
Ví dụ
Sub SplitArrayExample()
Dim a As Variant
Dim b As Variant
' phan tach chuoi thanh mang dua tren dau phan cach '$'
b = UBound(a)
For i = 0 To b
MsgBox ("Gia tri trong mang co index " & i & " la:" & a(i))
Next
End Sub
Kết quả:
Trong đó:
ArrayName: Một tham số bắt buộc. Một mảng có chứa các chuỗi con được nối.
Delimiter: Một tham số tùy chọn. Tham số được sử dụng để chuyển đổi thành các mảng dựa trên dấu phân cách.
Ví dụ
Sub JoinArrayExample()
Dim a
Dim b As String
b = Join(a)
MsgBox ("Ket qua join khong su dung dau phan cach: b = " & b)
b = Join(a, "$")
MsgBox ("Ket qua join su dung dau phan cach '$': b = " & b)
End Sub
Kết quả:
Ket qua join khong su dung dau phan cach: b = Red Blue Yellow
Ket qua join su dung dau phan cach '$': b = Red$Blue$Yellow
Trong đó:
inputstrings: Một tham số bắt buộc. Tham số này tương ứng với mảng các chuỗi được tìm kiếm.
value: Một tham số bắt buộc. ham số này tương ứng với chuỗi để tìm kiếm đối với tham số đầu vào.
include: Một tham số tùy chọn. Đây là một giá trị Boolean, cho biết có trả lại các chuỗi con bao gồm hay loại trừ.
compare: Một tham số tùy chọn. Tham số này xác định phương thức so sánh nào sẽ được sử dụng.
Ví dụ
Sub FilterArrayExample()
Dim a, b, c, d As Variant
b = Filter(a, "B")
c = Filter(a, "e")
d = Filter(a, "Y")
For Each x In b
Next
For Each y In c
Next
For Each z In d
Next
End Sub
Kết quả:
Trong đó:
ArrayName: Một tham số bắt buộc. Tham số này tương ứng với tên của mảng.
Ví dụ
Sub IsArrayExample()
Dim a, b As Variant
b = "12345"
End Sub
Kết quả:
Trong đó:
ArrayName: Một tham số bắt buộc. Tham số này tương ứng với tên của mảng.
Ví dụ
Sub EraseArrayExample()
Dim numArray(3)
numArray(0) = "VBScript"
numArray(1) = 1.05
numArray(2) = 25
numArray(3) = #4/23/2013#
Dim dynamicArray()
Erase dynamicArray ' giai phong bo nho duoc su dung boi array.
MsgBox ("Gia tri thu nhat cua NumArray la: " & numArray(0))
MsgBox ("Gia tri thu hai cua NumArray la: " & numArray(1))
MsgBox ("Gia tri thu ba cua NumArray la: " & numArray(2))
MsgBox ("Gia tri thu tu cua NumArray la: " & numArray(3))
End Sub
Kết quả:
Collection trong VBA được sử dụng để lưu trữ một nhóm các giá trị. Collection có thể lưu trữ một tập
các hạng mục tương tự, ví dụ như một danh sách tên của các sinh viên hoặc tên quốc gia. Sử dụng một
collection hoặc array cho phép bạn nhanh chóng và dễ dàng thao tác một số lượng lớn các hạng mục.
1. Mở VB Editor(Alt + F11).
2. Tools –> References…
3. Chọn “Microsoft Scripting Runtime”.
4. Click OK.
Task Examples
Task Examples
Truy cập tất cả các phần tử (For Each) Dim fruit As Variant
For Each fruit In coll
Debug. fruit
Next fruit
Note: phần tử đầu tiên của mảng trong VBA có chỉ số là 0. Nhưng phần tử đầu tiên của collection trong VBA có chỉ số
là 1.
Sub collectionExample1()
Dim i As Integer
fruitColl.Add "Apple"
fruitColl.Add "Mango"
fruitColl.Add "Lemon"
fruitColl.Add "Coconut"
For i = 1 To fruitColl.Count
Next i
fruitColl.Remove (1)
End Sub
Kết quả:
Cú pháp:
Trong đó:
Item: Một tham số bắt buộc, là giá trị của hạng mục.
Key: Một tham số tùy chọn, là key của hạng mục.
Before: Một tham số tùy chọn, lưu hạng mục tại vị trí trước vị trí chỉ định.
After: Một tham số tùy chọn, lưu hạng mục tại vị trí sau vị trí chỉ định.
Ngoài việc lưu trữ bằng việc đánh chỉ số tự động, VBA cho phép bạn lưu trữ phần tử của collection với
một Key. Hãy xem ví dụ dưới đây để hiểu về vấn đề này:
Sub collectionExample2()
Dim i As Integer
' hien thi cac phan tu bang phuong thuc Item() theo index
End Sub
Kết quả:
phan tu so 1: Coconut
phan tu so 2: Orange
phan tu so 3: Apple
phan tu "a": Apple
phan tu "C": Coconut
phan tu "O": Orange
phan tu Item(1): Coconut
phan tu Item(2): Orange
phan tu Item(3): Apple
Note: Key trong collection không phân biệt hoa thường.
Nhược điểm
Collection chỉ đọc. Có nghĩa là bạn có thể thêm hoặc xóa một phần tử nhưng bạn không thể thay đổi giá
trị của phần tử đó. Nếu bạn muốn thay đổi các giá trị trong một nhóm các giá trị thì bạn cần phải sử dụng
một mảng.
Trong VBA, chúng ta có thể sử dụng Array hoặc Collection để lưu trữ các nhóm của các giá trị. Ví dụ,
chúng ta có thể sử dụng chúng để lưu trữ danh sách tên khách hàng, điểm của sinh viên, hoặc danh sách
giá trị từ các cell trong một cột.
Dictionary trong VBA lưu trữ dữ liệu dưới dạng cặp key và value, các key không được trùng nhau.
Dictionary được sinh ra để lấp đầy 2 khuyết điểm chính của Collection, với Dictionary chúng ta có thể:
Dưới đây là bảng hướng dẫn sử dụng nhanh collection trong VBA.
Task Example
Task Example
Sub dictionaryExample1()
dict.CompareMode = vbTextCompare
If dict.Exists(sFruit) Then
Else
End If
End Sub
Kết quả:
Với Debug trong Excel VBA chúng ta có thể tạm ngưng (pause) chương trình để xem giá trị của các biến
từ đó biết được luồng chạy của chương trình, thậm chí là thay đổi giá trị của các biến. Đặc biệt Debug
được sử dụng để tìm kiếm bug – một việc quan trọng trong phát triển phần mềm.
Để tạo Breakpoint, bạn phải thực hiện theo các thao tác sau:
Ví dụ:
Nhấn F5 -> nhấn F5 -> Nhập giá trị “lemon” -> click OK.
Xem giá trị của biến sFruit: chọn biến sFruit -> click phải chuột -> chọn Add Watch.
Đến đây là Breakpoint cuối cùng, nhấn F5 để kết thúc chương trình.
Lỗi cú pháp.
Lỗi runtime.
Lỗi Logic.
Lỗi cú pháp
Các lỗi cú pháp, còn gọi là lỗi phân tích cú pháp, xuất hiện tại thời điểm biên dịch code. Ví dụ, dòng sau gây ra một
lỗi cú pháp bởi vì nó thiếu một dấu đóng ngoặc ở dòng 4.
Sub ErrorHanlding_Demo1()
str = "Hello!"
y = Ucase(str
End Sub
Lỗi runtime
Các lỗi runtime, còn được gọi là lỗi ngoại lệ, xảy ra trong quá trình thực thi.
Ví dụ, dòng sau gây ra lỗi runtime vì ở đây cú pháp là chính xác nhưng khi chạy nó đang cố gọi hàm fnmultiply,
nhưng hàm này không tồn tại.
Sub ErrorHanlding_Demo2()
Dim x As Integer
Dim y As Integer
x = fnadd(10, 20)
y = fnmultiply(10, 20)
End Sub
Function fnadd(x,y)
fnadd = x + y
End Function
Lỗi Logic
Lỗi logic có thể là loại lỗi khó khăn nhất để theo dõi. Những lỗi này không phải là kết quả của lỗi cú pháp hoặc lỗi
runtime. Thay vào đó, chúng xuất hiện khi bạn mắc lỗi trong logic khiến cho đầu ra của chương trình không nhận
được kết quả mong đợi.
Ví dụ, chia một số cho số không hoặc một tập lệnh được thực thi trong vòng lặp vô hạn.
Để phát hiện ra nhiều lỗi khi biên dịch hay nói cách khác là hạn chế lỗi khi runtime bạn nên:
Khai báo biến với kiểu dữ liệu (vì VBA không yêu cầu bạn phải khai báo biến).
Khai báo Option Explicit trình Editor bắt những lỗi cú pháp, biến không được định nghĩa và nhiều hơn
thế nữa.
Ví dụ: ví dụ sau trình Editor sẽ báo lỗi biên dịch “Variable not defined” ở dòng số 6 cho bạn.
Option Explicit
Sub ErrorHanlding_Demo1()
str = "Hello!"
y = UCase(str)
End Sub
Xử lý lỗi runtime
Bất kỳ lỗi runtime nào xảy ra đều gây hiện tượng dừng đột ngột. Bạn có thể sử dụng câu lệnh On Error để bắt các
lỗi runtime trong VBA với cú pháp như sau:
1 GoTo line
Cho phép xử lý lỗi bắt đầu ở dòng được chỉ định. Dòng được chỉ định phải ở trong cùng một thủ tục với
câu lệnh On Error.
2 GoTo 0
Vô hiệu hoá xử lý lỗi đã kích hoạt trong thủ tục hiện tại và đặt lại nó thành Nothing.
3 GoTo -1
Vô hiệu hóa ngoại lệ được bật trong thủ tục hiện tại và đặt lại nó thành Nothing.
4 Resume Next
Chỉ định rằng khi xảy ra lỗi runtime, điều khiển sẽ đi đến câu lệnh ngay sau câu lệnh nơi xảy ra lỗi và việc
thực hiện vẫn tiếp tục từ thời điểm đó.
Option Explicit
Sub ErrorHanlding_Demo()
Dim i As Integer
For i = 1 To 5
Next i
Exit Sub
InvalidValue:
MsgBox "Error: " & Err.number & " : " & Err.Description
Resume Next
End Sub
Kết quả:
Click Square Root button: có 2 lỗi được bắt và show ra như sau:
Từ khóa ByRef được sử dụng để truyền tham chiếu và từ khóa ByVal được sử dụng để truyền giá trị. Trong
trường hợp bạn không sử dụng từ khóa nào thì đó là trường hợp truyền giá trị.
Truyền tham chiếu là truyền địa chỉ ô nhớ của biến, do đó khi thay đổi giá trị của biến bên trong thủ tục thì giá trị
của biến cũng bị thay đổi bên ngoài thủ tục.
Truyền giá trị là truyền giá trị của biến (không phải là địa chỉ ô nhớ), thủ tục sẽ tự động tạo ra một địa chỉ ô nhớ
mới để lưu trữ giá trị này, do đó khi thay đổi giá trị của biến truyền vào thủ tục thì giá trị của biến không bị thay
đổi bên ngoài thủ tục.
Sub PassTypeExample()
test = 50
Call PassByValue(test)
Call PassByReference(test)
Call PassByReference(test)
End Sub
test = 100
End Sub
test = 100
End Sub
test = 200
End Sub
Kết quả:
test = 50
test = 100
test = 100
Mệnh đề if-else trong VBA được sử dụng để kiểm tra giá trị dạng boolean của điều kiện. Mệnh đề này
trả về giá trị True hoặc False. Có các kiểu của mệnh đề if-else trong java như sau:
Mệnh đề if
Mệnh đề if-else
Mệnh đề if-elseif-else
Mệnh đề if lồng nhau
1. Mệnh đề if
Mệnh đề if được sử dụng để kiểm tra giá trị dạng boolean của điều kiện. Khối lệnh sau if được thực thi
nếu giá trị của điều kiện là True
Cú pháp:
If (condition) Then
' statement
End If
Ví dụ:
Sub viduIf()
age = 20
End If
End Sub
Kết quả:
2. Mệnh đề if-else
Mệnh đề if-else cũng kiểm tra giá trị dạng boolean của điều kiện. Nếu giá trị điều kiện là True thì chỉ có
khối lệnh sau if sẽ được thực hiện, nếu là False thì chỉ có khối lệnh sau else được thực hiện.
Cú pháp:
If (condition) Then
Else
End If
Ví dụ:
Sub viduIfElse1()
number = 13
Else
End If
End Sub
Kết quả:
3. Mệnh đề if-elseif-else
Mệnh đề if-elseif-else cũng kiểm tra giá trị dạng boolean của điều kiện. Nếu giá trị điều kiện if là True thì
chỉ có khối lệnh sau if sẽ được thực hiện. Nếu giá trị điều kiện ifelse nào là True thì chỉ có khối lệnh sau
elseif đó sẽ được thực hiện… Nếu tất cả điều kiện của if và elseif là False thì chỉ có khối lệnh sau else sẽ
được thực hiện.
Cú pháp:
If (condition1) Then
...
Else
End If
Ví dụ:
Sub viduIfElse2()
marks = 75
MsgBox "Tach!"
Else
End If
End Sub
Kết quả:
Ví dụ:
Sub viduNestedIf()
Dim a As Integer
a = 23
If a > 0 Then
If a = 1 Then
ElseIf a = 2 Then
ElseIf a = 3 Then
Else
End If
Else
End If
End Sub
Kết quả:
Click OK.
Vòng lặp for trong VBA được sử dụng để lặp một phần của chương trình nhiều lần. Nếu số lần lặp là cố định thì
vòng lặp for được khuyến khích sử dụng, còn nếu số lần lặp không cố định thì nên sử dụng vòng lặp while hoặc do
while.
Cú pháp
Dưới đây là cú pháp của một vòng lặp for trong VBA.
[statement 1]
[statement 2]
....
[statement 10]
[Exit For]
[statement 11]
[statement 22]
....
[statement n]
Next
[Step stepcount] là tùy chọn, nó rất hữu ích khi đếm lùi, đếm nhiều đơn vị một vòng lặp. Hãy xem các ví dụ dưới
đây để hiểu các trường hợp sử dụng vòng lặp for trong VBA.
Sub ForExample1()
Dim i As Integer
For i = 0 To 10 Step 2
Next
End Sub
Kết quả:
Sub ForExample2()
Dim i As Integer
For i = 10 To 0 Step -2
Next
End Sub
Kết quả:
Sub ForExample3()
Dim i As Integer
For i = 1 To 5
Next
End Sub
Kết quả:
Ví dụ:
Sub ForExample4()
Dim i As Integer
For i = 0 To 10
If i > 3 Then
Exit For
Else
End If
Next
End Sub
Vòng lặp For Each trong VBA được sử dụng để thực hiện một câu lệnh hoặc một nhóm các câu lệnh cho mỗi phần
tử của một mảng hoặc một collection.
Một vòng lặp For Each tương tự vòng lặp For. Tuy nhiên, vòng lặp For Each được thực hiện cho mỗi phần tử của
một mảng hoặc collection. Do đó, bộ đếm Step sẽ không tồn tại trong loại vòng lặp này.
Cú pháp
Dưới đây là cú pháp của một vòng lặp For Each trong VBA.
[statement 1]
[statement 2]
....
[statement 10]
[Exit For]
[statement 11]
[statement 12]
[statement n]
Next
Sub ForEachExample()
Next
MsgBox fruitNames
End Sub
Kết quả:
apple
orange
mango
26. Vòng lặp While-Wend trong VBA
Vòng lặp While-Wend trong VBA được sử dụng để lặp một phần của chương trình một vài lần. Nếu điều kiện là
True, tất cả các câu lệnh được thực hiện cho đến khi gặp từ khóa Wend. Nếu điều kiện là False, vòng lặp sẽ thoát và
nhảy tới câu lệnh tiếp theo sau từ khoá Wend.
Cú pháp
While (condition)
Wend
Sub whileWendExample()
counter = 10
MsgBox "Gia tri hien tai cua counter la: " & counter
counter = counter + 1
Wend
End Sub
Kết quả:
Vòng lặp Do-While trong VBA được sử dụng để lặp một phần của chương trình một vài lần khi điều kiện là True.
Điều kiện có thể được kiểm tra ở đầu vòng lặp hoặc ở cuối vòng lặp.
TH này Tương tự như vòng lặp While-Wend, ngoại trừ Do-While thực hiện lệnh ít nhất một lần ngay cả khi điều
kiện là False vì nó thực hiện lệnh trước khi kiểm tra điều kiện.
Do
[statement 1]
[statement 2]
...
[statement l]
[Exit Do]
[statement m]
...
[statement n]
Ví dụ 1:
Sub doWhileExample1()
counter = 1
Do
MsgBox "Gia tri hien tai cua counter la: " & counter
counter = counter + 1
End Sub
Kết quả:
Do While condition
[statement 1]
[statement 2]
...
[statement l]
[Exit Do]
[statement m]
...
[statement n]
Loop
Ví dụ 2:
Sub doWhileExample2()
counter = 1
MsgBox "Gia tri hien tai cua counter la: " & counter
counter = counter + 1
Loop
End Sub
Kết quả:
Vòng lặp Do-Until trong VBA được sử dụng để lặp một phần của chương trình một vài lần khi điều kiện là False.
Điều kiện có thể được kiểm tra ở đầu vòng lặp hoặc ở cuối vòng lặp.
TH này Do-Util thực hiện lệnh ít nhất một lần ngay cả khi điều kiện là True vì nó thực hiện lệnh trước khi kiểm
tra điều kiện.
Do
[statement 1]
[statement 2]
...
[statement l]
[Exit Do]
[statement m]
...
[statement n]
Ví dụ 1:
Sub doUntilExample1()
counter = 1
Do
MsgBox "Gia tri hien tai cua counter la: " & counter
counter = counter + 1
End Sub
Kết quả:
Do Until condition
[statement 1]
[statement 2]
...
[statement l]
[Exit Do]
[statement m]
...
[statement n]
Loop
Ví dụ 2:
Sub doUntilExample2()
counter = 1
MsgBox "Gia tri hien tai cua counter la: " & counter
counter = counter + 1
Loop
End Sub
Kết quả:
Mệnh đề Select-Case trong VBA được sử dụng để thực thi 1 hoặc nhiều khối lệnh từ nhiều điều kiện.
Khi một người dùng muốn thực hiện một nhóm các câu lệnh tùy thuộc vào một giá trị của một biểu thức, thì
Select-Case sẽ được sử dụng. Mỗi giá trị được gọi là Case. Câu lệnh Case Else được thực thi nếu biểu thức kiểm tra
không khớp với bất kỳ trường hợp nào được chỉ định bởi người dùng.
Case Else là một câu lệnh tùy chọn trong mệnh đề Select-Case, tuy nhiên, nó là tốt hơn khi luôn luôn có một câu
lệnh Case Else.
Case expressionlist1
statement1
statement2
....
Case expressionlist2
statement1
statement2
....
Case expressionlistn
statement1
statement2
....
Case Else
elsestatement1
elsestatement2
....
End Select
Sub SelectCaseExample()
myVar = 1
Case 1
Case 2
Case 3
Case Else
End Select
End Sub
Kết quả:
String trong VBA (hay chuỗi) là một dãy ký tự, có thể bao gồm các chữ cái, số, ký tự đặc biệt hoặc tất cả chúng.
Ví dụ:
str1 = "string"
str2 = "132.45"
str3 = "!@#$;*"
Str4 = "Asc23@#"
Sub StringExample1()
str2 = "VBA!"
End Sub
Kết quả:
Hello VBA! 1
Hello VBA! 2
1 InStr
Trả về lần xuất hiện đầu tiên của chuỗi con được chỉ định. Tìm kiếm xảy ra từ trái sang phải.
2 InstrRev
Trả về lần xuất hiện đầu tiên của chuỗi con được chỉ định. Tìm kiếm xảy ra từ bên phải sang trái.
3 Lcase
Trả về chuỗi chữ hoa của chuỗi được chỉ định.
4 Ucase
Trả về chuỗi chữ thường của chuỗi được chỉ định.
5 Left
Trả lại một số ký tự cụ thể từ phía bên trái của chuỗi.
6 Right
Trả lại một số ký tự cụ thể từ phía bên phải của chuỗi.
7 Mid
Trả lại một số ký tự cụ thể từ một chuỗi dựa trên các tham số được chỉ định.
8 Ltrim
Trả về một chuỗi sau khi loại bỏ các khoảng trống ở phía bên trái của chuỗi được chỉ định.
9 Rtrim
Trả về một chuỗi sau khi loại bỏ các khoảng trống ở phía bên phải của chuỗi được chỉ định.
10 Trim
Trả về một giá trị chuỗi sau khi loại bỏ khoảng trống cả đầu và cuối chuỗi.
11 Len
Trả về độ dài của chuỗi đã cho.
12 Replace
Trả về một chuỗi sau khi thay thế một chuỗi với một chuỗi khác.
13 Space
Điền vào một chuỗi với số ký tự space được chỉ định.
14 StrComp
Trả về một giá trị số nguyên sau khi so sánh hai chuỗi được chỉ định.
15 String
Trả về một chuỗi ký tự được chỉ định cho số lần được chỉ định.
16 StrReverse
Trả về một chuỗi sau khi đảo ngược chuỗi ký tự của chuỗi đã cho.
Các hàm xử lý Date và Time trong VBA giúp các nhà phát triển chuyển đổi ngày và thời gian từ một định dạng
này sang định dạng khác hoặc để lấy ra giá trị ngày hoặc giờ theo định dạng phù hợp.
1 Date
trả về ngày hệ thống hiện tại.
2 CDate
chuyển đổi một chuỗi đầu vào cho trước thành kiểu Date.
3 DateAdd
trả về một ngày mà một khoảng thời gian xác định đã được thêm vào.
4 DateDiff
trả về sự khác biệt giữa hai khoảng thời gian.
5 DatePart
trả về một phần quy định của giá trị date đã cho.
6 DateSerial
trả về một ngày hợp lệ cho một năm, tháng và ngày cho trước.
7 FormatDateTime
định dạng ngày dựa trên các thông số được cung cấp.
8 IsDate
trả về một giá trị Boolean tham số được cung cấp có phải là một date hay không.
9 Day
trả về một số nguyên giữa 1 và 31 đại diện cho ngày của date đã cho.
10 Month
trả về một số nguyên giữa 1 và 12 đại diện cho tháng của date đã cho.
11 Year
trả về một số nguyên đại diện cho năm của date đã cho.
12 MonthName
trả về tên của tháng cụ thể cho date đã cho.
13 WeekDay
trả lại một số nguyên (1 đến 7) đại diện cho ngày trong tuần cho date đã cho.
14 WeekDayName
trả về tên ngày trong tuần cho date đã cho.
1 Now
trả về ngày và giờ hệ thống hiện tại.
2 Hour
trả về một số nguyên giữa 0 và 23 đại diện cho phần giờ của time đã cho.
3 Minute
trả về một số nguyên từ 0 đến 59 đại diện cho phần phút của time đã cho.
4 Second
trả về một số nguyên giữa 0 và 59 đại diện cho phần giây của time đã cho.
5 Time
trả về thời gian hệ thống hiện tại.
6 Timer
trả lại số giây kể từ 12:00 AM.
7 TimeSerial
định dạng thời gian dựa trên các thông số được cung cấp.
8 TimeValue
chuyển đổi chuỗi đầu vào sang định dạng thời gian.
Sau khi giải nén ra chúng ta được một file ISO tên là VS2015_ENT_ENU
Nếu như hệ điều hành của chúng ta là Win 10, Win 8 thì chuột phải vào file vs2015.ent_enu.iso rồi chọn Mount để
tạo ra 1 ổ đĩa ảo, từ đó chúng ta có thể cài đặt.
Nếu như hệ điều hành của chúng ta là Win 7 và có cài đặt phần mềm UltraISO chúng ta cũng có thể chuột phải vào
chọn Mount to drive để tạo ra ổ ảo và cài đặt.
Nếu như hệ điều hành của chúng ta là Win 7 và không có cài đặt phần mềm UltraISO chúng ta có thể sử dụng
Winzar để giải nén, sau đó tiến hành cài đặt bình thường
Sau khi Mount tạo ra ổ đĩa ảo hoặc giải nén ra ta được một số file như sau:
Chuột phải vào file vs_enterprise chọn Run as Administrator, chương trình sẽ chạy một số màn hình như sau
Phần lựa chọn nơi cài đặt, bạn lưu ý máy tính phải còn ít nhất 10GB để lưu dữ liệu.
Chọn lựa chọn cài đặt là Default,sau đó ấn Install.
Máy sẽ tự chạy các phần cài đặt trong khoảng 1h -1h30 (do bộ cài có rất nhiều tính năng nên cần thời gian cài đặt).
Chúng ta sẽ để cho máy tự cài đặt, trong thời gian đó chúng ta làm các công việc khác bình thường (lưu ý là không
tắt máy).
Một số màn hình khi cài đặt như sau:
Khi cài đặt xong chúng ra Restart để khởi động lại máy.
Khi khởi động lại, máy có thể update một số nội dung, bạn cứ đợi máy update cho đến khi xong thì thôi, lưu ý không
tắt máy trong quá trình này, để máy tự chạy.
Sau khi cài xong Visual Studio, chúng ta tiến hành cài đặt SQL Server Data Tools.
Phần 2: Cài đặt SQL Server Data Tools 2015
Chúng ta có file ISO, chúng ta cũng làm tương tự như file Visual Studio (Mount ra ổ ảo hoặc giải nén) để có được file
cài đặt như hình sau:
Sau đó máy sẽ tự chạy cài đặt, chúng ta đợi cho máy chạy xong là xong.
Sau khi cài đặt xong chúng ta Restart lại máy là có thể sẵn sàng sử dụng.
Trong quá trình cài đặt nếu gặp lỗi anh chị liên hệ MasterMOS để được hỗ trợ xử lý.
Màn hình New Project xuất hiện, ấn chọn Intergration Services Project, phần Name là nơi đặt tên cho tên
của Project, phần Location là nơi lưu Project trên ổ đĩa cứng.
Phần Create directory for solution lưu ý bỏ tích để không chọn phần này.
Môi trường làm việc cho Project xuất hiện, cho phép chúng ta bắt đầu thực hiện những công việc mình
mong muốn.
Chú ý màn hình quan trọng là SSIS Toolbox: đây là hộp công cụ cho phép chúng ta lựa chọn các tính năng
quan trọng của SSDT để đưa vào trong Project, thực hiện các nhiệm vụ mà chúng ta mong muốn.
Trong phần SSIS Toolbox, chú ý phần Container, bao gồm 2 Container chính sau:
For Loop Container: Cho phép tạo luồng chạy dữ liệu có tính lặp lại, ví dụ có thể cho chạy dữ liệu của cả 1
năm từ 01/01 đến 31/12 dựa vào Container For Loop
Sequence Container: Cho phép tạo luồng chạy tuần tự, các đối tượng bên trong Sequence Container sẽ
được chạy tuần tự dựa theo chiều của mũi tên kết nối các đối tượng, giữa các Sequence Container cũng
được chay tuần tự dựa theo chiều mũi tên nối các Sequence Container.
Kết quả làm việc với SSIS sẽ giúp chúng ta tạo ra các màn hình Control Flow để kiểm soát, thực thị các
luồng chạy dữ liệu, và Data Flow cho phép chúng ta cấu hình một luồng chạy dữ liệu cụ thể.
Ví dụ Data Flow của phần import file Excel tự động vào SQL Server
Lưu ý quan trọng: Trước khi tạo luồng import file TEXT tên là TGTT vào trong Database Interface, chúng ta cần tạo
ra bảng INT_NonTermDeposits để nhận dữ liệu import từ file Text. Bảng INT_NonTermDeposits có những trường
như sau:
Chúng ta bắt đầu thiết lập luồng import dữ liệu từ file TEXT vào trong SQL Server như sau:
Tạo 1 Execute SQL Task để viết câu lệnh TRUNCATE TABLE bảng INTERFACE, đảm bảo dữ liệu hàng ngày load vào
sẽ không bị trùng lặp, do dữ liệu cũ đang có đã bị xóa sạch đi.
Ấn vào đối tượng Execute Task rồi chọn RENAME, đặt tên là TRUNCATE INTERFACE TABLE
Sau đó ấn đúp vào TRUNCATE INTERFACE TABLE để cấu hình Task này
Gõ tên Server name và pass để truy cập vào SQL Server mà mình muốn kết nối
Phần SQLStatement: ấn vào dấu … và bắt đầu viết 1 đoạn CODE SQL ngắn như sau:
TRUNCATE TABLE INT_FactNonTermDeposits, sau đó ấn OK.
Chuột phải vào Task “TRUNCATE TABLE INTERFACE” chọn Execute Task để kiểm tra xem việc cấu hình đã được
thực hiện thành công hay chưa.
Nếu xuất hiện biểu tượng màu xanh như dưới đây là đã thành công.
Tiếp theo chúng ta kéo Phần Data Flow Task từ SSIS Toolbox vào Project chúng ta đang thực hiện
Sau đó ấn đúp vào IMPORT TXt FILE để chuyển sang màn hình Data Flow
Phần SSIS Toolbox xuất hiện 2 công cụ ứng với phần Data Flow là Source Assistant và Destination Assistant
Phần Connection Manager Name đổi tên thành TGTT_Connection, phần Browse ta tìm đến nơi chứa file TXT cần
import
Ở phần bên trái ta chú ý có các mục General, Columns, Advanced, Preview.
Chuyển sang phần Columns
Phần Row delimiter để mặc định,
Phần Column delimiter thì dựa vào ký phân cách các cột do file TEXT quy định mà ta điền vào tương ứng. Người ta
thường hay phân cách bằng dấu #, *;, nhưng dấu # là được dùng nhiều nhất.
Phần thông tin hiện ra đã chia tách các cột trong rất đẹp rồi
Chuyển sang tab Advanced, lựa chọn tất cả các cột rồi chọn Kiểu dữ liệu và độ dài của kiểu dữ liệu
Sau đó ấn OK
Tiếp theo kéo Destination Assistant vào Data Flow, chọn SQL Server.
Phần connection, ta đã có sẵn connection kết nối đến Database Interface ở phần tạo Execute Task – TRUNCATE
TABLE nên giờ ta có thể sử dụng luôn, không cần tạo ra Connection mới.
Ấn đúp vào phần OLE DB Destination, chọn màn hình thông báo hiện ra chọn Yes
Các nội dung khác bạn thực hiện như hình minh họa dưới đây:
Chi tiết các nội dung anh chị xem trong tài liệu đính kèm khóa học này, mục
SQL nâng cao
Bài 32: Bài tập lớn để kiểm tra đầu ra, cấp
chứng chỉ và ứng dụng thực tế sau khóa học
1. Nội dung bài kiểm tra sẽ được gửi qua email.
2. Sau khi học xong anh chị sẽ được cấp chứng chỉ hoàn thành khóa học.
3. MasterMOS tiếp tục hỗ trợ, tư vấn cho các anh chị các vấn đề sau khóa học:
Tư vấn xây dựng cơ sở dữ liệu, xây dựng tự động hóa báo cáo phù hợp với tình
huống công việc hiện tại của học viên.
Cung cấp các cập nhật, bài viết mới nhất về các công cụ sử dụng trong khóa học
Hỗ trợ trả lời thắc mắc qua FanPage, Group.
Các kênh thông tin hỗ trợ:
Website: www.mastermos.edu.vn
Fanpage: https://www.facebook.com/mastermosvn
Email: mastermosvn@gmail.com
Mobile: 0987.581.645
4. Các sản phẩm khác của MasterMOS:
Các khóa đào tạo luyện thi chứng chỉ tin học văn phòng Microsoft Office Specialist MOS
(tập trung vào các môn học chính Excel, Word, Powerpoint, Outlook…) được Microsoft
công nhận toàn cầu.
Các khóa đào tạo chuyên sâu về xử lý dữ liệu, làm báo cáo tự động với SQL, VBA và Excel
Các khóa đào tạo tin học văn phòng dành cho người đi làm, xây dựng báo cáo Dashboard,
báo cáo thông minh.
Website www.mastermos.edu.vn giới thiệu chung về các lĩnh vực hoạt động của
MasterMOS.
Website www.hoctinonline.edu.vn: học trực tuyến chuyên biệt trong lĩnh vực tin học văn
phòng, tin học cơ bản, các khóa tin học chuyên sâu khác…
Website www.sosanhkhoahoc.edu.vn: chuyên về tư vấn, giới thiệu các khóa học online
với nguồn khóa học phong phú từ các học viện online lớn nhất Việt Nam: edumall.vn,
unica.vn,kyna.vn…