PROBLEMA EN CONSULTA A TABLA DE ACCESS DESDE V.B
Publicado por IVAN (14 intervenciones) el 08/11/2015 01:51:13
Buenas noches.
Os explico. Tengo una base de datos Access, con los campos "ID", "Usuario", "Contraseña", "PaisDocumento", "NumDocumento" y "Email".
El campo "ID" és autonumérico y el campo "PaisDocumento" es numerico. El resto de campo son de texto. El campo "PaisDocumento" es numérico porque tiene una relación (uno a muchos) con otra tabla, que es de países. Esta base de datos la tengo conectada con una aplicación de Visual Basic.
Y ahora viene el problema... Estoy intentando hacer una consulta, desde VB, a esa base de datos, para que me compare los campos "Email", "PaisDocumento" y "NumDocumento" (dos campos "string" y el otro "integer") con la información de una variable, un textbox y un combobox. La idea es que si coincide el contenido de esa variable, ese textbox y ese combobox, con los 3 campos de la base de datos, entonces que me ejecute el código que le pida. Este es el código que he utilizado:
Private Sub ButtonValidar_Click(sender As Object, e As EventArgs) Handles ButtonValidar.Click
Dim conexion As New OleDbConnection
Dim comando As New OleDbCommand
Dim adaptador As New OleDbDataAdapter
Dim lector As OleDbDataReader
Dim consulta As String
Try
conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\ivanm\Documents\Visual Studio 2015\Projects\Cash\Cash\Bases de datos\basedatos.accdb"
conexion.Open()
consulta = "SELECT Email, PaisDocumento, NumDocumento FROM usuarios WHERE Email='" & usuarios.email & "' AND PaisDocumento='" & ComboBoxPais.SelectedValue & "' AND NumDocumento='" & TextBoxDocumento.Text & "'"
comando = New OleDbCommand(consulta, conexion)
adaptador.SelectCommand = comando
lector = comando.ExecuteReader
If lector.HasRows = True Then
ComboBoxPais.Enabled = False
TextBoxDocumento.Enabled = False
ButtonValidar.Enabled = False
ButtonEditar.Visible = True
ButtonObtener.Enabled = True
ButtonObtener.Focus()
Else
MsgBox("El documento introducido no existe o no se corresponde con la dirección de e-mail introducida.", MsgBoxStyle.Critical, "¡Aviso!")
TextBoxDocumento.Clear()
TextBoxDocumento.Focus()
End If
Catch ex As Exception
MsgBox("Error al conectar con la base de datos de usuarios.", MsgBoxStyle.Critical, "¡Aviso!")
End Try
conexion.Close()
End Sub
El problema lo tengo en la línea marcada en negrita (lector=comando.ExecuteReader). Me dice que no coinciden los tipos de datos en la expresión de criterios. He estado haciendo pruebas y he comprobado que el problema lo tengo por tener dos campos "string" y uno "integer". Supongo que de alguna manera tengo que convertir ese campo "integer" en "string", pero no sé cómo.
Me gustaría que me dijérais qué tengo que modificar del código para que me funcione.
Muchas gracias.
Os explico. Tengo una base de datos Access, con los campos "ID", "Usuario", "Contraseña", "PaisDocumento", "NumDocumento" y "Email".
El campo "ID" és autonumérico y el campo "PaisDocumento" es numerico. El resto de campo son de texto. El campo "PaisDocumento" es numérico porque tiene una relación (uno a muchos) con otra tabla, que es de países. Esta base de datos la tengo conectada con una aplicación de Visual Basic.
Y ahora viene el problema... Estoy intentando hacer una consulta, desde VB, a esa base de datos, para que me compare los campos "Email", "PaisDocumento" y "NumDocumento" (dos campos "string" y el otro "integer") con la información de una variable, un textbox y un combobox. La idea es que si coincide el contenido de esa variable, ese textbox y ese combobox, con los 3 campos de la base de datos, entonces que me ejecute el código que le pida. Este es el código que he utilizado:
Private Sub ButtonValidar_Click(sender As Object, e As EventArgs) Handles ButtonValidar.Click
Dim conexion As New OleDbConnection
Dim comando As New OleDbCommand
Dim adaptador As New OleDbDataAdapter
Dim lector As OleDbDataReader
Dim consulta As String
Try
conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\ivanm\Documents\Visual Studio 2015\Projects\Cash\Cash\Bases de datos\basedatos.accdb"
conexion.Open()
consulta = "SELECT Email, PaisDocumento, NumDocumento FROM usuarios WHERE Email='" & usuarios.email & "' AND PaisDocumento='" & ComboBoxPais.SelectedValue & "' AND NumDocumento='" & TextBoxDocumento.Text & "'"
comando = New OleDbCommand(consulta, conexion)
adaptador.SelectCommand = comando
lector = comando.ExecuteReader
If lector.HasRows = True Then
ComboBoxPais.Enabled = False
TextBoxDocumento.Enabled = False
ButtonValidar.Enabled = False
ButtonEditar.Visible = True
ButtonObtener.Enabled = True
ButtonObtener.Focus()
Else
MsgBox("El documento introducido no existe o no se corresponde con la dirección de e-mail introducida.", MsgBoxStyle.Critical, "¡Aviso!")
TextBoxDocumento.Clear()
TextBoxDocumento.Focus()
End If
Catch ex As Exception
MsgBox("Error al conectar con la base de datos de usuarios.", MsgBoxStyle.Critical, "¡Aviso!")
End Try
conexion.Close()
End Sub
El problema lo tengo en la línea marcada en negrita (lector=comando.ExecuteReader). Me dice que no coinciden los tipos de datos en la expresión de criterios. He estado haciendo pruebas y he comprobado que el problema lo tengo por tener dos campos "string" y uno "integer". Supongo que de alguna manera tengo que convertir ese campo "integer" en "string", pero no sé cómo.
Me gustaría que me dijérais qué tengo que modificar del código para que me funcione.
Muchas gracias.
Valora esta pregunta


0