Em là đang làm quen với cái này.Nên nhiều chỗ còn chưa được thông cho lắm.Mấy cái này thì phải hỏi @ongke0711
Chắc là bạn muốn như thế này: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.
'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
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é.Chắc là bạn muốn như thế này:
Nếu mà là như thế, thì code như thế này:
File bạn download ở đâ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
Tuhocvba_access
MediaFire is a simple to use free service that lets you put all your photos, documents, music, and video in a single place so you can access them anywhere and share them everywhere.www.mediafire.com
Cảm ơn anh nhé.Mai em xem lại có gì em hỏi anh ạ.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.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.
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.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.
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 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.
Cảm ơn 2 Anh nhé.Em cũng đang tìm hiểu về CSDL nữa.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ế.
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2