none
VBA - ¿Cómo hacer un consulta sql con INNER en tablas Excel? RRS feed

  • Pregunta

  • Hola a todos.
    Estoy tratando de hacer una consulta sql con INNER JOIN en dos tablas excel.
    Cuando yo hago con una sola table logo éxito. Pero cuando pongo con las dos me sale un error de sintaxis.
    Gracias de antemano por la ayuda.

    1 - Mis hojas


        La consulta sql haz un INNER con las hojas STOCK y VENTA
        Cuando hago solo con una tabla no sale error.

    2 - Mi consulta / Mis tablas

         El resultado de la consulta SQL se exhibe en la hoja Consulta

    sql = "SELECT " & _
    "p.producto , v.fecha_compra, v.cantidad " & _
    "FROM [" & "stock$" & "] as p " & _
    "INNER JOIN [" & "venta$" & "] as v " & "WITH(nolock) ON p.prod_id = v.prod_id " & _
    "WHERE v.Fecha_compra >= #" & Format(CDate(b.Range("I1")), "mm/dd/yyyy") & "# " & _
    "AND v.Fecha_compra <= #" & Format(CDate(b.Range("K1")), "mm/dd/yyyy") & "# " & _
    "ORDER BY v.Fecha_compra ASC"

    3 - El error

    4 - El Código completo

    Option Explicit
    
    Sub ConectarExcel()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim ctl As Object
    Dim cn As ADODB.Connection, rs As ADODB.Recordset, sql As String
    Dim a As Object
    Dim b As Object
    Dim c As Object
    
    'on Error Resume Next
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    Set a = Sheets("stock")
    Set b = Sheets("venta")
    Set c = Sheets("consulta")
    
    'Excel 2007
     cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=Yes"";"
    
    'MsgBox ("La conexión se realizó con exito"), vbInformation, "AVISO"
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    ' Pesquisar datos
    
    'sql = "SELECT * FROM [" & "venta$" & "] as v " & _
    '      "WHERE v.Fecha_compra >= #" & Format(CDate(b.Range("I1")), "mm/dd/yyyy") & "# " & _
    '      "AND v.Fecha_compra <= #" & Format(CDate(b.Range("K1")), "mm/dd/yyyy") & "# " & _
    '      "ORDER BY v.Fecha_compra ASC"
    
    
    sql = "SELECT " & _
    "p.producto , v.fecha_compra, v.cantidad " & _
    "FROM [" & "stock$" & "] as p " & _
    "INNER JOIN [" & "venta$" & "] as v " & "WITH(nolock) ON p.prod_id = v.prod_id " & _
    "WHERE v.Fecha_compra >= #" & Format(CDate(b.Range("I1")), "mm/dd/yyyy") & "# " & _
    "AND v.Fecha_compra <= #" & Format(CDate(b.Range("K1")), "mm/dd/yyyy") & "# " & _
    "ORDER BY v.Fecha_compra ASC"
    
    
    c.Cells.Clear
    b.Range("A1:C1").Copy Destination:=c.Range("A1")
    
    Set rs = cn.Execute(sql)
    c.Cells(2, 1).CopyFromRecordset Data:=rs
    c.Range("C:C").NumberFormat = "dd/mm/yyy"
    
    Set rs = Nothing
    cn.Close
    
    Set cn = Nothing
    
    If c.Range("A2") <> Empty Then
        MsgBox ("La busqueda se realizó con éxito"), vbInformation, "AVISO"
    Else
        MsgBox ("No se encontraron registro para el criteiro de búsqueda"), vbInformation, "AVISO"
    End If
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    End Sub
    
    Gracias de antemano por la ayuda.
    Saludos.     

    JoseBonfim

    domingo, 1 de diciembre de 2019 1:01

Todas las respuestas

  • Hola

    ¿Probaste a crear la consulta en modo visual y ver la setencia que te crea? 

    Salu2,


    José Mª Fueyo

    martes, 3 de diciembre de 2019 9:17
  • José, buen día

       consulta. Cuando respondes en este post "¿Probaste a crear la consulta en modo visual y ver la setencia que te crea?"  a que te referís con crear la consulta en modo visual ??  porque me interesa saber como hacerlo para probarlo en un desarrollo que tengo que me está trayendo problemas con la sentencia de consulta sql...

    viernes, 13 de marzo de 2020 14:14