Recientemente me ví en la necesidad de tener una vista con contenido ‘a petición’ del usuario, que bien puede ser de una sola tabla o de muchas, usando como base una instrucción en SQL Server.
Abrir una tabla desde VBA en Access es sencillo, para ello existe la instrucción:
DoCmd.OpenTable "NombreTabla", acViewNormal
Donde:
DoCmd.OpenTable es la instrucción
NombreTabla es un parámetro donde le indiques el nombre de la tabla
acViewNormal es un segundo parámetro para indicarle en que modo se abrirá la tabla. En este caso ‘Normal’
Ahora bien, nuestra misión será editar una consulta/vista desde VBA en Access, pero si no existe habrá que crearla y luego abrirla en vista tabla.
Estos son los pasos a seguir:
1 – Crear la consulta, si existe, regresará un error y entonces pasaremos a editarla.
2 – Luego de crearla o editarla, refrescar el enlace a la BD de SQL Server, porque si no hacemos este paso, la vista/consulta editada, saldrá con el contenido anterior y parecerá que nuestro método de edición ha fallado. Esto se soluciona dando clic en el area de objetos de Access y presionando F5, pero nosotros lo haremos desde VBA.
La función para Crear o Editar la vista es la siguiente:
Function CrearEditarVista(strNombreVista As String, strSQLBase As String) As Boolean Dim iSQL As String 'le indicamos que si hay un error continúe' On Error Resume Next 'Esta instrucción SQL crea la vista en SQL Server' iSQL = "CREATE VIEW " & strNombreVista & " AS " & strSQLBase Err.CLEAR CurrentProject.connection.Execute iSQL If Err.number = 0 Then 'Si no hubo error' 'Se creó la vista :D, Devolvamos True' CrearEditarVista = True ElseIf Err.number = -2147217900 Then 'Este error significa que ya existe la vista. Entonces a editarla' iSQL = "ALTER VIEW " & strNombreVista & " AS " & strSQLBase Err.CLEAR CurrentProject.connection.Execute iSQL If Err.number Then GoTo MANEJA_ERROR 'Si genera error, anunciar el error' 'Nuesta función, funcionó :D, retornemos True' CrearEditarVista = True Else GoTo MANEJA_ERROR End If Exit Function MANEJA_ERROR: MsgBox "[" & Err.number & "] - [" & Err.description, vbCritical, "Error" CrearEditarVista = False End Function
Ahora, necesitamos consumirla y hacer el resto:
Function AbrirVista() strSQL = "Cualquier consulta con SELECT" R = CrearEditarVista("NombreDeMiVista", SQL) If R = True Then 'Si se creó o editó la vista' 'Refrescamos los objetos. Si no hacemos esto, dará error porque no encontrará la vista o nos abrirá la vista, con la consulta que ya tenía guardada' Application.RefreshDatabaseWindow 'Esperamos un segundo a que se actualicen los objetos' Sleep (1) 'Finalmente abrimos la vista' DoCmd.OpenView "NombreDeMiVista", acViewNormal End If End Function
Aquí la función Sleep(), aclaro que no es mía, álgún genio de la Web la creó, y yo la copié
Public Function Sleep(NumberOfSeconds As Variant) On Error GoTo Err_Pause Dim PauseTime As Variant, start As Variant PauseTime = NumberOfSeconds start = Timer Do While Timer < start + PauseTime DoEvents Loop Exit_Pause: Exit Function Err_Pause: MsgBox Err.number & " - " & Err.description, vbCritical, "Pause()" Resume Exit_Pause End Function
Copia todo esto a un módulo y lo podrás usar sin problemas, o hasta puedes crear un formulario. como el siguiente:
Espero te sirva. ¡Hasta la próxima!
Los medicamentos, absolutamente, van a cambiar tu vida. Si el problema persiste durante un perГodo mГЎs largo, se debe consultar a un mГ©dico. ВїTiene alguna pregunta sobre Kamagra y comprare cialis? Por supuesto que no es todo. ВїQuГ© medicamento es adecuado para la incapacidad para obtener o mantener una erecciГіn? Tal vez usted sabe sobre . Otra cuestión que tenemos que discutir es . Tener impotencia lata complicar el romance. Todo tipo de medicamentos, desde aquellos que se consideran «todos naturales» a los que se producen quГmicamente en un laboratorio, pueden causar algunos efectos secundarios no deseados.