Lấy và lọc dữ liệu từ bên ngoài trước khi đưa vào Excel

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi levanduyet, 11 Tháng một 2005.

6,715 lượt xem

  1. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    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!).
    [​IMG]
    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)
     
    Last edited: 11 Tháng một 2005
    #1
  2. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    Xin lỗi các bạn, loạt bài viết này của tôi không thể đưa hình vào thì các bạn rất khó hiểu. Tôi đang thử liên hệ với các bác Admin.
    Lê Văn Duyệt
     
    #2

Chia sẻ trang này