Reconocer cualquier dato como numero en access

Tengo una bd para controlar un stock, las bajas del stock son con pistola de código de barras en modo almacenaje(primero leo todos los códigos y luego se vuelcan al pc todos de golpe, sin posibilidad de camios), pero el problema que tengo es que cuando un código no existe suelta un error, eso lo he solucionado convirtiendo ese código a valor 0, pero si el código es texto o funciona, la fórmula que he utilizo es:

=SiInm(DBúsq("[CodigoProducto]";"PRODUCTOS";"[CodigoProducto]=" & [PL] & "");[PL];0)

Esto funciona si los datos son numéricos, pero con texto no, ¿tiene solución?

1 Respuesta

Respuesta
1

Si tengo una tabla Productos en que el campo Idcategoria(texto) tiene esos valores

Cuando voy a meter datos en el formulario

Esa categoría no está en la tabla. Al pulsar Enter

Cuando Acepto

Y el valor cero sigue siendo texto.

El código es

Private Sub IdCategoria_AfterUpdate()
If Nz(DCount("*", "productos", "idcategoria='" & Me.IdCategoria & "'")) = 0 Then
MsgBox "Imposible, esa categoría no existe", vbOKOnly, "Me convertiré en 0"
IdCategoria = 0
End If
End Sub

Lógicamente puedes eliminar lo de msgbox, puedes ponerle que se vaya al siguiente registro y que por tanto no grabe nada más en ese registro, etc.

como hago para ir al siguiente registro, perdona pero de código no tengo ni idea

En vista diseño del formulario seleccionas el control Idcategoria y en sus propiedades-Eventos haces clic en el rectángulo blanco de su derecha y entonces te aparecerán esos dos botones que ves a su derecha. Si haces clic en el de la punta de flecha hacia abajo se "abre" el combinado y eliges Procedimiento de evento y luego pulsas el botón de los tras puntos(...) y se abrirá el editor de VB y lo pones como

Le he quitado lo del mensaje. De forma que cuando escribas una categoría que no está, en este caso 9, donde puedes ver que estamos en el registro 6

Al pulsar Enter

Se va al 7. Escribo lo que tenga que escribir

Y me deja la tabla como

Aunque yo le pondría una línea más al código

docmd.runsql"delete * from productos where idcategoria=""0"""

Para que me borre aquellos registros en que idcategoría sea cero, porque ¿para qué van a estar si no tienen nada?

Me había olvidado, aunque escribas el IdCategoría como

El resultado es el mismo

Una duda mi campo es numérico, no es texto como pones y no puedo cambiarlo, ya que también lo utilizo para hacer unos cálculos, hay alguna instrucción que ejecute los campos texto y numéricos a la vez?

Vamos a ver. Si un campo es numérico es imposible que puedas guardar un valor texto.

El campo Idcategoria es numérico. Si escribo algo que tenga al menos una letra te saldría esto

Y pulso Enter, me sale lo que ves. Además si intento cerrar la tabla sin cambiar el valor me aparece

Aunque le diga que sí, me va a eliminar el registro.

Sin embargo, si el campo fuera texto podrías escribir números y hacer operaciones con ellos. Para eso hay multitud de funciones como Val, Cdec, etc.

el caso es que no quiero guardar ningún texto, el campo código producto es numérico, es así por que lo utilizo para hacer otros cálculos, y el tema era poder quitar las letras del código si estas se intentan introducir o asignar un 0 de forma automática,ya que lo uso con pistola de código de barras y siempre hay algún gracioso que se dedica a jugar con la pistola y le da a todo lo que ve

Perdona una ultima cosa, he cambiado el tipo de datos a texto y funciona perfectamente, solo me gustaría quitar en caso de que lo hubiera el 0 de la izquierda, ya que como he comentado trabajo con pistola de códigos de barras

por ej: 02500001222 que lo dejara como 25000012222, gracias de antemano

Si sólo va a tener un cero puedes hacer

Cuando pulso Enter, pero podría ser en otro evento

El código del evento despues de actualizar es

Private Sub Texto7_AfterUpdate()
Texto7 = Right(Texto7, Len(Texto7) - 1)
End Sub

no siempre tiene el cero, solo a veces, por eso también lo tenia numérico, no se como arreglarlo, gracias

Puedes poner

If left(texto7,1)="0" then

texto7=Right(Texto7, Len(Texto7) - 1)

end if

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas