none
Recuperar datos de tabla y contrastar con otros de un Formulario RRS feed

  • Pregunta

  • Buen día a todos.

    La consulta es la siguiente. Tengo que verificar en una tabla de Access en dos columnas distintas datos para contrastar con otros en un formulario. En caso de ya estar ingresados en la tabla me envíe un mensaje, caso contrario, continúe con otras instrucciones.

    Las columnas a verificar ingresan una "Mes" y la otra Año".

     Private Sub btnAgregar_Click(sender As Object, e As EventArgs) Handles btnAgregar.Click
            ConsultaSelect = "SELECT Mes,Año FROM tbl_MesAño WHERE Mes LIKE '" & cmbMes.Text & " AND Año LIKE '" & Trim(txtAño.Text) & "'"
            Conexion = New OleDbConnection(Cs)
            Conexion.Open()
            Cmd = New OleDbCommand(ConsultaSelect, Conexion)
            Dim Dr As OleDbDataReader
            Dr = Cmd.ExecuteReader
            If (Dr.Read()) Then
                Dim Mes As String = Dr.Item("Mes")
                Dim Año As String = Dr.Item("Año")
                MsgBox("El Período ya existe, debe seleccionar otro")
                Dr.Close()
            End If

    El mensaje de error es el siguiente:

    Información adicional: Error de sintaxis (falta operador) en la expresión de consulta 'Mes LIKE 'Enero AND Año LIKE '0''.

    En lugar de LIKE puse el signo = pero es lo mismo.

    Desde ya muchas gracias a quien pueda orientarme.

    saludos.

    Claudio E. Barral.

    lunes, 6 de mayo de 2019 15:03

Respuestas

  • Hola:
    Prueba algo como esto.

        Private Function MesAño(ByVal vsMes As String, ByVal vsAño As String) As Boolean
            Dim liResultado As Integer = 0
            Try
                Dim lsQuery As String = "SELECT COUNT(*) FROM tbl_MesAño WHERE Mes=@Mes AND Año=@Año"
                Using loConexion As New OleDbConnection("TU_CADENA_DE_CONEXION")
                    Using loComando As New OleDbCommand(lsQuery, loConexion)
                        loComando.Parameters.Add(New OleDbParameter("@Mes", vsMes))
                        loComando.Parameters.Add(New OleDbParameter("@Año", vsAño))
                        loConexion.Open()
                        liResultado = CInt(loComando.ExecuteScalar())
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return Not liResultado = 0
        End Function
    Modo de uso
    If MesAño("Enero", "2017")=True Then
        MessageBox.Show("El periodo SI existe")
    Else
        MessageBox.Show("El periodo NO existe")
    End If

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta CEB_ROJO martes, 7 de mayo de 2019 13:55
    martes, 7 de mayo de 2019 12:57

Todas las respuestas

  • Hola  

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te hago la recomendación de ingresar al siguiente enlace en donde puedes encontrar una posible solución para tu problema.

    https://social.msdn.microsoft.com/Forums/es-ES/8948065a-9505-411f-963a-a3915a93c41f/leer-el-valor-de-un-campo-de-una-tabla-access-accdb?forum=vbes

    https://foro.elhacker.net/net/obtener_campo_determinado_de_una_tabla_determinada_mediante_vbnet-t200985.0.html

    https://support.office.com/es-es/article/crear-una-regla-de-validaci%C3%B3n-para-validar-los-datos-de-un-campo-b91c6b15-bcd3-42c1-90bf-e3a0272e988d

    Gracias por usar los foros de MSDN.

    Carlos Ruiz
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    lunes, 6 de mayo de 2019 21:49
  • Hola:
    ¿Puedes poner la estructura de la tabla, porque los campos Mes y Año, pueden que no sean texto?

    Un saludo desde Bilbo
    Carlos

    lunes, 6 de mayo de 2019 22:17
  • Muchas gracias a ambos por responder.

    Si J. Carlos Herrero, los campos son de tipo Texto. Hay otros más que son de otro tipo pero los que quiero contrastar son de texto. Ej. Mes: Febrero  Año: 2019.

    Saludos cordiales.  

    Claudio

    martes, 7 de mayo de 2019 12:13
  • Hola:
    Prueba algo como esto.

        Private Function MesAño(ByVal vsMes As String, ByVal vsAño As String) As Boolean
            Dim liResultado As Integer = 0
            Try
                Dim lsQuery As String = "SELECT COUNT(*) FROM tbl_MesAño WHERE Mes=@Mes AND Año=@Año"
                Using loConexion As New OleDbConnection("TU_CADENA_DE_CONEXION")
                    Using loComando As New OleDbCommand(lsQuery, loConexion)
                        loComando.Parameters.Add(New OleDbParameter("@Mes", vsMes))
                        loComando.Parameters.Add(New OleDbParameter("@Año", vsAño))
                        loConexion.Open()
                        liResultado = CInt(loComando.ExecuteScalar())
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return Not liResultado = 0
        End Function
    Modo de uso
    If MesAño("Enero", "2017")=True Then
        MessageBox.Show("El periodo SI existe")
    Else
        MessageBox.Show("El periodo NO existe")
    End If

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta CEB_ROJO martes, 7 de mayo de 2019 13:55
    martes, 7 de mayo de 2019 12:57
  • Muchísimas gracias por tu colaboración.

    Abrazo grande J. Carlos.

     

    martes, 7 de mayo de 2019 13:58