** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y Otros sistemas
  Mensajes nuevos Mensajes nuevos RSS - Resultado Procedmiento almacenado
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Resultado Procedmiento almacenado

 Responder Responder
Autor
Mensaje
efebre Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 591
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita efebre Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Resultado Procedmiento almacenado
    Enviado: 12/Agosto/2018 a las 14:45
Hola a todos.
Hasta hace nada, tenia una aplicacion que funcionaba con el típico esquema de front end (forms, etcc en acces) y backend (tablas en servidor access).  He cambiado ahora el backend migrando los datos a MySQL.  Tras modificar pertinentemente el front end casi todo funciona perfectamente salvo un pequeño detalle que me está volviendo loco jajaja. Os explico:
Tengo un formulario (funcionando como subform) que realizaba consultas via DAO mostrando el resultado a través del siguiente código:

    ' Crea una consulta temporal eliminando la previa si existiese.
    CurrentDb.QueryDefs.Delete ("consultaTemporal")
    Set qdfNuevo = CurrentDb.CreateQueryDef("ConsultaTemporal", miSQL)

' aplico la consulta como origen del subformulario
    Me.Resultado.SourceObject = "query.ConsultaTemporal"
    Me.NomVariable.RowSourceType = "Field List"
    Me.NomVariable.RowSource = miSQL

Bien, hasta aquí todo bien.  El tema es que ahora muchas consultas las realizo en el servidor MySQL en forma de procedemientos almacenados (SP).  He conseguido desde acces ejecutarlas sin problemas via ADODB  pero el problema viene cuando intento ver el resultado de la SP tal como hacia en la version DAO.  Encontré en una web lo que decian era el equivalente en ADO al createquerydef:

Dim cat As New ADOX.Catalog
Dim cmd As New ADODB.Command
Dim sqltext As String

‘ create the sqltext as in the example above

Set cat.ActiveConnection = CurrentProject.Connection
cmd.CommandText sqltext
Cat.Views.Append “My_Query”, cmd

El caso es que sigo sin poder ver los resultado de la SP en el front end como hacia en DAO.

Existe alguna forma de poder realizarlo?

Espero haber explicado bien lo que pretendo que ya no se ni si es posible.  A ver si algún crack del foro me puede echar un cable

Muchas gracias

Julián - España
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 632
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 12/Agosto/2018 a las 18:10
Suponiendo que entre el Command y el procedimiento almacenado, devuelvan un conjunto de registros (Recordset), puedes probar a asignar este último objeto al formulario: su propiedad Recordset admite los 2 tipos, DAO y ADO:

- https://msdn.microsoft.com/es-es/VBA/access-vba/articles/form-recordset-property-access?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev11.query%3FappId%3DDev11IDEF1%26l%3Des-ES%26k%3Dk(vbaac10.chm13497)%3Bk(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue

Otra cosa: tal vez te interese indicar en el objeto Command que vas a ejecutar un procedimiento almacenado:

- https://msdn.microsoft.com/es-es/library/office/jj249389.aspx
- https://msdn.microsoft.com/es-es/library/office/jj249976.aspx
Arriba
efebre Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 591
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita efebre Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 12/Agosto/2018 a las 18:57
Gracias por tu respuesta ptxiku
Efectivamente los datos de la SP los puedo capturar en un recordset a partir de coobjeto command.
El problema es que el subformulario ha de adecuarse y ajustar a cada consulta que tendrá distinto número de campos y registros.
Intenté lo siguiente:
Me.Resultado.form.recordset = MySQLrst
Y no lo consigo.  Se me bloquea la aplicación y no muestra valora alguno.
Verifco el recordset y contiene los campos y registros que debe.
El problema es como mostrar ese recordset en el subformulario como si de una consulta (query) se tratase que es como lo hace en la versión original de la aplicacion en DAO
Julián - España
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 632
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 12/Agosto/2018 a las 19:21
Si ese Me es el subformulario, y ese MySQLrst es el Recordset de ADO, lo puedes asignar directamente:

Set Me.Recordset = MySQLrst
Arriba
efebre Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 591
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita efebre Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Agosto/2018 a las 09:49
Buenos dias Pitxiku
Aqui sigo peleándome con el origen de datos por el momento sin grandes avances.  Una pregunta: el formulario que quiero usar para mostrar los registros del objeto recordset que me ha devuelto la Stored procedure, ha de tener los controles (uno por cada variable del recordset) previamente a la orden Me.recordset?
Lo digo porque lo que estoy usando es un formulario vacio que abro en vista hoja de datos y estoy asumiendo que al establecer Me.recordset asigna una columna a cada una de las variables del recordset (con lo que tengo la flexibilidad que necesito tanto en columnas como en número de registros)
No vaya a ser que me estoy estrellando en lo más básico jajaja

Gracias
Julián - España
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable