• Câu lệnh SQL không chạy khi thay giá trị bằng ô được đặt tên sẵn
  • Câu lệnh SQL không chạy khi thay giá trị bằng ô được đặt tên sẵn

    Đình Phán > 25-03-23, 10:59 PM

    Chào các anh, chị.

    Mã:
    Public Sub Search_Debit()


    Dim MyCnn As Object
    Dim MyRs As Object
    Dim MySQL As String

    Application.ScreenUpdating = False
       
    Set MyCnn = CreateObject("ADODB.Connection")
    Set MyRs = CreateObject("ADODB.Recordset")
        'ConnectionString Excel *xlsb
        'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myBinaryExcel2007file.xlsb;Extended Properties="Excel 12.0;HDR=YES";
    MyCnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";"

    'MySQL = "SELECT [Ngay_Thang],[So_Tien],[Dien_Giai] FROM [Debit$A:E] WHERE ((([Tai_Khoan] like " & [Account] & ") AND ([Ma_Doi_Tuong] like ""B"") AND ([Ngay_Thang] BETWEEN #" & [Date_1] & "# AND #" & [Date_2] & "#)));"

    MySQL = "SELECT [Ngay_Thang],[So_Tien],[Dien_Giai] FROM [Debit$A:E] WHERE ((([Tai_Khoan] like " & [Account] & ") AND ([Ma_Doi_Tuong] like " & [MET] & ") AND ([Ngay_Thang] BETWEEN #" & [Date_1] & "# AND #" & [Date_2] & "#)));"

    MyRs.Open MySQL, MyCnn
    Sheets("Search").Range("A9:E1000").ClearContents
    Sheets("Search").Range("B9").CopyFromRecordset MyRs

    MyCnn.Close
    Set MyRs = Nothing
    Set MyCnn = Nothing

    Application.ScreenUpdating = True

    End Sub


    Em có thực hiện kết nối đến excel và gọi dữ liệu từ 1 sheet, các biến em đã đặt tên, tuy nhiên với Biến Đối tượng, khi thay bằng giá trị đặt tên thì báo lỗi, em ko tìm ra lỗi ở đâu.
    Với đợn MySQL ở trên thì chạy được, giờ em muốn giá trị ô đó động nên có đặt tên là MET, nhưng thay vào thành MySQL bên dưới thì lỗi.
    Mong các anh, chị trợ giúp

    em cảm ơn.
  • RE: Câu lệnh SQL không chạy khi thay giá trị bằng ô được đặt tên sẵn

    Đình Phán > 25-03-23, 11:17 PM

    (25-03-23, 10:59 PM)Đình Phán Đã viết: Chào các anh, chị.

    Mã:
    Public Sub Search_Debit()


    Dim MyCnn As Object
    Dim MyRs As Object
    Dim MySQL As String

    Application.ScreenUpdating = False
       
    Set MyCnn = CreateObject("ADODB.Connection")
    Set MyRs = CreateObject("ADODB.Recordset")
        'ConnectionString Excel *xlsb
        'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myBinaryExcel2007file.xlsb;Extended Properties="Excel 12.0;HDR=YES";
    MyCnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";"

    'MySQL = "SELECT [Ngay_Thang],[So_Tien],[Dien_Giai] FROM [Debit$A:E] WHERE ((([Tai_Khoan] like " & [Account] & ") AND ([Ma_Doi_Tuong] like ""B"") AND ([Ngay_Thang] BETWEEN #" & [Date_1] & "# AND #" & [Date_2] & "#)));"

    MySQL = "SELECT [Ngay_Thang],[So_Tien],[Dien_Giai] FROM [Debit$A:E] WHERE ((([Tai_Khoan] like " & [Account] & ") AND ([Ma_Doi_Tuong] like " & [MET] & ") AND ([Ngay_Thang] BETWEEN #" & [Date_1] & "# AND #" & [Date_2] & "#)));"

    MyRs.Open MySQL, MyCnn
    Sheets("Search").Range("A9:E1000").ClearContents
    Sheets("Search").Range("B9").CopyFromRecordset MyRs

    MyCnn.Close
    Set MyRs = Nothing
    Set MyCnn = Nothing

    Application.ScreenUpdating = True

    End Sub


    Em có thực hiện kết nối đến excel và gọi dữ liệu từ 1 sheet, các biến em đã đặt tên, tuy nhiên với Biến Đối tượng, khi thay bằng giá trị đặt tên thì báo lỗi, em ko tìm ra lỗi ở đâu.
    Với đợn MySQL ở trên thì chạy được, giờ em muốn giá trị ô đó động nên có đặt tên là MET, nhưng thay vào thành MySQL bên dưới thì lỗi.
    Mong các anh, chị trợ giúp

    em cảm ơn.

    Em xin bổ sung thêm là nếu giá trị tại ô MET đánh dạng số (ví dụ 123) và bên Sheet Debit cũng 123 thì code chạy bình thường.
    Còn đánh dạng text, string thì không được.
    Em không hiểu nổi chỗ này
  • RE: Câu lệnh SQL không chạy khi thay giá trị bằng ô được đặt tên sẵn

    ongke0711 > 26-03-23, 11:32 AM

    (25-03-23, 11:17 PM)Đình Phán Đã viết: ... AND ([Ma_Doi_Tuong] like " & [MET] & ") AND ...;"

    Đơn giản là đối với tham số dạng Text thì phải có dấu nháy đơn bao quanh nó, còn dạng Number thì không cần.
    Do đó dữ liệu một cột nó phải chuẩn hết, số hoặc Text, không được cả hai.
    Tôi cũng không hiểu bạn truyền tham số vào chuỗi sql với dấu ngoặc vuông [..] để làm gì? Chưa kể tham số không tham chiếu rõ như: Me.txt.MET....

    Mã PHP:
    ... AND ([Ma_Doi_Tuonglike '" & [MET] & "') AND ...;