** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Fallo en ejecucion de consulta SQL
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoFallo en ejecucion de consulta SQL

 Responder Responder
Autor
Mensaje
JoseraGR Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 06/Octubre/2020
Localización: Granada
Estado: Sin conexión
Puntos: 31
Enlace directo a este mensaje Tema: Fallo en ejecucion de consulta SQL
    Enviado: 20/Febrero/2025 a las 17:55
Buenas

Tengo un problema en  el código de VBA, el cual me estoy calentando la cabeza y no atino a dar con el problema. El código es el siguiente:

"Private Sub txtCV1_Click()
    'Declaracion de variables
    Dim vNuevaCategoria As String
    Dim vCategoria As String
    Dim vDigital As Boolean
    Dim vReferencia As String
    Dim Referencia As String
    Dim dbs As dao.Database
    Dim rts As dao.Recordset
    Dim vSiguienteCV1 As Integer
    Dim vNuevaCV1 As Integer
    'Tomamos el valor de la categoria del material
    vNuevaCategoria = Forms!F_principal!txtCategoria.Value
    'Definimos las variables
    vNuevaCV1 = 0
    vSiguienteCV1 = 0
    Set dbs = CurrentDb
    Set rts = dbs.OpenRecordset("T_ModeloGeneral", dbOpenSnapshot)
    'Nos movemos al primer registro
    rts.MoveFirst
    'Recorremos la tabla hasta el final
    Do Until rts.EOF
        'Vemos la categoria y digitalizacion de cada registro
        vCategoria = rts.Fields("Categoria").Value
        vDigital = rts.Fields("Digital").Value
        'Verificamos que la categoria del modelo es la misma y ademas es digital
        If vNuevaCategoria = vCategoria And vDigital = True Then
            'Tomamos el valor de la referencia del modelo
            vReferencia = rts.Fields("Referencia").Value
            'Consultamos el valor de la CV1 en la tabla Modelo Digital de la Referencia
            vSiguienteCV1 = "SELECT CV1 FROM T_ModeloDigital WHERE Referencia = vReferencia"
        End If
        'verificamos que la siguiente CV1 es consecutiva
        If vSiguienteCV1 - vNuevaCV1 <= 1 Then
            'Movemos el recordset al siguiente registro
            rts.MoveNext
            'Igualamos la CV1 nueva con la siguiente
            vNuevaCV1 = vSiguienteCV1
        Else
            'Si la diferencia entre las CV1 es mayor que 1 movemos el recordset al final
            rts.MoveLast
            'Damos valor a la CV1 correspondiente
            vNuevaCV1 = vSiguienteCV1 - 2
        End If
    Loop
    'Cerramos conexiones y liberamos memoria
    rts.Close
    dbs.Close
    Set rts = Nothing
    Set dbs = Nothing
    'Realizamos la asignacion de la CV1 segun la categoria
    Select Case vNuevaCategoria
        Case "Locomotora vapor"
            'Sumamos 1 a la CV1
            vNuevaCV1 = vNuevaCV1 + 1
        Case "Locomotora diesel"
            'Sumamos 1 a la CV1
            vNuevaCV1 = vNuevaCV1 + 41
        Case "Locomotora eléctrica"
            'Sumamos 1 a la CV1
            vNuevaCV1 = vNuevaCV1 + 81
        Case "Automotor diésel"
            'Sumamos 1 a la CV1
            vNuevaCV1 = vNuevaCV1 + 121
        Case "Automotor eléctrico"
            'Sumamos 1 a la CV1
            vNuevaCV1 = vNuevaCV1 + 161
        Case "Alta Velocidad"
            'Sumamos 1 a la CV1
            vNuevaCV1 = vNuevaCV1 + 201
        Case "Otros"
            'Sumamos 1 a la CV1
            vNuevaCV1 = vNuevaCV1 + 241
    End Select
    'Mostramos el valor de la CV1 en el formulario digital
    Forms!F_ModeloDigital!txtCV1 = vNuevaCV1
End Sub"

El problema lo tengo cuando se ejecuta la linea:

vSiguienteCV1 = "SELECT CV1 FROM T_ModeloDigital WHERE Referencia = vReferencia"

en el que me da siempre un error 13 de 'tipos no coincide'. He revisado las tablas y tienen el mismo tipo que las variables. El campo CV1 de la tabla indicada en el SELECT es de tipo Entero. el resto ya la veis en la rutina.

Lo mismo es una tonteria pero no atino y ya estoy digamos que bloqueado.

Un saludo y gracias
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Enlace directo a este mensaje Enviado: 20/Febrero/2025 a las 19:07
Tienes esto:
vSiguienteCV1 = "SELECT CV1 FROM T_ModeloDigital WHERE Referencia = vReferencia"

Y necesitas esto:
vSiguienteCV1 = "SELECT CV1 FROM T_ModeloDigital WHERE Referencia = " & vReferencia

Edito: se asume que vReferencia es un numérico entero. Si no fuera así, delimita con '
vSiguienteCV1 = "SELECT CV1 FROM T_ModeloDigital WHERE Referencia = '" & vReferencia & "'"


Observa la colocación de las comillas. vReferencia es una variable del código y no la tabla T_ModeloDigital.

Prueba y cuentas.

Un saludo


Editado por xavi - 20/Febrero/2025 a las 19:09
Xavi, un minyó de Terrassa

Mi web
Arriba
JoseraGR Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 06/Octubre/2020
Localización: Granada
Estado: Sin conexión
Puntos: 31
Enlace directo a este mensaje Enviado: 22/Febrero/2025 a las 14:10
Buenas

Pues me siguen dando el mismo tipo de error:

error 13 en tiempo de ejecución: no coincide los tipos.

Tengo declarada las variables de la siguiente forma:

vSiguienteCV1 --> Integer
vReferencia --> String

La tabla en la que hace la consulta la instrucción de SQL las variables están declaradas como:

CV1 --> Numero entero (supongo que esto corresponde con Integer)
Referencia --> Texto corto (supongo que esto corresponde con String)

Bueno pues a ver si alguien puede orientarme.

Un saludo y gracias


Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 22/Febrero/2025 a las 19:42
Sería interesante que pusiera la instrucción en la que te casca.


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

Access Aplicaciones
Tecsys.es
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Enlace directo a este mensaje Enviado: 23/Febrero/2025 a las 08:39
Vale, visto (eso me pasa por leer rápido)

No se puede asignar una sentencia SQL a una variable.

Para lo que pretendes creo que te vale con una función de dominio: DLookup

vSiguienteCV1 = DLookup("CV1", "T_ModeloDigital", "Referencia = '" & vReferencia & "'")

Nos cuentas que tal

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
JoseraGR Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 06/Octubre/2020
Localización: Granada
Estado: Sin conexión
Puntos: 31
Enlace directo a este mensaje Enviado: 28/Febrero/2025 a las 19:54
Buenas
Gracias xavi funciona. Aunque en si la rutina no hace exactamente el cometido que yo buscaba.
No se si en este mismo hilo puedo preguntaros si un RECORDSET se puede abrir utilizando una consulta, o solamente funciona con tablas??
Un saludo  
Arriba
JoseraGR Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 06/Octubre/2020
Localización: Granada
Estado: Sin conexión
Puntos: 31
Enlace directo a este mensaje Enviado: 28/Febrero/2025 a las 20:18
Buenas otra vez
Pues si lo acabo de comprobar y el RECORDSET lo puedo hacer sobre una consulta, con lo que he solucionado la forma de realizar la cuestión que buscaba.
Gracias por todo y un saludo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable