ADO, Phần I
HÃY CÙNG NHAU HỌC CÁCH KẾT NỐI VÀ LẤY DỮ LIỆU TỪ BÊN NGOÀI VÀO EXCEL
Chắc các bạn cũng giống như tôi, sẽ có lúc các bạn tự hỏi “Mình đã dùng Excel lâu rồi, mình cảm thấy cần phải có cơ sở dữ liệu khác để lưu trữ tốt hơn! Mình chỉ muốn sử dụng sau khi sàn lọc dữ liệu thì mình đưa dữ liệu ra Excel để...!!!”
Vâng, một câu hỏi thật hấp dẫn có phải không bạn ?!
Cơ sở dữ liệu thì có rất nhiều ! Chúng ta hãy bắt đầu với Excel nhé! Ở đây tôi chỉ có tham vọng là chúng ta cùng nhau học hỏi và chia sẻ cho nhau nhằm làm cho công việc của bạn và tôi mỗi ngày được đơn giản hơn thôi !
Cơ sở dữ liệu cho bài đầu tiên của tôi, tôi dùng Excel. Tôi sẽ thiết kế cơ sở dữ liệu của tôi là các bảng. Các bảng được đặt tên (nên đặt tên không có dấu và dễ hiểu) và chú ý hàng đầu tiên của bảng cũng chính là tên của trường (tương tự trên, cũng nên đặt tên trường không dấu và dễ hiểu). Giả sử tôi có một bảng trong sheet Dulieu, được đặt tên là SoLuongMoiNgay. Với các trường dữ liệu là: MaSP (Mã sản phẩm), MoTa (Mô tả), DonVi (Đơn vị), NgayNhap (Ngày sản xuất), Thang (Tháng, có công thức là =month(...)), SoLuong (Số lượng), DonGia (Đơn giá), ThanhTien (Thành tiền, có công thức là = SoLuong*DonGia). Dữ liệu trong bảng này sẽ được nhập hàng ngày (Tôi sẽ bàn về việc nhập liệu này sau!).
Bây giờ để kết nối với cơ sở dữ liệu ta có nhiều cách, giả sử tôi sử dụng ADO. Xin tham khảo thêm ở trang web: www.vovisoft.com (ở mục lập trình ADO trong visual basic, http://www.vovisoft.com/visualbasic/VB6Chapter16.htm) hay một số bài tại địa chỉ web sau:
www.erlandsendata.no/english/index6bb4.html?t=envbadac
Sub LayDuLieu(SourceFile As String, SourceRange As String,TargetRange As Range)
' Nguồn tham khảo lấy từ Erlandsen Data Consulting
' Phải tham chiếu đến đến thư việc Microsoft ActiveX Data Objects
Dim DBConnection As ADODB.Connection, rs As ADODB.Recordset
Dim DBConnectionString As String
Dim TargetCell As Range, i As Integer
DBConnectionString = "DRIVER={Microsoft Excel Driver (*.xls)};" & _
"ReadOnly=1;DBQ=" & SourceFile
Set DBConnection = New ADODB.Connection
On Error GoTo InvalidInput
DBConnection.Open DBConnectionString ' open the database connection
Set rs = DBConnection.Execute("[" & SourceRange & "]")
Set TargetCell = TargetRange.Cells(1, 1)
‘ Xuất tên trường dữ liệu ra
For i = 0 To rs.Fields.Count - 1
TargetCell.Offset(0, i).Formula = rs.Fields(i).Name
Next i
‘ Di chuyển xuống hàng kế tiếp để xuất dữ liệu ra
Set TargetCell = TargetCell.Offset(1, 0)
TargetCell.CopyFromRecordset rs
rs.Close
DBConnection.Close ' đóng kết nối với dữ liệu
Set TargetCell = Nothing
Set rs = Nothing
Set DBConnection = Nothing
On Error GoTo 0
Exit Sub
InvalidInput:
MsgBox "Tên file hay tên khối dữ liệu không tồn tại!", _
vbExclamation, "Chú ý"
End Sub
Với ví dụ trên các bạn thấy chúng ta phải biết ADODB.Connection, ADO.Recordset
Đầu tiên chúng ta khai báo biến kết nối (ADODB.Connection), biến Recordset (ADO.Recordset), chuỗi kết nối (DBConnectionString). Chuỗi kết nối này sẽ khác nhau khi bạn muốn kết nối với các nguồn dữ liệu khác nhau. Bạn có thể tham khảo chuỗi kết nối ở link tôi đưa ra ở trên.
Bắt đầu kết nối với dữ liệu. Dùng biến Recordset để lấy dữ liệu và xuất dữ liệu ra. Với phương thức Excute, và phối hợp với các câu lệnh SQL bạn sẽ tha hồ mà trích rút dữ liệu xuất ra ngoài Excel.
Chú ý: Đối với Excel XP thì File chứa dữ liệu phải đóng! Còn đối với Excel 2003 tôi thử thì không cần File dữ liệu phải đóng! (Tôi đã thử vài lần) Chính vì vậy tôi đã thay đổi tên thủ tục (khác với nguồn tôi tham khảo).
Với cách giới thiệu ngắn gọn trên, chắc có lẻ nhiều bạn sẽ cảm thấy khó hiểu !!! Chúng ta sẽ từng bước tìm hiểu các đối tượng trong chương trình có khai báo trên. Hẹn gặp lại các bạn phần sau!
Lê Văn Duyệt
(Chú ý: Các bạn phải đọc các bài giới thiệu trên thì mới dễ hiểu, hay các bạn có thể tham khảo ở các tài liệu khác)
HÃY CÙNG NHAU HỌC CÁCH KẾT NỐI VÀ LẤY DỮ LIỆU TỪ BÊN NGOÀI VÀO EXCEL
Chắc các bạn cũng giống như tôi, sẽ có lúc các bạn tự hỏi “Mình đã dùng Excel lâu rồi, mình cảm thấy cần phải có cơ sở dữ liệu khác để lưu trữ tốt hơn! Mình chỉ muốn sử dụng sau khi sàn lọc dữ liệu thì mình đưa dữ liệu ra Excel để...!!!”
Vâng, một câu hỏi thật hấp dẫn có phải không bạn ?!
Cơ sở dữ liệu thì có rất nhiều ! Chúng ta hãy bắt đầu với Excel nhé! Ở đây tôi chỉ có tham vọng là chúng ta cùng nhau học hỏi và chia sẻ cho nhau nhằm làm cho công việc của bạn và tôi mỗi ngày được đơn giản hơn thôi !
Cơ sở dữ liệu cho bài đầu tiên của tôi, tôi dùng Excel. Tôi sẽ thiết kế cơ sở dữ liệu của tôi là các bảng. Các bảng được đặt tên (nên đặt tên không có dấu và dễ hiểu) và chú ý hàng đầu tiên của bảng cũng chính là tên của trường (tương tự trên, cũng nên đặt tên trường không dấu và dễ hiểu). Giả sử tôi có một bảng trong sheet Dulieu, được đặt tên là SoLuongMoiNgay. Với các trường dữ liệu là: MaSP (Mã sản phẩm), MoTa (Mô tả), DonVi (Đơn vị), NgayNhap (Ngày sản xuất), Thang (Tháng, có công thức là =month(...)), SoLuong (Số lượng), DonGia (Đơn giá), ThanhTien (Thành tiền, có công thức là = SoLuong*DonGia). Dữ liệu trong bảng này sẽ được nhập hàng ngày (Tôi sẽ bàn về việc nhập liệu này sau!).
Bây giờ để kết nối với cơ sở dữ liệu ta có nhiều cách, giả sử tôi sử dụng ADO. Xin tham khảo thêm ở trang web: www.vovisoft.com (ở mục lập trình ADO trong visual basic, http://www.vovisoft.com/visualbasic/VB6Chapter16.htm) hay một số bài tại địa chỉ web sau:
www.erlandsendata.no/english/index6bb4.html?t=envbadac
Sub LayDuLieu(SourceFile As String, SourceRange As String,TargetRange As Range)
' Nguồn tham khảo lấy từ Erlandsen Data Consulting
' Phải tham chiếu đến đến thư việc Microsoft ActiveX Data Objects
Dim DBConnection As ADODB.Connection, rs As ADODB.Recordset
Dim DBConnectionString As String
Dim TargetCell As Range, i As Integer
DBConnectionString = "DRIVER={Microsoft Excel Driver (*.xls)};" & _
"ReadOnly=1;DBQ=" & SourceFile
Set DBConnection = New ADODB.Connection
On Error GoTo InvalidInput
DBConnection.Open DBConnectionString ' open the database connection
Set rs = DBConnection.Execute("[" & SourceRange & "]")
Set TargetCell = TargetRange.Cells(1, 1)
‘ Xuất tên trường dữ liệu ra
For i = 0 To rs.Fields.Count - 1
TargetCell.Offset(0, i).Formula = rs.Fields(i).Name
Next i
‘ Di chuyển xuống hàng kế tiếp để xuất dữ liệu ra
Set TargetCell = TargetCell.Offset(1, 0)
TargetCell.CopyFromRecordset rs
rs.Close
DBConnection.Close ' đóng kết nối với dữ liệu
Set TargetCell = Nothing
Set rs = Nothing
Set DBConnection = Nothing
On Error GoTo 0
Exit Sub
InvalidInput:
MsgBox "Tên file hay tên khối dữ liệu không tồn tại!", _
vbExclamation, "Chú ý"
End Sub
Với ví dụ trên các bạn thấy chúng ta phải biết ADODB.Connection, ADO.Recordset
Đầu tiên chúng ta khai báo biến kết nối (ADODB.Connection), biến Recordset (ADO.Recordset), chuỗi kết nối (DBConnectionString). Chuỗi kết nối này sẽ khác nhau khi bạn muốn kết nối với các nguồn dữ liệu khác nhau. Bạn có thể tham khảo chuỗi kết nối ở link tôi đưa ra ở trên.
Bắt đầu kết nối với dữ liệu. Dùng biến Recordset để lấy dữ liệu và xuất dữ liệu ra. Với phương thức Excute, và phối hợp với các câu lệnh SQL bạn sẽ tha hồ mà trích rút dữ liệu xuất ra ngoài Excel.
Chú ý: Đối với Excel XP thì File chứa dữ liệu phải đóng! Còn đối với Excel 2003 tôi thử thì không cần File dữ liệu phải đóng! (Tôi đã thử vài lần) Chính vì vậy tôi đã thay đổi tên thủ tục (khác với nguồn tôi tham khảo).
Với cách giới thiệu ngắn gọn trên, chắc có lẻ nhiều bạn sẽ cảm thấy khó hiểu !!! Chúng ta sẽ từng bước tìm hiểu các đối tượng trong chương trình có khai báo trên. Hẹn gặp lại các bạn phần sau!
Lê Văn Duyệt
(Chú ý: Các bạn phải đọc các bài giới thiệu trên thì mới dễ hiểu, hay các bạn có thể tham khảo ở các tài liệu khác)
Sửa lần cuối: