Problema con autonumerico: |
Responder |
Autor | |
01loko
Colaborador Unido: 17/Agosto/2017 Localización: Santander Estado: Sin conexión Puntos: 807 |
Tema: Problema con autonumerico: Enviado: 12/Abril/2020 a las 12:11 |
Buenos dias: Estoy intentando usar una funcion creada por Emilio hace años: '*********************************************************************************** '* Función que calcula el valor máximo de una tabla y un campo pasados como parámetros '* uso: AutoNumerico("Pendientes","id") '* ESH 09/09/00 15:50 '*********************************************************************************** Public Function AutoNumerico(strTabla As String, strCampo As String) As Integer Dim dbs As Database, _ rst As Recordset, _ strMaximo As String ' creo una cadena con la select para obtener el valor más alto del campo strMaximo = "SELECT Max(" & strCampo & ") as Mayor FROM " & strTabla Set dbs = CurrentDb Set rst = dbs.OpenRecordset(strMaximo) ' abro un recordset con esa cadena If IsNull(rst!Mayor) Then AutoNumerico = 1 ' si la tabla está vacía Else AutoNumerico = rst!Mayor + 1 ' devuelvo el valor incrementado en uno End If ' cierro el recordset rst.Close Set rst = Nothing Set dbs = Nothing End Function ' AutoNumerico donde strcampo=referencia, numerico y con esta extructura: strtabla es la tabla , vinculada, desde otro access. me devuelve un error 13 de "Error de coincidencia de tipos" en la linea en rojo. haciendo pruebas me he dado cuenta que si escribo un debug.print dbs en el panel de inmediato, me lanza el error (creo que debiera dar el nombre de la base, pero no lo se seguro). Este codigo tiene años, estoy usando access 2013 aunque la base es mdb (por alguna extraña razon me gusta mas). Como supongo que Emilio despues de los años que lleva en esto no va a cometer errores, mi pregunta es ¿alguna incompatibilidad conocida? Como siempre gracias por adelantado.
|
|
Recordar de que soy nuevo y estoy aprendiendo.
|
|
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
Enviado: 12/Abril/2020 a las 13:36 |
Hola!
Acabo de probar el código con una tabla vinculada y funciona correctamente. |
|
Un Saludo.
|
|
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: 14720 |
Enviado: 12/Abril/2020 a las 13:51 |
¿Puedes poner los valores exactos de strCampoy strTabla?
Por otro lado intenta declara dbs como DAO.Database y rst como DAO.Recordset (por si las moscas) |
|
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 12/Abril/2020 a las 15:56 |
Un par de apuntes: Si no coinciden los tipos, asegurate que en la parte strMaximo = "SELECT Max(" & strCampo & ") as Mayor FROM " & strTabla No lo he comprobado, pero mira que strCampo se refiera a un campo numérico y no a uno de texto para de la función Max no se queje
Editado por Dabellaso - 12/Abril/2020 a las 16:00 |
|
El saber no ocupa lugar, sólo tiempo
|
|
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: 13990 |
Enviado: 12/Abril/2020 a las 16:23 |
Otra opción:
|
|
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 12/Abril/2020 a las 17:05 |
Estoy probando y cuando dije que strCampo se refiera a un campo numérico y no a uno de texto para de la función Max no se queje, olvídalo, Max también funciona con campos de texto (siempre y cuando estos contengan únicamente números). Pero tanto con campo numérico como con campo de texto(con valores números), me genera otros errores He duplicado la consulta generada directamente en el editor de consultas y a priori me genera error que que el campo no forma parte de la función de agregado, he probado haciendo una consulta de totales y funciona bien. Depués hice consulta de selección nuevamente y ahora funciona. No entiendo por que. Estoy viendo el código de Mihura que me parece super interesante, a ver si logro entenderlo y aplicarlo correctamente. Gracias Mihura
|
|
El saber no ocupa lugar, sólo tiempo
|
|
01loko
Colaborador Unido: 17/Agosto/2017 Localización: Santander Estado: Sin conexión Puntos: 807 |
Enviado: 12/Abril/2020 a las 20:41 |
Vamos despacio, pasado este codigo strMaximo = "SELECT Max(" & strCampo & ") as Mayor FROM " & strTabla
el resultado, pasado a una consulta directamente, funciona y da el resultado correcto. Aqui me señala el error. |
|
Recordar de que soy nuevo y estoy aprendiendo.
|
|
Dabellaso
Asiduo Unido: 18/Noviembre/2012 Localización: España Estado: Sin conexión Puntos: 338 |
Enviado: 12/Abril/2020 a las 21:31 |
En mi caso que comente antes, me di cuenta de que al principio escribí mal mis campos, por eso me daba errores. Ahora me funciona y el error de que no coinciden los tipos, me lo daba en otra linea (por intentar sumar números a letras letra). No sé que decir. Voy a intentar reproducir el error 13 en esa linea
|
|
El saber no ocupa lugar, sólo tiempo
|
|
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
Enviado: 12/Abril/2020 a las 22:06 |
Hola!
Crea una nueva base de datos e importa todos los datos de tu anterior base de datos. A veces funciona por tener la base limpia. |
|
Un Saludo.
|
|
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: 14720 |
Enviado: 12/Abril/2020 a las 22:28 |
¿Has probado lo que te indiqué en mi primer mensaje en este hilo?
Si tienes marcadas las referencias Microsoft ActiveX Data Objects x.x Library y alguna de DAO por debajo de ella, al declarar Database y Recordset sin prefijo, interpretará ADO en lugar de DAO. En cualquier caso, la función es sustituible por esto: Nz(DMax("referencia", "general"), 0)+1 Me consta que, como dijiste en otro hilo, lo haces por aprender así que pongo la alternativa solo a modo de ejemplo de que las cosas se pueden hacer de varias formas. Un saludo
|
|
01loko
Colaborador Unido: 17/Agosto/2017 Localización: Santander Estado: Sin conexión Puntos: 807 |
Enviado: 13/Abril/2020 a las 09:53 |
Buenos dias señores: Una vez realizadas las pruebas propuestas (Incluida la de Xavi), me seguia dando el error, pero , me di cuenta que algunas veces no lo daba (¿?), en una de las pruebas que he realizado en vez de in end if escribi por error edn if, hice correr el codigo y cosa curiosa, no daba el error de codigo erroneo (de nuevo ¿?). Tras trastear por google sobre el tema, decido pasar todos los formularios, codigo y demas, a otra base en blanco, ¡e voila! ahora funciona todo. Lo que me lleva a pensar que de alguna manera, la base se habia corrompido y me estaba haciendo cosas raras. Como esto de una base en mal estado, me ha ocurrido varias veces (aunque lo normal es que de errores al abrir) mi pregunta al aire es: Suelo trabajar desde pen-drive, ya que lo hago en diversos entornos (Fijo de casa u oficina, portatil) mi pregunta es ¿No supondra una fuente de errores dicho dispositivo? (en otra pregunta que realice hace algun tiempo, pregunte sobre tener el back-end en drowbox o similar, ya que me averiaba constantemente la base, me respondieron que es imposible) ¿No ocurrira algo parecido con el pen-drive? Muchas gracias por la ayuda a todos, por mi parte se puede cerra el hilo, salvo que alguien quiera comentar algo nuevo. |
|
Recordar de que soy nuevo y estoy aprendiendo.
|
|
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: 13990 |
Enviado: 13/Abril/2020 a las 10:18 |
Para evitar errores de tecleo, falta de declaración de variables, etc .... tienes que forzar su 'buen uso' incluyendo en todos los formularios / informes / modulos la opción:
Option Explicit Justo después de Option Compare Database. Y además compilar el código después de cada cambio, yo tengo juntos los botones de compilar y guardar de forma que cada cambio que hago primero compilo y después guardo (así me cubro de posibles sorpresas con los cierres inesperados y pérdidas de trabajo). |
|
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: 14720 |
Enviado: 13/Abril/2020 a las 11:26 |
Nota: para no tener que teclear cada vez Option Explicit, ves a Herramientas/Opciones del editor de VBA, y en la pestaña editor, marca la segunda casilla (Requerir declaración de variables). De esa forma ya aparecerá automáticamente en cada nuevo módulo.
Jesús, no se me había ocurrido poner el botón al lado... tengo tan interiorizado Alt+D+intro después de cada cambio que no se me había ocurrido. Lo pondré igualmente
|
|
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: 13990 |
Enviado: 13/Abril/2020 a las 11:31 |
Lo de que lo ponga automáticamente yo ya lo tengo hecho, lo que no había es 'pensado' en ponerlo aquí', ... como digo en otro hilo, necesito salir a tomar el fresco ...
Otra cosa es que muchísima gente no lo pone, ni compila, ... eso se ve (se sufre) cuando tocas cosas de otra gente .
|
|
01loko
Colaborador Unido: 17/Agosto/2017 Localización: Santander Estado: Sin conexión Puntos: 807 |
Enviado: 16/Enero/2021 a las 13:08 |
este hilo se puede cerrar.
El error, como comente en algún momento, fue de que cambien el nombre de un campo por otro (acentuado, si no recuerdo mal)
|
|
Recordar de que soy nuevo y estoy aprendiendo.
|
|
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 |