String Between en VBA

Función para que VBA que retorna el contenido entre dos coincidencias. En otros lenguajes se conoce como StrBetween, o StringBetween.

 

Function Between(sCadena As String, Coincidencia1 As String, Coincidencia2 As String) As String
    'Devuelve una cadena que se encuentra entre dos coincidencias
    'En otros lenguajes es conocina como: StringBetween
    Dim PosC1, PosC2, nLetras As Integer
    
    PosC1 = InStr(1, sCadena, Coincidencia1)
    If PosC1 > 0 Then
        PosC1 = PosC1 + Len(Coincidencia1)
    Else
        GoTo NOCoincide
    End If
    
    PosC2 = InStr(PosC1, sCadena, Coincidencia2)
    If PosC2 <= 0 Then
        GoTo NOCoincide
    End If
    
    nLetras = PosC2 - PosC1
    
    Between = Mid(sCadena, PosC1, nLetras)
    
    Exit Function
NOCoincide:
    Between = ""
End Function

Function Between_Test()
  debug.print Between("Mi nombre es: [Ruperto Coronado]","[","]")
  'Imprime:
  'Ruperto Coronado
End Function

 

Modificar una Vista de SQL Server desde VBA en Access y mostrarla

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:

SQLVista

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.