Tengo un formulario donde registro instrumentos de medición con un combo donde tengo almacenadas las familias de unidades de medición por ejemplo MASA, PRESIÓN, LONGITUD... Y cada instrumento de medición tiene un campo con código alfanumérico por ejemplo la familia LONGITUD tiene el consecutivo L00001-L00002-L00003... Lo que quiero es cuando abra el formulario de registro de instrumentos de medición me traiga por defecto ese campo código consecutivo más uno (1); ósea que para la familia LONGITUD traiga el L00004
1 Respuesta
Respuesta de Neckkito Nck
1
1
Neckkito Nck, Access... ser o no ser. Esa es la cuestión
La solución óptima a lo que propones pasaría por modificar la estructura de tus tablas, de manera que dividieras el código que comentas en dos: uno tipo string y otro tipo numérico. Después unir los valores de ambos campos es algo muy sencillo. De esta manera: - Tendrías un campo numérico para operar con él cuanto quisieras de una manera muy cómoda, tanto para consultas como para código - Te evitarías hipotéticos problemas al tener un campo tan "importante" como un código mezclando tipos. Si el campo estuviera declarado como string, pero su valor fuera un número, Access automáticamente lo reconoce como número y te deja operar con él (y si no, con código, hacer eso es sólo una línea). Pero desde el momento que le añades una letra (esa L en tu caso), ya bloqueas toda posibilidad de operación numérica. Evidentemente sí se podría hacer lo que pides con código, pero, además de tener que programar en VBA deberías añadir códigos por todas partes para poder operar con el valor de ese campo. Eso es complicado y aumenta enormemente la posibilidad de que se produzcan errores. Dicho lo anterior espero tus comentarios para ver qué hacemos en función de lo que decidas.
Gracias experto Conozco el lenguaje VB pero nunca lo he probado en aceess se que tiene que ver con la creación de módulos pero no se como se llaman al formulario... Si sabes algo me seria de gran utilidad. Gracias
Tu pregunta, sin más datos, es un poco abierta para poderte dar detalles muy concretos. Así que te lo voy a explicar a través de un ejemplo: Supón que tienes un formulario con dos campos: - Campo Cod, que recoge el código (ese L00001) - Campo familia, que recoge el nombre de la familia Para añadir un nuevo registro vamos a insertar un botón de comando. A ese botón, al colocarlo en el formulario, le cancelamos el asistente. Hacemos click con el botón de la derecha, marcamos la opción "generar evento" y, en la nueva pantalla que te sale, le dices que quieres generar código. Se te abrirá el editor de VB con dos líneas: una de apertura que pone Private Sub comandox_Click() y otra de cierre que pone End Sub. Entre estas dos líneas tienes que añadir el siguiente código (esas líneas que te salen por defecto no las debes tocar, pero yo te las añado, aunque no sean exactamente iguales, para que te puedas ubicar) Te he marcado en negrita el nombre del campo Cod que te comentaba más arriba. Si, por ejemplo, tu campo se llamara Codig tendrías que cambiar lo que está en negrita por Codig. EL código es: --- Private Sub Comando4_Click() Dim vCod As String Dim vLetraCod As String Dim vNum As String Dim vLongitud As Long Dim vNumCeros As String vCod = Me.Cod.Value 'Saca la letra del código vLetraCod = Left(vCod, 1) 'Coge los 5 caracteres a contar desde la derecha vNum = Right(vCod, 5) 'Convierte esos caracteres en entero vNum = CInt(vNum) 'Le suma una unidad vNum = vNum + 1 'Comprueba la longitud del número resultante vLongitud = Len(vNum) 'Segun la longitud determina el número de ceros precedentes Select Case vLongitud Case 1 vNumCeros = "0000" Case 2 vNumCeros = "000" Case 3 vNumCeros = "00" Case 4 vNumCeros = "0" Case Else vNumCeros = "" End Select 'Crea la nueva numeración vNum = vLetraCod & vNumCeros & vNum 'Añade un nuevo registro DoCmd.RunCommand acCmdRecordsGoToNew 'Asigna el nuevo valor al campo Cod Me.Cod.Value = vNum End Sub --- Ahora ya tienes el código que te crea una numeración correlativa. En función de las necesidades que tengas puedes intentar adaptarlo a tu BD. Ante cualquier duda que tengas me comentas.