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:
Me gustaria compartirles mi codigo para que vean como esta constituido.La operacion de multiples pasos OLE DB genero errores... Compruebe los valores de estado OLD DB si es posible...
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.