Kết nối ADO để lấy dữ liệu
Xin chào các anh chị trên diễn đàn ah!
-Em xem trên diễn đàn về bài@Tìm kiếm Tên nhân viên thông qua ID từ file excel khac. Do thầy @Hai Lua mien tay hướng dẫn và em có làm theo, nhưng vẫn bị lỗi ở đoạn này ah.Rst.Open ("Select [Ten],[Bo_Phan] From [Sheet1$] Where [ID] = " & TextBox1.Text), cnn, 1, 3-Xin các anh chị trên diễn đàn huớng dẫn ah.Em xin cảm ơn
bạn chỉnh lại code theo sau:
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim oConn As Object, oRst As Object
Dim sConn As String, sQuery As String
Dim arrName
Set oConn = CreateObject("ADODB.Connection")
Set oRst = CreateObject("ADODB.Recordset")
sConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.Path & "Ds nhan vien.xlsx" & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes"";"
oConn.Open sConn
sQuery = "SELECT [Ten],[Bo_Phan] FROM [Sheet1$] WHERE [ID]='" & TextBox1.Text & "'"
oRst.Open sQuery, oConn, 1, 3
If oRst.RecordCount > 0 Then
arrName = oRst.GetRows
'arrtuoi = Rst.GetRows
'MsgBox arrName(0, 0)
Else
MsgBox "Khong co du lieu!"
Exit Sub
End If
TextBox2.Text = arrName(0, 0)
TextBox3.Text = arrName(1, 0)
End Sub
www.giaiphapexcel.com/diendan/threads/k%E1%BA%BFt-n%E1%BB%91i-ado-%C4%91%E1%BB%83-l%E1%BA%A5y-d%E1%BB%AF-li%E1%BB%87u.151795/
Khóa học SprinGO phù hợp
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Sao không phải là After mà là Before? Do kiểu dữ liệu ID là dạng chuỗi nên bạn chuyển sang như sau nhé:
Nếu là 1 ứng dụng rõ ràng thì sẽ phải tạo kết nối khi mở form, ta dùng kết nối này để thực hiện các truy vấn. Tuy nhiên nó cũng có nhược điểm của nó.
Lập một kết nối có thời gian giới hạn nó đợi handshake. Quá thời gian ấy, tự động kết nối không đạt. Theo kinh nghiệm thì khoảng chục giây, khỏi nói chuyện trăm giây cho mệt.
Ở trên có nói, protocols để VBA sử dụng object ADO không hoàn toàn bug free. Lý do tránh mở và huỷ kết nối nhiều lần là vì có những lúc object (connection) huỷ rồi nhưng hệ thống chưa kịp thu hồi resources, hoặc bị VBA nghĩ là truy vấn vòng gì đó cho nên không huỷ object, Application (Excel) có thể bị crash.
Với hầu hết các phiên bản của SQL, ngày tháng viết theo dạng hằng (literal) thì dùng tiêu chuẩn Nhật chứ: format 'yyyymmdd'
Hầu hết các phiên bản SQL đều có thể ép kiểu chuỗi sang ngày khi cần. Và hầu hết đều hiểu dạng '20200910' có nghĩa là ngày 10 tháng 9 năm 2020.
Trong SQL Server, tốt nhất là tryền tham số ngày dạng chuỗi ký tự (literal): = 'yyyymmdd', đây là dạng chuẩn của nó để tính toán ngày tháng chính xác.
(Tôi nhầm bạn đề cập câu lênh SQL trong VBA sang SQL Server 🙂 )
Nó ra là hên nhé bạn, như trường hợp trên thì xét ngày và tháng 01/01 thì không cần xét, vì ngày và tháng giống nhau, còn 03/01 là ngày 03 hay là ngày 01 hoặc tháng 03 hay là tháng 01. Bạn có chắc là nó lọc ra dữ liệu theo ý với nhiều máy khác nhau? Do vậy ta phải đưa nó về định dạng chuẩn là yyyy-MM-dd cho chắc nhé.