** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Problemas con Openrecordset
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoProblemas con Openrecordset

 Responder Responder
Autor
Mensaje
simonpru Ver desplegable
Habitual
Habitual
Avatar

Unido: 24/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 194
Enlace directo a este mensaje Tema: Problemas con Openrecordset
    Enviado: 20/Noviembre/2020 a las 17:00
Buenas

Tengo un form que muestra todos los registros de una tabla, tengo habilitado un boton de comando para que cuando yo esté posicionado en la fila eliminar ese registro, pero no se que pasa que el codigo me tirar error siempre al intentar abrir la tabla.

El campo de búsqueda es númerico.

este es CODE

Dim delete As Variant
Dim TABLA As DAO.Recordset
delete = Me.VARNUM

Set TABLA = CurrentDb.OpenRecordset("SELECT * FROM BLACKFACT WHERE NUMERO =") & delete

MsgBox TABLA1.RecordCount

TABLA1.Close
Set TABLA1 = Nothing

siempre me tira el error no coinciden los tipos.

Muchas gracias.

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 17:14
Hola simonpru,

lo que has posteado es un hermoso batiburrillo ....  LOL

- dices que el campo búsqueda es numérico  ... ¿se llama CODE? ¿por qué le asignas VARNUM?
- defines una variable para asignarle el valor de búsqueda como Variant, tendrías que hacerlo como numérica, del mismo tipo que el campo de la tabla con el que la vas a comparar, supongo que será Long, a poco que te descuides le asignara un tipo String
- entiendo que el campo con el que vas a comparar en la tabla es NUMERO
- el recordset que abres no borra nada .... ¿?




Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
simonpru Ver desplegable
Habitual
Habitual
Avatar

Unido: 24/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 194
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 17:23
CODE no es ningún campo es CODE, del código, VARNUM es el nombre del campo del formulario, y el recordset no se abre hay tira el error, diciendo que no coinciden los tipos.

En la tabla NUMERO es un campo numérico.

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 17:33
Publicado originalmente por Mihura Mihura escribió:

- defines una variable para asignarle el valor de búsqueda como Variant, tendrías que hacerlo como numérica, del mismo tipo que el campo de la tabla con el que la vas a comparar, supongo que será Long, a poco que te descuides le asignara un tipo String

¿?
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
simonpru Ver desplegable
Habitual
Habitual
Avatar

Unido: 24/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 194
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 17:44
nada, he definido la variable como long y sigue tirando el mismo error

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 17:53
Set TABLA = CurrentDb.OpenRecordset("SELECT * FROM BLACKFACT WHERE NUMERO =") & delete

El paréntesis de cierre de la instrucción está en mal lugar, lo que provoca que esté mal construida.

Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
simonpru Ver desplegable
Habitual
Habitual
Avatar

Unido: 24/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 194
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 17:54
donde deberia estar el paréntesis de cierre?

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 17:57
Al final de la asignación del valor.

Pon un punto de interrupción justo en esta instrucción y en la ventana inmediato haz un print de:

             "SELECT * FROM BLACKFACT WHERE NUMERO =") & delete

Esa es la orden que estás pasando a Access.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
simonpru Ver desplegable
Habitual
Habitual
Avatar

Unido: 24/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 194
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 18:13
descubierto, se puede cerrar el hilo, muchas gracias cracks

Arriba
simonpru Ver desplegable
Habitual
Habitual
Avatar

Unido: 24/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 194
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 18:21
perdona que moleste de nuevo, lo que quiero es borrar registros de distintas tablas, he visto este codigo

Dim dbs As dao.Database
dbs.Execute ("DELETE * FROM BLACKFACT WHERE NUMERO =" & delete)

pero al ejecutarlo me dice "variable de objeto o bloque with no establecido"
Error 91.

porque tira el error?

Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 18:28
Porque declara dbs como DAO.Database pero no realizas la asignación:

Set dbs = CurrentDb

Y, de hecho, ninguna de las 2 líneas es necesaria. Ni los paréntesis. Ni la variable delete

CurrentDb.Execute "DELETE * FROM BLACKFACT WHERE NUMERO = " & Me!VARNUM, dbFailOnError

Un saludo 
Xavi, un minyó de Terrassa

Mi web
Arriba
simonpru Ver desplegable
Habitual
Habitual
Avatar

Unido: 24/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 194
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 18:51
perdona XAVI esa orden se puede repetir en el mismo codigo para 3 tablas?

porque he puesto esto

CurrentDb.Execute "DELETE * FROM BLACKFACT WHERE NUMERO = " & Me!VARNUM, dbFailOnError
CurrentDb.Execute "DELETE * FROM OPERACIONESBF WHERE NFACT = " & Me!VARNUM, dbFailOnError
CurrentDb.Execute "DELETE * FROM SUBLACKFACT WHERE FACTURA = " & Me!VARNUM, dbFailOnError

pero al irse a la segunda tabla me da error de sintaxis (falta operador) en la expresión de consulta "NFACT"
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 20/Noviembre/2020 a las 19:04
Pregunta: el formulario desde dónde lanzas ese código y que contiene el control VARNUM, ¿de basa en la tabla BLACKFACT?

Si es así, es posible que, al ejecutar la primera línea, se pierda el valor de VARNUM. Soluciones: invertir el orden de las consultas o (como ya hacias) almacenar el valor de VARNUM en una variable al empezar.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
simonpru Ver desplegable
Habitual
Habitual
Avatar

Unido: 24/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 194
Enlace directo a este mensaje Enviado: 29/Diciembre/2020 a las 18:49
Solucionado, se puede cerrar hilo

Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable