|
Responder
|
| Autor | |
JoseraGR
Nuevo
Unido: 06/Octubre/2020 Localización: Granada Estado: Sin conexión Puntos: 31 |
Tema: Fallo en ejecucion de consulta SQLEnviado: 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
|
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
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 = " & vReferenciaEdito: 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 |
|
![]() |
|
JoseraGR
Nuevo
Unido: 06/Octubre/2020 Localización: Granada Estado: Sin conexión Puntos: 31 |
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 |
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 22/Febrero/2025 a las 19:42 |
|
Sería interesante que pusiera la instrucción en la que te casca.
|
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
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
|
|
![]() |
|
JoseraGR
Nuevo
Unido: 06/Octubre/2020 Localización: Granada Estado: Sin conexión Puntos: 31 |
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
|
|
![]() |
|
JoseraGR
Nuevo
Unido: 06/Octubre/2020 Localización: Granada Estado: Sin conexión Puntos: 31 |
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
|
|
![]() |
|
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |