Thảo luận về bài: ADO căn bản "Kết nối truy vấn CSDL từ file Excel đến file Access."

Liên hệ QC
Đầu tiên bạn chỉnh kiểu dữ liệu của trường BMaHang của bảng tblBan về kiểu number cho giống với HMaHang của bảng tblHang, và chỉnh KMaKhoLuuTru của bảng tblKho về làm khóa chính.

Code trong Excel để lấy dữ liệu theo yêu cầu của bạn là:

Mã:
Option Explicit
Sub LayDL()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim lsSQL As String
With cnn
    .Provider = "Microsoft Jet 4.0 OLE DB Provider"
    .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\data.mdb"
    .CursorLocation = adUseClient
    .Open

End With

    lsSQL = "SELECT tblBan.BNgay, tblBan.BMaHang, tblHang.HTenhang, tblBan.BMaKhoLuuTru, tblKho.KTenKhoLuuTru, tblBan.BSoLuongBan " & _
                    "FROM tblKho INNER JOIN (tblHang INNER JOIN tblBan ON tblHang.HMaHang = tblBan.BMaHang) ON tblKho.KMaKhoLuuTru = tblBan.BMaKhoLuuTru;"

    rst.Open lsSQL, cnn, 1, 3
    [b5:g6000].ClearContents
    [b5].CopyFromRecordset rst
    
rst.Close: Set rst = Nothing
cnn.Close: Set cnn = Nothing

End Sub

Bạn xem file đính kèm nhé

Lưu ý: Giải nén rồi mới chạy file Excel nhé.

Em cũng mới tọ mọ excel cũng đang cần nối Dữ liệu với bảng tính excel vì dữ liệu mà lưu nhiều trong excel thì máy chạy như rùa, nên em muốn tìm hiểu cách để nối, lấy dữ liệu từ access ra excel tính toán. Rất giống ví dụ trên, em đã tải về file ketnoi nhưng không thấy excel hoạt động (hoặc không biết cách làm nó hoạt động), em không biết đoạn code trên phải viết ở đâu. Em còn gà lắm, mong các bác chỉ bảo chi tiết hơn. Cảm ơn các bác.
 
Em cũng mới tọ mọ excel cũng đang cần nối Dữ liệu với bảng tính excel vì dữ liệu mà lưu nhiều trong excel thì máy chạy như rùa, nên em muốn tìm hiểu cách để nối, lấy dữ liệu từ access ra excel tính toán. Rất giống ví dụ trên, em đã tải về file ketnoi nhưng không thấy excel hoạt động (hoặc không biết cách làm nó hoạt động), em không biết đoạn code trên phải viết ở đâu. Em còn gà lắm, mong các bác chỉ bảo chi tiết hơn. Cảm ơn các bác.
Bạn xem các đoạn Phim là biết phải làm gì
ADO căn bản: Kết nối truy vấn CSDL từ file Excel đến file Access.
 
Cảm ơn bạn nhưng khi mình kích vào lấy dữ liệu, nó báo lỗi gì đó và không thực hiện. Mình muốn lấy một phần dữ liệu, ví dụ một tuần hay một tháng bán hàng trong cơ sở dữ liệu của một năm. Dữ liệu cần lấy có thể thay đổi là tháng 1 hay tháng 2 trong năm.
 
Cảm ơn bạn nhưng khi mình kích vào lấy dữ liệu, nó báo lỗi gì đó và không thực hiện. Mình muốn lấy một phần dữ liệu, ví dụ một tuần hay một tháng bán hàng trong cơ sở dữ liệu của một năm. Dữ liệu cần lấy có thể thay đổi là tháng 1 hay tháng 2 trong năm.

Bạn đưa dữ liệu mẫu và code mà bạn nói báo lỗi lên xem thử như thế nào nhé.
 
Đầu tiên bạn chỉnh kiểu dữ liệu của trường BMaHang của bảng tblBan về kiểu number cho giống với HMaHang của bảng tblHang, và chỉnh KMaKhoLuuTru của bảng tblKho về làm khóa chính.

Code trong Excel để lấy dữ liệu theo yêu cầu của bạn là:

Mã:
Option Explicit
Sub LayDL()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim lsSQL As String
With cnn
    .Provider = "Microsoft Jet 4.0 OLE DB Provider"
    .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\data.mdb"
    .CursorLocation = adUseClient
    .Open

End With

    lsSQL = "SELECT tblBan.BNgay, tblBan.BMaHang, tblHang.HTenhang, tblBan.BMaKhoLuuTru, tblKho.KTenKhoLuuTru, tblBan.BSoLuongBan " & _
                    "FROM tblKho INNER JOIN (tblHang INNER JOIN tblBan ON tblHang.HMaHang = tblBan.BMaHang) ON tblKho.KMaKhoLuuTru = tblBan.BMaKhoLuuTru;"

    rst.Open lsSQL, cnn, 1, 3
    [b5:g6000].ClearContents
    [b5].CopyFromRecordset rst
    
rst.Close: Set rst = Nothing
cnn.Close: Set cnn = Nothing

End Sub

Bạn xem file đính kèm nhé

Lưu ý: Giải nén rồi mới chạy file Excel nhé.

Mình tải file này của bạn về giải nén rồi chạy excel như bạn nói nhưng không lấy được dữ liệu từ access. Bạn hướng dẫn giúp mình cách lấy dữ liệu và có thể chỉ lọc lấy dữ liệu từ ngày 21/9 đến ngày 23/9/2012 sang excel thôi không. mình có thể chọn ngày khác nữa chứ không cố định ngày đó
 
Mình tải file này của bạn về giải nén rồi chạy excel như bạn nói nhưng không lấy được dữ liệu từ access. Bạn hướng dẫn giúp mình cách lấy dữ liệu và có thể chỉ lọc lấy dữ liệu từ ngày 21/9 đến ngày 23/9/2012 sang excel thôi không. mình có thể chọn ngày khác nữa chứ không cố định ngày đó
Thì bạn thêm điều kiện vào là được, ví dụ Cell D2 là ngày bắt đầu, E2 là ngày kết thúc, code sẽ như sau:

Mã:
Option Explicit
Sub LayDL()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim lsSQL As String
With cnn
    .Provider = "Microsoft Jet 4.0 OLE DB Provider"
    .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\data.mdb"
    .CursorLocation = adUseClient
    .Open

End With
    lsSQL = "SELECT tblBan.BNgay, tblBan.BMaHang, tblHang.HTenhang, tblBan.BMaKhoLuuTru, tblKho.KTenKhoLuuTru, tblBan.BSoLuongBan " & _
                    "FROM tblKho INNER JOIN (tblHang INNER JOIN tblBan ON tblHang.HMaHang = tblBan.BMaHang) " & _
                    "ON tblKho.KMaKhoLuuTru = tblBan.BMaKhoLuuTru " & _
                    "where  tblBan.BNgay  between #" & Format(DateSerial(Year([d2]), Month([d2]), Day([d2])), "mm/dd/yyyy") & _
                     "# AND #" & Format(DateSerial(Year([e2]), Month([e2]), Day([e2])), "mm/dd/yyyy") & "# "
    rst.Open lsSQL, cnn, 1, 3
    [b5:g6000].ClearContents
    [b5].CopyFromRecordset rst
    
rst.Close: Set rst = Nothing
cnn.Close: Set cnn = Nothing

End Sub

Giải nén và chạy file Excel nhé.
 

File đính kèm

  • LayDL_Acc.rar
    26.9 KB · Đọc: 55
Khi mình kích Lấy DL nó báo thế nầy, không biết làm thế nào để cho nó hoạt động nữa. Nhờ bạn chỉ giúp.
 

File đính kèm

  • loi excel.rar
    41.2 KB · Đọc: 19
Khi mình kích Lấy DL nó báo thế nầy, không biết làm thế nào để cho nó hoạt động nữa. Nhờ bạn chỉ giúp.

Sao bạn không gửi cái file bạn muốn truy vấn lên? gửi hình thì giải quyết được gì chứ! Bạn gửi lên đi cho dễ làm cho bạn!

Nhưng không biết bạn có vào Tool > Reference và check vào mục Microsoft ActiveX Data Object 2.6 chưa nhỉ?
 

File đính kèm

  • Picture1.jpg
    Picture1.jpg
    70.3 KB · Đọc: 100
Lần chỉnh sửa cuối:
File LayDL_Acc.rar của Hai Lúa đó bạn. Mình tải về chọn Lấy DL là bị như vậy. Mình kiểm tra hình như đã check ô đó rồi.
 
excel 2007 :http://www.giaiphapexcel.com/forum/s...-%C4%91%C3%A2u

excel 2003: Mở file excel lên -> Tools -> Macro -> Security -> Chọn mức low, đóng hết các file Excel, mở lại file lần nữa.

Hai Lúa bắt bài đúng rồi đấy, nãy nhìn không rõ nội dung trong thông báo, giờ nhìn kỹ lại thấy nó thuộc lỗi Macro Setting.

File LayDL_Acc.rar của Hai Lúa đó bạn. Mình tải về chọn Lấy DL là bị như vậy. Mình kiểm tra hình như đã check ô đó rồi.


Bạn xem bài trước của Hai Lúa nhé!
 
Sao bạn không gửi cái file bạn muốn truy vấn lên? gửi hình thì giải quyết được gì chứ! Bạn gửi lên đi cho dễ làm cho bạn!

Nhưng không biết bạn có vào Tool > Reference và check vào mục Microsoft ActiveX Data Object 2.6 chưa nhỉ?

Việc trực tiếp Reference như vậy sẽ dẫn đến: nếu phiên bản ở máy khách không có cũng sẽ bị báo lỗi. Vì đôi khi ở máy khách có nhiều phiên bản khác nhau, hoặc không có phiên bản như trong Reference.
Dĩ nhiên nó sẽ dễ dàng cho người lập trình.

Theo tôi nên áp dụng late binding như có lần tôi đã đề cập. Như vậy mình sẽ không cần chú ý đến việc check vào Reference.

Lê Văn Duyệt
 
Bạn Hai Lúa ơi, cho mình hỏi nốt một vấn đề nữa. Mình muốn nhập dữ liệu ở file excel Vi du như ở trên rồi có thể làm một nút ấn vào đó, dữ liệu chuyển từ file excel Vi du sang lưu ở file access tên data. Sau đó, toàn bộ dữ liệu đã chuyển trên file excel bị xóa hết, chuẩn bị cho việc nhập dữ liệu lần khác. Mình biết được chút ít excel mà access thì mình không nhớ gì. Mình cần một file excel để nhập, chuyển dữ liệu sang access lưu sau đó chuyển ra file excel khác để tính toán. Mà nghiên cứu access thì mình k có thời gian. Bạn giúp mình với nha. Thanks.
 
Bạn Hai Lúa ơi, cho mình hỏi nốt một vấn đề nữa. Mình muốn nhập dữ liệu ở file excel Vi du như ở trên rồi có thể làm một nút ấn vào đó, dữ liệu chuyển từ file excel Vi du sang lưu ở file access tên data. Sau đó, toàn bộ dữ liệu đã chuyển trên file excel bị xóa hết, chuẩn bị cho việc nhập dữ liệu lần khác. Mình biết được chút ít excel mà access thì mình không nhớ gì. Mình cần một file excel để nhập, chuyển dữ liệu sang access lưu sau đó chuyển ra file excel khác để tính toán. Mà nghiên cứu access thì mình k có thời gian. Bạn giúp mình với nha. Thanks.

Bạn dùng code sau:

Mã:
Sub ToAcc()
Dim cnn, rst As Object, lsSQL As String
Set cnn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
With cnn
    .Provider = "Microsoft Jet 4.0 OLE DB Provider"
    .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\data.mdb"
    .Open
End With
    lsSQL = " INSERT INTO tblBan SELECT * FROM  [EXCEL 8.0;Database=" & ThisWorkbook.FullName & ";HDR=Yes].[ToAcc$];"
    rst.Open lsSQL, cnn, 1, 3
    Sheets("ToAcc").[A2:D60000].ClearContents
Set rst = Nothing: cnn.Close: Set cnn = Nothing

End Sub

Giải nén và chạy file Excel nhé.
 

File đính kèm

  • DuaDL_Acc.rar
    27.8 KB · Đọc: 35
Mình có bảng access ví dụ bên. Như bạn Hai lúa chỉ mình đã tạo được file excel nhập liệu, nhưng mình muốn thêm một cửa sổ báo lỗi, ví dụ chỉ được nhập 3 mặc hàng vào mỗi kho, nếu nhập hàng thứ 4 vào kho 1 thì sẽ hiện một cửa sổ báo “Kho 1 đã đầy” và không cho phép nhập hàng đó vào dữ liệu.---Nếu hàng đã bán trong cột ngayban quá 2 ngày, hoặc mình có thể thay đổi thời gian vượt quá--- thì không tính, xem như kho đã trống; Tạo một file excel nhập liệu khác điền vào cột ngày bán, cho dữ liệu nhập kho đã có sẵn trong dữ liệu, ví dụ kẹo bán vào ngày 16/11/2012, một macro khác để nhập bổ sung giá bán; Mình muốn xuất dữ liệu ra một file excel khác nhưng ngày tham chiếu từ ngày-> đến ngày sẽ tham chiếu cả ngày nhập lẫn ngày bán. Ví dụ mình nhập từ ngày 01/11/2012 đến ngày 10/11/2012 thì sẽ xuất được tất cả dữ liệu ngày nhập kho trong phạm vi ngày đó lẫn dữ liệu ngày bán cũng trong phạm vi đó và không lệ thuộc vào nhau, --ngày nhapkho là ngày 29/10/2012 nhưng ngày bán là ngày 05/11/2012, ngày nhapkho là ngày 05/11/2012 nhưng ngày bán là ngày 30/11/2012 cũng vẫn xuất ra trong file excle xuất---; à, bạn chỉ luôn giúp câu lệnh để thay vùng dữ liệu từ ngày, đến ngày bằng từ số đến số giúp mình nha. Mong bạn Hai lua pro giúp đỡ, cảm ơn bạn.
 

File đính kèm

  • Vidu.rar
    6.8 KB · Đọc: 17
Không còn ai quan tâm đề tài này nữa hay không có cách vậy mọi người. Giúp mình với, mình vừa học hỏi vừa mò mẫm, mình chưa được học lập trình nên không hiểu nhiều, chỉ bắt chước theo mà được việc thôi.
 
Mình có bảng access ví dụ bên. Như bạn Hai lúa chỉ mình đã tạo được file excel nhập liệu, nhưng mình muốn thêm một cửa sổ báo lỗi, ví dụ chỉ được nhập 3 mặc hàng vào mỗi kho, nếu nhập hàng thứ 4 vào kho 1 thì sẽ hiện một cửa sổ báo “Kho 1 đã đầy” và không cho phép nhập hàng đó vào dữ liệu.---Nếu hàng đã bán trong cột ngayban quá 2 ngày, hoặc mình có thể thay đổi thời gian vượt quá--- thì không tính, xem như kho đã trống; Tạo một file excel nhập liệu khác điền vào cột ngày bán, cho dữ liệu nhập kho đã có sẵn trong dữ liệu, ví dụ kẹo bán vào ngày 16/11/2012, một macro khác để nhập bổ sung giá bán; Mình muốn xuất dữ liệu ra một file excel khác nhưng ngày tham chiếu từ ngày-> đến ngày sẽ tham chiếu cả ngày nhập lẫn ngày bán. Ví dụ mình nhập từ ngày 01/11/2012 đến ngày 10/11/2012 thì sẽ xuất được tất cả dữ liệu ngày nhập kho trong phạm vi ngày đó lẫn dữ liệu ngày bán cũng trong phạm vi đó và không lệ thuộc vào nhau, --ngày nhapkho là ngày 29/10/2012 nhưng ngày bán là ngày 05/11/2012, ngày nhapkho là ngày 05/11/2012 nhưng ngày bán là ngày 30/11/2012 cũng vẫn xuất ra trong file excle xuất---; à, bạn chỉ luôn giúp câu lệnh để thay vùng dữ liệu từ ngày, đến ngày bằng từ số đến số giúp mình nha. Mong bạn Hai lua pro giúp đỡ, cảm ơn bạn.

Bảng dữ liệu kỳ vậy bạn, thường thì người ta tạo những bảng danh mục và những bảng phát sinh riêng biệt, sau đó tạo mối quan hệ các bảng với nhau mục đích làm cho csdl nhẹ nhàng, dể truy vấn. Nhìn vào bảng của bạn, đọc hướng dẫn xong rồi chẳng biết làm như thế nào để giúp được bạn.
 
Lần chỉnh sửa cuối:
Có lẽ những đề tài về ADO không ai quan tâm nhỉ.

Mình rất muốn quan tâm nhưng tại chưa biết gì về Access nên không hiểu, chưa có thời gian để nghiên cứu.

Mình xin hỏi sơ một số vấn đề rất "lúa" như sau:
Ví dụ mình đang sử dụng cơ sở dữ liệu trên một file Excel thì:

1. Làm sao để chuyển dữ liệu đó thành CSDL.mdb
2. Khi sử dụng dữ liệu nguồn trên Access, việc trích lọc, truy xuất để đưa vào tính toán trên Excel có dễ dàng như làm việc với data trên Excel không?
3. Ưu điểm khi chuyển khi chuyển dữ liệu sang Acces để làm việc.
4. Có sử dụng Macro trên file mdb không?
5. Theo mình biết thì còn có thể lưu data vào file DBF, vậy có thể dùng ADO không?

Mình tin rằng có nhiều người muốn nhưng cũng bỡ ngỡ giống mình. Tự học mà ... hi hi
Cảm ơn Hai Lúa Miền Tây!
 
Mình rất muốn quan tâm nhưng tại chưa biết gì về Access nên không hiểu, chưa có thời gian để nghiên cứu.

Mình xin hỏi sơ một số vấn đề rất "lúa" như sau:
Ví dụ mình đang sử dụng cơ sở dữ liệu trên một file Excel thì:

1. Làm sao để chuyển dữ liệu đó thành CSDL.mdb
2. Khi sử dụng dữ liệu nguồn trên Access, việc trích lọc, truy xuất để đưa vào tính toán trên Excel có dễ dàng như làm việc với data trên Excel không?
3. Ưu điểm khi chuyển khi chuyển dữ liệu sang Acces để làm việc.
4. Có sử dụng Macro trên file mdb không?
5. Theo mình biết thì còn có thể lưu data vào file DBF, vậy có thể dùng ADO không?

Mình tin rằng có nhiều người muốn nhưng cũng bỡ ngỡ giống mình. Tự học mà ... hi hi
Cảm ơn Hai Lúa Miền Tây!

1. Import = tay từ 1 file excel vào access hoặc có thể dùng code từ excel hoặc code ở access.
2. Dĩ nhiên việc trích xuất và truy vấn vào excel theo ý muốn của mình.
3. Có thể lưu dữ liệu nhiều, truy vấn dữ liệu cần sẽ nhẹ nhàng hơn.
4. Nếu đơn thuần Access chỉ là chứa dữ liệu thì không cần dùng VBA trên Access.
 
Xin cho hỏi, dùng ADO để xóa dữ liệu (clearcontents) của:

1) Một hoặc vài cột trong Excel

2) Một bảng hoặc nhiều bảng trong 1 sheet của Excel

3) Một sheet hoặc nhiều sheet trong Excel

Thì phải làm như thế nào?

Cám ơn rất nhiều!
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom