Duda sobre consulta a la base de datos

Pues aquí de nuevo con una pregunta, mira lo que pasa es que estoy haciendo una consulta con el siguiente código:
PROPMT = "INTRODUZCA LA CLAVE DEL TRABAJDOR"
searchstr = UCase(InputBox(PROPMT, "BUSQUEDA POR CLAVE"))
Data1.Recordset.Index = "CLAVE"
Data1.Recordset.Seek "=", searchstr
If Data1.Recordset.NoMatch Then
MsgBox ("ESA CLAVE NO EXISTE")
Data1. Recordset. MoveFirst
Y cuando consulto un registro que existe en la nbase de datos si me aparece todo bien, el problema es cuando pongo un registro que no existe, antes de salirme el msgbox"no existe esa clave" me sale un error que dice que no hay ningún registro activo, y lo que quiero es que ya no me aparezca ese error antes del msgbox, necesito tu ayuda ya me trai loco ese error y lo que no entiendo es que cuando le doy aceptar a ese error ya me sale el msgbox bien y jala todo bien, pero no quiero que salga ese error sino que me mande directo al msgbox, por favor ayudame es de vida o muerte!

2 respuestas

Respuesta
1
Reemplaza el data1. Recordset. Nomatch then
por if data1. Recordset. Eof then, haber si te deja pasar el eof es fin de archivo
Ya puse la linea que me dijiste pero sigue igual, si no encuentra el registro me sale que no hay ningún registro activo antes del msgbox, que podría hacer por favor ayudame en verdad estoy desesperado!
Disculpa que insista pero o me falta código o el código tendría que ser así
If Data1.Recordset.EOF Then
            MsgBox ("ESA CLAVE NO EXISTE")
else
          Data1.Recordset.MoveFirst
end if
No me sale de nuevo el cuadro de que no hay ningún registro activo, en cuanto en lo que me dices que marqque la linea donde me da el error, es donde te digo que se me hace raro porque como te digo hago la consulta si existe me arroja los datos y si no existe me sale un cuadro donde me marca elrror de que no hay ningún registro activo y me da dos opciones aceptar y ayuda, cuando le doy ayuda me sale el numero de error 524 "El error especificado ha ocurrido en el objeto de Automatización que hay actualmente en ejecución", pero si le doy en aceptar me sigue corriendo el programa normal y es cuando me manda el mensaje de que la clave no existe, y todo bien no se detiene la ejecución ni nada, ni me sale como los otros errores que te da la opción de depurar o terminar la ejecución es por eso que se me hace raro, o habrá otra forma de consultar un registro indexado y me muestre el contenido en las cajas de texto como este, ¿algún código?
Así sería el código exacto.
If Data1.Recordset.NoMatch Then
    MsgBox ("ESA CLAVE NO EXISTE")
    Data1.Recordset.MoveFirst
end if
Ahora, pone una interrupción F9 en la primer línea donde pedís que ingrese la clave y vas avanzando paso a paso con F8, fíjate con las 2 opciones
por la que encuentra datos y por la que no, haber si podes ver el problema donde lo dispara
y por favor pásame el código completo de este modulo
Me marca error en esta linea
If Data1.Recordset.NoMatch Then
y el codigo completo es este lo mando a llamar dedes un command:
Private Sub Command4_Click()
PROPMT = "INTRODUZCA LA CLAVE DEL TRABAJDOR"
searchstr = UCase(InputBox(PROPMT, "BUSQUEDA POR CLAVE"))
Data1.Recordset.Index = "CAMION"
Data1.Recordset.Seek "=", searchstr
If Data1.Recordset.NoMatch Then
data1.recordset.movefirst
MsgBox ("ESA CLAVE NO EXISTE")
End If
Es un formulario que contiene una base de datos clientes.mdb y tiene tres cajas de texto con su respectiva etiqueta, las cuales son clave, nombre, dirección. Entonces tengo los botones de alta, guardar, modificar, consulta. En el de consulta es donde pongo el código que te menciono, o habrá otro método para consultar la clave y me muestre la información en los tres cajas de texto y si no me mande un mensaje, ya no se que hacer me estoy volviendo loco jejej
Lo que se me ocurre para que evites este error es este.
Pero fíjate si el error no esta en la forma que usas la clave y la palabra camión, te dejo esto que saque de una web, capaz que lo tienes al revez, y eso provocaría otro tipo de error que lo solucionas con el error goto errores.
Index y Seek, el primero para indicar el índice que se va a usar y el segundo para establecer el valor que se va a buscar en el campo afectado por el índice indicado
on error goto errores
PROPMT = "INTRODUZCA LA CLAVE DEL TRABAJDOR"
searchstr = UCase(InputBox(PROPMT, "BUSQUEDA POR CLAVE"))
Data1.Recordset.Index = "CAMION"
Data1.Recordset.Seek "=", searchstr
If Data1.Recordset.NoMatch Then
data1.recordset.movefirst
MsgBox ("ESA CLAVE NO EXISTE")
End If
exit sub
Errores:
MsgBox ("Error, Reintente")
Fíjate que me sale el mismo error, pero lo que estoy viendo en la linea:
searchstr = UCase(InputBox(PROPMT, "BUSQUEDA POR CLAVE"))
Donde se crea el botón de aceptar y cancelar, porque cuando le doy en aceptar como que es ahí donde debeb ir el código porque hace un acción antes de irse a checar si existe o no existe, me preguntes es si cambio el código a unca caja de texto que cuando el usuario le de consulta que se habilite la caja de texto y pueda escribir la clave y al momento de darle enter me cargue los datos si existe y si no que me mande un mensaje, pero mi duda es si con la misma linea que pongo para que me aparezca el inputbox lea la cadena de caracteres de una caja de texto:
searchstr = UCase(InputBox(PROPMT, "BUSQUEDA POR CLAVE"))
¿Se tendira que cambiar el searchstr?
Es así como tienes que usar el inputbox
Verleg = InputBox("Ingrese el Legajo que desea Habilitar", "Activación de Legajo")
Y me parece que esta demás, saca el inputbox y directamente
hacele la búsqueda
searchstr = InputBox("INTRODUZCA LA CLAVE DEL TRABAJaDOR", "BÚSQUEDA POR CLAVE")
Así directamente
Hola que tal, disculpa si soy fastidioso lo que pasa es que es urrgente que quede ya esto por que me lo están pidiendo, ¿a lo mejor lo puedo intentar con otra csoa no?, no se otro código diferente a este, ¿por ejemplo tu como le haces para consultar si existe o no un registro y si existe te manda los datos a las cajas de texto y si no pues un mensaje? Podrías decirme que código usas o que me recomiendas, pero ya diferente a este porque ya le busque mucho y no me quita ese error, en verdad te agradecería mucho y yo de algún modo te ayudare en algo no de visual basic pero en algo que te pueda servir.
Tu amigo bob23
Vamos a empezar por el recordset
Con esto vos vas a manejar tus consultas y no el data control
y podes tirar 3 o 4 consultas al mismo tiempo sin poner tantos de esos
mira yo te voy a pasar como se hace alta, baja, modificaciones los datos después los transformas vos según tu campos
esto en el option explicit
Dim rspasareg As Recordset
Dim rsalta As Recordset
Dim rsalta2 As Recordset
Dim rsbaja As Recordset
Dim rsmod As Recordset
Dim cn As Connection
declaras variables
esto en el load del form
Set cn = New Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\LEANDRO\ACCESODATOS\TELEFONOS.mdb;Persist Security Info=False"
la conexion la saque del adodb y despues lo borras, asi ganas mas tiempo.
BOTON DE ALTA
'seteas rsalta
Set rsalta = New Recordset
Set rsalta2 = New Recordset
'haces la consulta manejo todo con sql
' cuando haces la consulta el error mas comun es
' equivocarse los nombres o ponerle una s de mas
' fijate bien los nombres de la tabla
consulta1 = "select * from agenda"
rsalta.Open consulta1, cn, adOpenDynamic, adLockOptimistic, 1
    rsalta.AddNew
    ' ojo los nombres despues del signo de admiracion
    'tienen que ser iguales al de la tabla de access
    rsalta!idpersona = Me.txtid.Text
    rsalta!tel = Me.txttel.Text
    rsalta!nombre = Me.txtnombre
    rsalta!direccion = Me.txtdire
    rsalta.Update
    rsalta.Close
BAJA
Set rsbaja = New Recordset
Set rsbaja2 = New Recordset
Dim conbaja As String
conbaja = " delete * from agenda where idpersona = " & Me.txtid
rsbaja.Open conbaja, cn, adOpenDynamic, adLockOptimistic, 1
MODIFICAR
Set rsmod = New Recordset
Set rsmod2 = New Recordset
Dim conmod As String
conmod = "select * from agenda where idpersona = " & txtid.Text
'seleccionamos todo de agendas cuando id (de la tabla access)=al del text box
rsmod.Open conmod, cn, adOpenDynamic, adLockOptimistic, 1
rsmod!tel = txttel
rsmod!nombre = txtnombre
rsmod!direccion = txtdire
rsmod.Update
rsmod.Close
BUENO, esta es una de la maneras, después tienes el insert y demás
o sea todo el sql completo lo usas a través de los recordset
¿como hacer para saber si un registro existe o no?
haces la consulta
conmod = "select * from agenda where idpersona = " & txtid.Text
rsmod.Open conmod, cn, adOpenDynamic, adLockOptimistic, 1
if rsmod.eof = false then
txttel = rsmod!tel
txtnombre = rsmod!nombre
txtdire = rsmod!direccion
else
msgbox "No se Encontro ningún registro"
rsmod.close
end if
y si tenes que hacer una while es asi
cont=0
do while not rsmod.eof
'y aca si queres podes poner un contador
cont=cont+1
rs.movenext
loop
Rs. Close
Y también esta la opción de rs. Count distinto de cero.
Bueno tienes 3 o más variantes, pero esas son las más comunes
fíjate en tu actual si podes poner un .count para la cantidad de registros y preguntas
ahí
Respuesta
1
Verifica que el recordset no tenga una propiedad que indique si hubo error o no en la consulta, entonces pregunta si esa propiedad es true es que hay error, si no continua con el resto.
Si no utiliza On error Goto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas