Cómo divido un campo con 8 digitos numéricos quitando el último y me lo muestre ese digito que quito en otro campo?

Tengo que realizar un sistema de cálculo de generador de numeración, de 8 digitos en el que el último dígito equivale a una posición y no puede ser mayor que 6 de lo contrario volvería a 0 . Es como el sistema numérico de los billetes aéreos, por lo que tengo un campo en una Tabla Access de 8 digitos numéricos y necesito quitar ese último digito de la derecha y me lo muestre en otro campo de una tabla . Para poder trabajar con ese dígito.

2 respuestas

Respuesta
1

Hola, Icue . Mil gracias . Yo uso Access 2013 . Y cuando ejecuto me sale el mensaje de arriba

La idea es que genere los campos cuando pones los 15 stocks que te los genere .

Aunque el código debería de ir . Te he mostrado como lo he puesto . Tal y como me lo has comentado . Pero como ves me pregunta el valor de numder.

Gracias por todo la verdad es que estaba confuso con el código anterior, el que me habías puesto en un comienzo . Pero me he fijado que si le pongo generar un número superior a 20 sucede ésto, que te adjunto en la imagen . Supongo que tiene que ver con la linea que cuenta después del For i= 1 to 3 etc...

Si te fijas en el campo "control" ya deja de contar del 1 al 6, y el problema es que de golpe debo generar hasta 100 boletos o a veces incluso 200, depende de los que te digan

Respuesta
1

Supongamos que los campos se llaman Completo y Último. Te aconsejaría que lo hicieras en Código. En el evento Después de actualizar del cuadro de texto Completo, crea un procedimiento de evento y entre Private Sub y End sub

Ultimo=right([completo],1)

O, si no quieres usar código, en la tabla añade el campo Ultimo y ponlo como calculado y en Expresión pon

Der([completo];1)

¡Gracias! 

Muchísimas Gracias . Pero te explico lo que tengo que hacer , igual me puedes prestar la ayuda completa , tengo que crear un número determinado de registros que le dan al cliente , es para el cálculo del stock aéreo . Las compañías te asignan un número y el stock disponible . Por ejemplo el 43324583 y te dicen que te dan 10 stock . el último dígito no puede ser superior a 6 (Va de 0 a 6 ) 

43324594,43324605,43324616, 43324620 etc y lo tengo que almacenar en una tabla para luego usar el número . Así funciona . 

Y gracias , de por adelantado Icue

No dices si el numero lo escribes tú o ya te viene escrito. Vamos a suponer primero que lo escribes tu, y vamos a suponer que el cuadro de texto donde lo escribes se llama Numero. En sus propiedades-eventos-Antes de actualizar crea un procedimiento de evento y entre Private Sub y End Sub pon

If Right([Numero], 1) > 6 Then
MsgBox "El último numero no puede ser mayor que 6", vbOKOnly + vbCritical, "¡Hay que prestar atención!"
DoCmd.CancelEvent
End If

Vamos a suponer que ya te viene escrito y lo que haces es insertarlo en una tabla Clientes

En la instrucción que le des para guardarlo en la tabla puedes poner

If Right([Numero], 1) > 6 Then
MsgBox "El último numero no puede ser mayor que 6", vbOKOnly + vbCritical, "¡Hay que prestar atención!"
DoCmd.CancelEvent

Else

docmd.runsql"insert into clientes(campoa,campob,....)values(.....)"
End If

O si lo que vas a insertar procede de otro sitio

Docmd.runsql"insert into clientes(campoa,campob, campoc,...) select Nombrecliente, direccion, telefono from otra tabla where .....

¡Gracias! Icue lo probaré y te cuento luego . Muchísimas gracias de veras . 

Prometido que te comento algo.

A ver Icue , gracias por tú ayuda , pero no va , del todo a ver .  A mi me da el primer número la compañía aérea que tiene 8 dígitos pero el último es el dígito de control . con lo cual podría quedar así 43324573 ok pues el último dígito lo apartamos en otro campo, puesto que cuenta diferente . Quedaría 4332457 y el dígito de control 3 . La compañía me da por ejemplo 15 stocks . Pues tengo que incrementar los dos campos en 15 , insertando cada serie numérica en cada campo . y además con contadores distintos el de control es el que me preocupa , porque cuenta siempre a partir del número que obtienes de apartarlo en éste caso el 3 , que contaría 3,4,5,6,0,1,2,3,4,5,6,0,1,2,3 hasta 15 , el otro número cuenta de manera normal incremental , los 15 , por lo que quedarían dos campos a unir  uno con 

4332457     3            4332464   3          433471   3

4332458     4            4332465   4       

4332459     5            4332466    5 

4332460     6            4332467    6

4332461     0            4332468     0

4332462     1            4332469     1

4332463     2            4332470     2

así tendrían que quedar los dos campos , con sus registros insertados (Campo Número Inicial;Campo digitodecontrol)

Y tiene que automatizarse el ingreso de los registros 

Dejo por sentado que no sé como trabajáis, por eso pongo este ejemplo. Supongamos que tengo la tabla Billetes con los campos que ves en la imagen

El campo Numcontrol es un campo calculado ver imagen

Si tengo un formulario, que como no sé lo que tienes lo he puesto independiente y anoto el numero que te dan

Lo de numder es para que te ponga el numero de la derecha, en este caso un 3 . En el código del botón le pongo

Si lo pulso, la tabla me queda como

Que es lo que querías y es válido para cualquier numero. Si luego escribiera 12345675 y pulsara el botón, me añadiría los registro nuevos a la tabla

Como te dije, en el formulario yo le añadí un cuadro de texto Independiente al que en sus propiedades-otras nombre Numder

De todas formas, si quieres, repito si quieres, mándame un mensaje(sólo el mensaje) y te mando el ejemplo. Si lo haces, en el asunto del mensaje pon tu alias Cecilio García ya que si no sé quien me escribe ni los abro.

¡Gracias! 

Gracias Icue, perdona funciona genial . Eres un crack . Aunque lo único que me falta es saber como hago para que realice las repeticiones en función del valor del número de stock . Porque claro, ahí tienes en el ejemplo que te comenté que son 15 , pero puede ser un número cualquiera . ¿Cómo lo haría?

Me ha faltado comentarte lo de que incluya el número de la compañía son tres dígitos , que irían separados por un guión tal que así 075-44323893 , es que realmente es así . Y gracias por tú Ayuda de ante mano Icue. 

Y la verdad es que se me ha olvidado lo de comentarte lo del número de compañía , debe de ir acompañado delante de los 3 dígitos del número de la compañía . Y se tienen que repetir tantas veces como registros , claro . Son tres números 457,075,895,etc .

Quedaría el número de conocimiento tal que así 457-44323893 por ejemplo , gracias y disculpa .

Como no sé donde aparece ese número de compañía, modifico la tabla añadiéndole un campo Compañía, y en el campo calculado lo pongo como en la imagen

En el formulario le añado el cuadro de texto NumDer el cuadro de texto Escribe el numero de billetes para que pongas los que quieres, como en la imagen

Si pulso el botón la tabla me queda como

El código es

¡Gracias! 

Hola Entiendo que el campo donde pone número completo es el campo "Numero" y el que pone Nº de Billetes es el del Stocks no?. Es que debo de haber puesto algo mal , porque me da error en :

For i = 1 To Stocks
DoCmd.RunSQL "Insert intro Genstocks (Numero,Control,Compañia)Values (" & Left([Numero], 7) & "+" & i & "-1," & numder & "+" & i & "-1,'" & Me.Compañia & "')"
Next

me pone error en numder, y lo he revisado varias veces veo que lo tengo igual que me has puesto . 

¿Pero has mirado en sus Propiedades-Otras-Nombre si pone Numder?

¡Gracias! 

Si he visto las propiedades pone numder , en el caso anterior que te he preguntado era eso , pero ya lo solucioné , el problema viene justo ahí, es raro .

Te voy a adjuntar tal cual lo tengo 


Private Sub BotonGenerar_Click()
DoCmd.SetWarnings False
Dim i As Byte
For i = 1 To NúmeroDeStocks
DoCmd.RunSQL "Insert intro Gen_Stock_Aéreo (Número,Control,Compañia)Values (" & Left([Número], 7) & "+" & i & "-1," & Numder & "+" & i & "-1,'" & Me.Compañia & "')"
Next
For i = 1 To 7
DoCmd.RunSQL "Insert Intro Gen_Stock_Aéreo set control=" & i & " -1 Where control=" & i & "+6"
Next
For i = 1 To 3
DoCmd.RunSQL "Insert Intro Gen_Stock_Aéreo set control=" & i & " -1 Where control=" & i & "+13"
Next
End Sub
Private Sub Número_AfterUpdate()
Numder = Right([Número], 1)
NúmeroDeStocks.SetFocus
End Sub

Ese es el Código , que le tengo puesto 

y te adjunto una vista de la tabla y el formulario

Gracias ante todo , por tú paciencia . 

Si la instrucción la has escrito aquí tal como la has puesto hay muchos errores. Así, a bote pronto

1º No es insert intro sino insert into

2º No es insert into...set la palabra set se utiliza con la instrucción Update. Ten en cuenta que le estás diciendo inserta en la tabla... y aquí tienes que decirle donde lo inserta(campo) y que es lo que tiene que insertar

3º Tanto de i=1 to 7 como i=1 to 3 no es insert into sino update

Etc

Pregunto ¿De verdad has mirado el código que te puse?

¡Gracias!  Y siento las molestias , el caso es que estaba confundido con el mensaje anterior . Y no lo coloqué bien .  Una consulta , cuando colocas más de 20 o 30 depende , el contador del campo de control cambia y comienza a contar mal, y el caso es que me suelen dar más de una vez , más de 100 boletos o plazas , para calcular . ¿Se podría ajustar? . De todas formas te envío una imagen para que lo veas . 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas