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.