Foros del Web » Programación para mayores de 30 ;) » Programación General »

Error: Operacion Multiples OLE DB con Tablas #TMP-SQL y VBA

Estas en el tema de Error: Operacion Multiples OLE DB con Tablas #TMP-SQL y VBA en el foro de Programación General en Foros del Web. Hola, buenos dias. Tengo una duda, y me gustaria pedir de su valiosa colaboracion. Veran, tengo una macro en Excel 2013 en la cual tengo ...
  #1 (permalink)  
Antiguo 21/05/2015, 12:05
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta Error: Operacion Multiples OLE DB con Tablas #TMP-SQL y VBA

Hola, buenos dias.

Tengo una duda, y me gustaria pedir de su valiosa colaboracion.

Veran, tengo una macro en Excel 2013 en la cual tengo un formulario de login y posterior a esto, cuando dan click en el boton aceptar envio una cadena de coneccion a la DB para ejecutar tres consultas SQL que inserto en tablas #TMP, el punto es que siempre que lo ejecuto me devuelve el siguiente error:

Código:
La operacion de multiples pasos OLE DB genero errores... Compruebe los valores de estado OLD DB si es posible...
Me gustaria compartirles mi codigo para que vean como esta constituido.


Este bloque es mi codigo VBA:
Código:
CSet = "SET NOCOUNT ON; "
CSelect1 = "SELECT r.invoice_id, col.part_id, rl.reference, rl.amount, co.user_1 INTO #Sql_Maquilado "
CFrom1 = "FROM cust_order_line col, customer_order co, receivable r, receivable_line rl "
CWhere1 = "WHERE r.invoice_id = rl.invoice_id AND col.cust_order_id = rl.cust_order_id AND co.id = col.cust_order_id "
CAnx1 = "AND r.customer_id='sv-texpor' AND r.invoice_date between '" & CFechaI & "' AND '" & CFechaF & "' AND r.status = 'a' AND rl.reference like 'SERV%' "


CSelect3 = "Select F.Invoice_Date, F.Invoice_Id, F.Customer_Id, F.Purchase_Order, "
CConsulta3 = "F.Part_Id, F.Reference, F.Qty, F.Amount, isnull(M.amount,0) as Maquilado, SUM(F.amount + IsNull(M.amount, 0)) As Costo_Total "
CFrom3 = "From #Facturacion F Left Join (Select invoice_id, part_id, reference, amount, user_1 From #Sql_Maquilado) M On F.Invoice_Id = M.Invoice_Id "
CAnx3 = "And F.Part_Id = M.Part_Id And F.Purchase_Order = M.User_1 "
CGroup3 = "Group By F.Invoice_Date, F.Invoice_Id, F.Customer_Id, F.Purchase_Order , F.Part_Id, F.Reference, F.Qty, F.amount, M.amount "


Call Ejecutar((Servidor), (Base), (Usuario), (Pass), (CSet & CSelect1 & CFrom1 & CWhere1 & CAnx1 & CSelect3 & CConsulta3 & CFrom3 & CAnx3 & CGroup3), "Hoja2")

Este codigo es la coneccion a la DB.

Código:
Function Ejecutar(ServidorV As String, BaseV As String, UsuarioV As String, PassV As String, Sql As String, Hoja As String)
    
    On Error GoTo ErrorHandler
    
    Dim cn As Object
    
    ' crea un objeto Connection
    Set cn = CreateObject("ADODB.Connection")
    
    ' IMPORTANTE: Indicar la cadena de conexión a usar
    Servidor = ServidorV
    Base = BaseV
    Usuario = UsuarioV
    Pass = PassV
    Conexion = "Provider=SQLOLEDB.1;" & _
               "Password=" & Pass & ";" & _
               "Persist Security Info=True;" & _
               "User ID=" & Usuario & ";" & _
               "Initial Catalog=" & Base & ";" & _
               "Data Source=" & Servidor
    
    '"MultipleActiveResultSets=True;" & _

    cn.ConnectionString = Conexion
    
    ' verifica que los parámetros no estén vacios
    If Sql <> vbNullString And Hoja <> vbNullString Then
        ' variable para al rec de ado
        Dim rst As Object
        ' abre la conexión a la base de datos
        cn.Open
      
        ' crea un nuevo objeto recordset
        Set rst = CreateObject("ADODB.Recordset")
        
        ' Ejecuta el sql para llenar el recordset
        rst.Open Sql, cn, 1, 3
        ' variables para los indices de las filas y columnas
        C = 0
        F = 0
        ' recorre las columnas, añade el nombre del campo al encabezado
        For i = 0 To rst.Fields.Count - 1
            Sheets(2).Range(Chr(i + 65) & F + 1).Value = rst.Fields(i).Name
        Next
        F = F + 1
        ' recorre todo el recordset hasta el final
        Do While Not rst.EOF
            ' recorre los campos en el registro actual del recordset para recuperar el dato
            For i = 0 To rst.Fields.Count - 1
                ' añade el valor a la celda
                Sheets(2).Range(Chr(C + 65) & _
                                F + 1).Value = rst.Fields(C)
                C = C + 1
            Next
            ' resetea el indice de las columnas
            C = 0
            ' Referencia al registro actual (incrementa )
            F = F + 1
            ' Siguiente registro
            rst.MoveNext
        Loop
        ' cierra y descarga las referencias
        On Error Resume Next
        rst.Close
        cn.Close
        Set cn = Nothing
        Set rst = Nothing
    End If
    Call Macro1
    Exit Function
ErrorHandler:
  MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "Error..."
End Function

Sera que me podrian dar una guia de que estare haciendo mal

Ahora, si me preguntan por que estoy haciendo esto de las #TMP... El problema es que las base de datos no las administro yo, y no tengo acceso a realizar SP para la DB sino que unicamente puedo consultar, como un mortal cualquiera

Desde ya gracias por su ayuda.

Etiquetas: form, multiples, ole, operacion, tablas, vba
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:40.