Xin code lấy dữ liệu từ access về File excel.

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,049
Được thích
1,794
Điểm
360
Như tiêu đề đã nêu mọi người cho em xin code ADO lấy dữ liệu từ access về excel.Như trong file em có trình bày em cảm ơn.
 

File đính kèm

Lần chỉnh sửa cuối:

khongtu19bk

https://tuhocvba.net
Tham gia ngày
5 Tháng mười hai 2009
Bài viết
155
Được thích
59
Điểm
380
Tuổi
31
Như tiêu đề đã nêu mọi người cho em xin code ADO lấy dữ liệu từ access về excel.Như trong file em có trình bày em cảm ơn.
Chắc là bạn muốn như thế này:


Nếu mà là như thế, thì code như thế này:
Mã:
'Tham khao them o day:
'https://tuhocvba.net/threads/truy-van-co-so-du-lieu-access-tu-vba-excel.94/
Sub yeucau1()
    Dim cnn As Object: Dim rst As Object
    Dim lsSQL As String
    Dim linkdb  As String
    Dim arr As Variant
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    linkdb = ThisWorkbook.Path & Application.PathSeparator & "tuhocvba.mdb"
    
    With cnn
        .Provider = "Microsoft.ACE.OLEDB.12.0" 'Access truoc day la: "Microsoft Jet 4.0 OLE DB Provider"
        .ConnectionString = linkdb
'        .Properties("Jet OLEDB:Database Password") = ""
        .Open
    End With
    
    lsSQL = "SELECT SOCT " & _
            "FROM DATA Order by SOCT DESC"
            
    rst.Open lsSQL, cnn
    If rst.EOF Then
        MsgBox "Khong tim thay du lieu nao"
    Else
        arr = rst.GetRows
    End If
    
    Set rst = Nothing
    cnn.Close
    Set cnn = Nothing
    'Ghi ket qua:
    ThisWorkbook.Sheets(1).Cells(1, 1) = arr(0, 0)
    
End Sub
'=============YEU CAU 2=====================
Sub yeucau2()
    Dim s As String
    s = ThisWorkbook.Sheets(1).Cells(2, 1).Value
    If kiemtra_sochungtu(s) = True Then
        MsgBox "ton tai"
    Else
        MsgBox "khong ton tai"
    End If
    
End Sub
Function kiemtra_sochungtu(ByVal temp As String) As Boolean
    Dim cnn As Object: Dim rst As Object
    Dim lsSQL As String
    Dim linkdb  As String
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    linkdb = ThisWorkbook.Path & Application.PathSeparator & "tuhocvba.mdb"
    With cnn
        .Provider = "Microsoft.ACE.OLEDB.12.0" 'Access truoc day la: "Microsoft Jet 4.0 OLE DB Provider"
        .ConnectionString = linkdb
'        .Properties("Jet OLEDB:Database Password") = ""
        .Open
    End With
    
    lsSQL = "SELECT * " & _
            "FROM DATA WHERE SOCT = '" & temp & "'"
            
    rst.Open lsSQL, cnn
    If rst.EOF Then
        kiemtra_sochungtu = False
    Else
        kiemtra_sochungtu = True
    End If
    Set rst = Nothing
    cnn.Close
    Set cnn = Nothing
End Function
File bạn download ở đây:
 

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,049
Được thích
1,794
Điểm
360
Chắc là bạn muốn như thế này:


Nếu mà là như thế, thì code như thế này:
Mã:
'Tham khao them o day:
'https://tuhocvba.net/threads/truy-van-co-so-du-lieu-access-tu-vba-excel.94/
Sub yeucau1()
    Dim cnn As Object: Dim rst As Object
    Dim lsSQL As String
    Dim linkdb  As String
    Dim arr As Variant
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    linkdb = ThisWorkbook.Path & Application.PathSeparator & "tuhocvba.mdb"
    
    With cnn
        .Provider = "Microsoft.ACE.OLEDB.12.0" 'Access truoc day la: "Microsoft Jet 4.0 OLE DB Provider"
        .ConnectionString = linkdb
'        .Properties("Jet OLEDB:Database Password") = ""
        .Open
    End With
    
    lsSQL = "SELECT SOCT " & _
            "FROM DATA Order by SOCT DESC"
            
    rst.Open lsSQL, cnn
    If rst.EOF Then
        MsgBox "Khong tim thay du lieu nao"
    Else
        arr = rst.GetRows
    End If
    
    Set rst = Nothing
    cnn.Close
    Set cnn = Nothing
    'Ghi ket qua:
    ThisWorkbook.Sheets(1).Cells(1, 1) = arr(0, 0)
    
End Sub
'=============YEU CAU 2=====================
Sub yeucau2()
    Dim s As String
    s = ThisWorkbook.Sheets(1).Cells(2, 1).Value
    If kiemtra_sochungtu(s) = True Then
        MsgBox "ton tai"
    Else
        MsgBox "khong ton tai"
    End If
    
End Sub
Function kiemtra_sochungtu(ByVal temp As String) As Boolean
    Dim cnn As Object: Dim rst As Object
    Dim lsSQL As String
    Dim linkdb  As String
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    linkdb = ThisWorkbook.Path & Application.PathSeparator & "tuhocvba.mdb"
    With cnn
        .Provider = "Microsoft.ACE.OLEDB.12.0" 'Access truoc day la: "Microsoft Jet 4.0 OLE DB Provider"
        .ConnectionString = linkdb
'        .Properties("Jet OLEDB:Database Password") = ""
        .Open
    End With
    
    lsSQL = "SELECT * " & _
            "FROM DATA WHERE SOCT = '" & temp & "'"
            
    rst.Open lsSQL, cnn
    If rst.EOF Then
        kiemtra_sochungtu = False
    Else
        kiemtra_sochungtu = True
    End If
    Set rst = Nothing
    cnn.Close
    Set cnn = Nothing
End Function
File bạn download ở đây:
Cảm ơn bạn nhé.Giờ mình không ngồi máy mai mới test được.Có gì bạn trợ giúp mình nhé.
 

ongke0711

Thành viên thường trực
Tham gia ngày
7 Tháng chín 2006
Bài viết
321
Được thích
332
Điểm
710
Cũng đã làm demo cho bạn nhưng đã có ban khongtu19bk post rồi.
Nhưng thôi cũng post lên để tham khảo. Sau này nếu dùng nhiều kết nối ADO và xử lý Recordset thì nên tách nó thành hàm để gọi cho gọn.
Tôi có sửa trong file database của bạn.
- Tuyệt đối không được đặt tên field (cột) bằng tiếng Việt có dấu và khoảng trắng, nó sẽ gây lỗi hệ thống và nặng thì có thể làm hư file database của bạn.
- Tên các đối tượng như Table, Form,... nên có tiếp đầu ngữ để phân biệt. Ví dụ: tblData, frmData,.. Để dễ phân biệt nó là đối tượng gì khi code trong VBA đâu là table đâu là Form v.v..

Bên cạnh đó tôi cũng có chút ý kiến là các bạn có cuồng GPE quá cũng đâu cần đặt tên file, tên hàm cũng dùng chữ "GPE". Tôi có download mấy file trên diễn đàn về và bây giờ có một đống GPE(1).xlsx, gpe(2).xlsm,.....(7).... Tôi cũng có thấy hàm GPE() không biết nó dùng xử lý cái gì luôn. Giờ muốn tìm lại cái file mình mới xử lý một bài toán gì đó nhưng do không có tên gợi nhớ nên buôc phải mở lại từng cái GPE.xlsx
Chút ý kiến cá nhân vậy thôi. :)
 

File đính kèm

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,049
Được thích
1,794
Điểm
360
Cũng đã làm demo cho bạn nhưng đã có ban khongtu19bk post rồi.
Nhưng thôi cũng post lên để tham khảo. Sau này nếu dùng nhiều kết nối ADO và xử lý Recordset thì nên tách nó thành hàm để gọi cho gọn.
Tôi có sửa trong file database của bạn.
- Tuyệt đối không được đặt tên field (cột) bằng tiếng Việt có dấu và khoảng trắng, nó sẽ gây lỗi hệ thống và nặng thì có thể làm hư file database của bạn.
- Tên các đối tượng như Table, Form,... nên có tiếp đầu ngữ để phân biệt. Ví dụ: tblData, frmData,.. Để dễ phân biệt nó là đối tượng gì khi code trong VBA đâu là table đâu là Form v.v..

Bên cạnh đó tôi cũng có chút ý kiến là các bạn có cuồng GPE quá cũng đâu cần đặt tên file, tên hàm cũng dùng chữ "GPE". Tôi có download mấy file trên diễn đàn về và bây giờ có một đống GPE(1).xlsx, gpe(2).xlsm,.....(7).... Tôi cũng có thấy hàm GPE() không biết nó dùng xử lý cái gì luôn. Giờ muốn tìm lại cái file mình mới xử lý một bài toán gì đó nhưng do không có tên gợi nhớ nên buôc phải mở lại từng cái GPE.xlsx
Chút ý kiến cá nhân vậy thôi. :)
Cảm ơn anh nhé.Mai em xem lại có gì em hỏi anh ạ.
 

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,049
Được thích
1,794
Điểm
360
Cũng đã làm demo cho bạn nhưng đã có ban khongtu19bk post rồi.
Nhưng thôi cũng post lên để tham khảo. Sau này nếu dùng nhiều kết nối ADO và xử lý Recordset thì nên tách nó thành hàm để gọi cho gọn.
Tôi có sửa trong file database của bạn.
- Tuyệt đối không được đặt tên field (cột) bằng tiếng Việt có dấu và khoảng trắng, nó sẽ gây lỗi hệ thống và nặng thì có thể làm hư file database của bạn.
- Tên các đối tượng như Table, Form,... nên có tiếp đầu ngữ để phân biệt. Ví dụ: tblData, frmData,.. Để dễ phân biệt nó là đối tượng gì khi code trong VBA đâu là table đâu là Form v.v..

Bên cạnh đó tôi cũng có chút ý kiến là các bạn có cuồng GPE quá cũng đâu cần đặt tên file, tên hàm cũng dùng chữ "GPE". Tôi có download mấy file trên diễn đàn về và bây giờ có một đống GPE(1).xlsx, gpe(2).xlsm,.....(7).... Tôi cũng có thấy hàm GPE() không biết nó dùng xử lý cái gì luôn. Giờ muốn tìm lại cái file mình mới xử lý một bài toán gì đó nhưng do không có tên gợi nhớ nên buôc phải mở lại từng cái GPE.xlsx
Chút ý kiến cá nhân vậy thôi. :)
Anh ơi em có 1 vấn đề nữa là khi nó có rồi thì mình làm 1 cái code để thay đổi toàn bộ giá trị trong hàng đó.Với điều kiện theo số chứng từ đó anh xem hộ em với.
 

ongke0711

Thành viên thường trực
Tham gia ngày
7 Tháng chín 2006
Bài viết
321
Được thích
332
Điểm
710
Hehe...bạn lại đưa yêu cầu nhỏ giọt rồi. Bạn nên đưa bài toán tổng thể thì khi code sẽ lường trước và xử lý các yc đặt ra dễ hơn, đồng bộ hơn.
 

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,049
Được thích
1,794
Điểm
360
Hehe...bạn lại đưa yêu cầu nhỏ giọt rồi. Bạn nên đưa bài toán tổng thể thì khi code sẽ lường trước và xử lý các yc đặt ra dễ hơn, đồng bộ hơn.
Thực ra là bây giờ em đang muốn viết 1 chương trình.Trước nay em dùng VBA.Làm bằng excel giờ nó dữ liệu lớn.Em chuyển hướng sang lưu dữ liệu trên fiel Access.Em biết cách đưa dữ liệu vào accsee rồi.Giờ em muốn hỏi cách xóa sửa những thứ trong Data mà theo điều kiện mình đưa ra thôi anh à.Hay là nếu phải sửa thì em nghĩ chắc là phải xóa hết đi rồi up cái mới lên nhỉ.Anh cho em xin đoạn code nhé.Hay anh có file nào đang làm theo kiểu như vậy không cho em xin về em nghiên cứu code.Em cảm ơn.
 

ThangCuAnh

Mới học Ét xeo
Tham gia ngày
1 Tháng mười hai 2017
Bài viết
699
Được thích
566
Điểm
360
Nơi ở
Phờ lây cu
Học Access SQL trước đã bạn. Cứ nôn nóng, mì ăn liền, bỏ qua căn bản.
Mấy câu hỏi của bạn là chuyện nhỏ với SQL.
 

ongke0711

Thành viên thường trực
Tham gia ngày
7 Tháng chín 2006
Bài viết
321
Được thích
332
Điểm
710
Thực ra là bây giờ em đang muốn viết 1 chương trình.Trước nay em dùng VBA.Làm bằng excel giờ nó dữ liệu lớn.Em chuyển hướng sang lưu dữ liệu trên fiel Access.Em biết cách đưa dữ liệu vào accsee rồi.Giờ em muốn hỏi cách xóa sửa những thứ trong Data mà theo điều kiện mình đưa ra thôi anh à.Hay là nếu phải sửa thì em nghĩ chắc là phải xóa hết đi rồi up cái mới lên nhỉ.Anh cho em xin đoạn code nhé.Hay anh có file nào đang làm theo kiểu như vậy không cho em xin về em nghiên cứu code.Em cảm ơn.
Học Access SQL trước đã bạn. Cứ nôn nóng, mì ăn liền, bỏ qua căn bản.
Mấy câu hỏi của bạn là chuyện nhỏ với SQL.
Bổ sung thêm chút ý kiến.
Tôi thấy bạn Snow25 cũng trùm về code VBA trong Excel rồi nên việc học thêm cái mới cũng nhanh thôi.
Nói về hướng xây dựng ứng dụng của bạn. Bạn sẽ dùng Access làm CSDL (tạm gọi Back End) và Excel sẽ là ứng dụng Font End giao tiếp với người dùng đúng không?
Nếu vậy thì bạn phải ngâm cứu cơ bản nhất cách thiết kế Table và Query của Access. Vì đây là CSDL quan hệ nên nó sẽ khác với việc lưu trữ dữ liệu của Excel. Phân tích, thiết kế được Table (CSDL) xong coi như đi được nữa đường rồi vì table chuẩn thì việc truy vấn (query), thiết kế Form, Report đi theo nó cũng dễ dàng hơn.
Tôi khuyên bạn nên bỏ thời gian nhiều cho việc thiết kế CSDL. Đơn giản là đi ngược từ những báo cáo, thông tin gì mà bạn mong muốn sẽ phát sinh và có thể phát sinh rồi sẽ ra ý tưởng lưu dữ liệu gì, lưu như thế nào, quan hệ ra sao v.v..
Thiết kế Table trong Access bạn phải chú ý đến các thuộc tính như: Field size, datatype, Primary Key, Index vì nó sẽ ảnh hưởng nhiều đến dung lượng file cũng như tốc độ truy xuất dữ liệu.
- Tiếp đó sẽ ngâm cứu câu lệnh truy vấn (Query) dữ liệu.
- Ngâm cứu thư viện ADO để kết nối chạy các truy vấn đó, lấy dữ liệu (Recordset) về Excel, gán vào mảng. Sau đó là thuộc về chuyên môn Excel của bạn rồi.
 
Lần chỉnh sửa cuối:

VetMini

Gian hùng bàn phiếm (thành viên trôi nước)
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
6,791
Được thích
7,936
Điểm
560
Học Access SQL ở giai đoạn này vẫn là học chạy.
Trước khi đí qua SQL phải có căn bản về CSDL LH. Nếu có thể, căn bản lý thuyết Đại Số Tập Hợp (không cần lắm, nhưng sẽ giúp cho cái nhìn tổng thể hơn)
Có căn bản về CSDL LH rồi thì nên thuần thục luật chuẩn hoá.

Chú thêm: viết xong cái này rồi mới thấy bài #13, cho nên bổ sung chút. Bài ấy nói đúng, những gì tôi nói ở trên (căn bản CSDL LH và chuẩn hoá) đều liên quan đến thiết kế.
 

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,049
Được thích
1,794
Điểm
360
Bổ sung thêm chút ý kiến.
Tôi thấy bạn Snow25 cũng trùm về code VBA trong Excel rồi nên việc học thêm cái mới cũng nhanh thôi.
Nói về hướng xây dựng ứng dụng của bạn. Bạn sẽ dùng Access làm CSDL (tạm gọi Back End) và Excel sẽ là ứng dụng Font End giao tiếp với người dùng đúng không?
Nếu vậy thì bạn phải ngâm cứu cơ bản nhất cách thiết kế Table và Query của Access. Vì đây là CSDL quan hệ nên nó sẽ khác với việc lưu trữ dữ liệu của Excel. Phân tích, thiết kế được Table (CSDL) xong coi như đi được nữa đường rồi vì table chuẩn thì việc truy vấn (query), thiết kế Form, Report đi theo nó cũng dễ dàng hơn.
Tôi khuyên bạn nên bỏ thời gian nhiều cho việc thiết kế CSDL. Đơn giản là đi ngược từ những báo cáo, thông tin gì mà bạn mong muốn sẽ phát sinh và có thể phát sinh rồi sẽ ra ý tưởng lưu dữ liệu như thế nào, quan hệ ra sao v.v..
Thiết kế Table trong Access bạn phải chú ý đến các thuộc tính như: Field size, datatype, Primary Key, Index vì nó sẽ ảnh hưởng nhiều đến dung lượng file cũng như tốc độ truy xuất dữ liệu.
- Tiếp đó sẽ ngâm cứu câu lệnh truy vấn (Query) dữ liệu.
- Ngâm cứ thư viện ADO để kết nối chạy các truy vấn đó, lấy dữ liệu (Recordset) về Excel, gán vào mảng. Sau đó là thuộc về chuyên môn Excel của bạn rồi.
Học Access SQL ở giai đoạn này vẫn là học chạy.
Trước khi đí qua SQL phải có căn bản về CSDL LH. Nếu có thể, căn bản lý thuyết Đại Số Tập Hợp (không cần lắm, nhưng sẽ giúp cho cái nhìn tổng thể hơn)
Có căn bản về CSDL LH rồi thì nên thuần thục luật chuẩn hoá.

Chú thêm: viết xong cái này rồi mới thấy bài #13, cho nên bổ sung chút. Bài ấy nói đúng, những gì tôi nói ở trên (căn bản CSDL LH và chuẩn hoá) đều liên quan đến thiết kế.
Cảm ơn 2 Anh nhé.Em cũng đang tìm hiểu về CSDL nữa.
 
Top Bottom