Dùng ADO để xuất kết quả từ 1 bảng dữ liệu nguồn và 1 bảng dữ liệu điều kiện (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

johnnylinhanh

Thành viên thường trực
Tham gia
18/12/11
Bài viết
232
Được thích
179
Nghề nghiệp
Kiểm toán
Chào mọi người,
Hiện em đang vướng mắc chỗ thông thường dùng ADO để lấy dữ liệu thì tạo 1 connection và xuất kết quả thông qua "Copyfromrecordset connection.Execute(Lệnh SQL)". Tuy nhiên, nếu trong lệnh truy vấn SQL mình có điều kiện được đối chiếu từ 1 nguồn khác/ 1 connection khác thì mình sẽ phải làm như thế nào ạ?
Nhờ mọi người hướng dẫn em giải pháp với
Em gửi 2 file mẫu DataA.xlsx (file có dữ liệu) và file DATA.xlsb (file có chứa điều kiện và dùng xuất kết quả)
1648797659537.png
 

File đính kèm

Chào mọi người,
Hiện em đang vướng mắc chỗ thông thường dùng ADO để lấy dữ liệu thì tạo 1 connection và xuất kết quả thông qua "Copyfromrecordset connection.Execute(Lệnh SQL)". Tuy nhiên, nếu trong lệnh truy vấn SQL mình có điều kiện được đối chiếu từ 1 nguồn khác/ 1 connection khác thì mình sẽ phải làm như thế nào ạ?
Nhờ mọi người hướng dẫn em giải pháp với
Em gửi 2 file mẫu DataA.xlsx (file có dữ liệu) và file DATA.xlsb (file có chứa điều kiện và dùng xuất kết quả)
View attachment 273887
Bạn chạy code sau thử nhé:

Mã:
Sub LayDL_HLMT()
    Dim cn As String
    cn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\DataA.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=No"""
    With CreateObject("ADODB.Recordset")
        .Open ("Select * From [Sheet1$] Where F1 In (Select F1 From [EXCEL 12.0;HDR=No;Database=" & ThisWorkbook.FullName & "].[Sheet1$B2:B] Where F1 Is Not Null)"), cn
        Sheet1.Range("J2").CopyFromRecordset .DataSource
    End With
End Sub
Hoặc có thể dùng SQL Join nhé.
 
Upvote 0
Bạn chạy code sau thử nhé:

Mã:
Sub LayDL_HLMT()
    Dim cn As String
    cn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\DataA.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=No"""
    With CreateObject("ADODB.Recordset")
        .Open ("Select * From [Sheet1$] Where F1 In (Select F1 From [EXCEL 12.0;HDR=No;Database=" & ThisWorkbook.FullName & "].[Sheet1$B2:B] Where F1 Is Not Null)"), cn
        Sheet1.Range("J2").CopyFromRecordset .DataSource
    End With
End Sub
à hay quá, vậy mà nghĩ hoài không thông
Cám ơn anh HLMT nhiều nhé
 
Upvote 0
à hay quá, vậy mà nghĩ hoài không thông
Cám ơn anh HLMT nhiều nhé
Thử thêm cách này nhé:

Mã:
Sub LayDL_HLMT1()
    Dim cn As String
    cn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\DataA.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=No"""
    With CreateObject("ADODB.Recordset")
        .Open ("Select a.F1,a.F2 From [Sheet1$] a Inner Join [EXCEL 12.0;HDR=No;Database=" & ThisWorkbook.FullName & "].[Sheet1$B2:B] b On a.F1=b.F1 "), cn
        Sheet1.Range("J2").CopyFromRecordset .DataSource
    End With
End Sub
 
Upvote 0
Thử thêm cách này nhé:

Mã:
Sub LayDL_HLMT1()
    Dim cn As String
    cn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\DataA.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=No"""
    With CreateObject("ADODB.Recordset")
        .Open ("Select a.F1,a.F2 From [Sheet1$] a Inner Join [EXCEL 12.0;HDR=No;Database=" & ThisWorkbook.FullName & "].[Sheet1$B2:B] b On a.F1=b.F1 "), cn
        Sheet1.Range("J2").CopyFromRecordset .DataSource
    End With
End Sub
Vâng anh, cảm ơn anh rất nhiều!
Với lại em thử connect ADO với 1 File có Password thì phải mở file đó lên và mở chế độ ReadOnly:=False thì mới Connect được không biết lý do tại sao để ReadOnly:=True thì lại không cho mong anh chỉ điểm thêm
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom