Cómo genero una tabla de números aleatorios de tres cifras positivos y que se visualicen en un for?

Necesito agregar una columna a mi tabla donde se guarden, en cada campo, un número de tres cifras que se genere, previamente, de forma aleatoria. Y que a su vez, se pueda visualizar en un formulario antes de guardar el registro.

2 respuestas

Respuesta
1

Esta función te permite obtener un numero aleatorio de 3 o 4 cifras, con dígitos repetidos o no en el número:

Public Function GeneraNros(IntCifras As Integer, IntPacha As Integer) As String' Función para generar números aleatorios

' Parámetros: IntCifras -->> Número de cifras o dígitos a generar por lo regular 3 o 4

' IntPacha ----> 1= Con Pachas 2= Sin pachas

' Retorna: Cadena de un número de 3 o 4 dígitos ' Elaborado Por: Eduardo Pérez Fernández ' Fecha: 02/09/2003'Dim intNro As Integer ' variable para guardar un número aleatorio

Dim por As Integer ' variable contador

Dim aux As String ' variable de cadena para ir guardando los dígitos

Dim aux2 As String

Dim uno, dos, tres, cuatro As String

Dim lnPachas As String

Dim miNro As StringIf IntPacha = 1 Then

For por = 1 To IntCifras Randomize intNro = Int(10 * Rnd) aux = aux & LTrim(RTrim(Str(intNro))) Next por

Else ' Sin Pachas

For por = 1 To IntCifras Randomize intNro = Int(10 * Rnd)

miNro = LTrim(RTrim(Str(intNro))) aux = aux & miNroIf Len(aux) = 4 And IntCifras = 4 Then

uno = Mid(aux, 1, 1)

dos = Mid(aux, 2, 1)

tres = Mid(aux, 3, 1)

cuatro = Mid(aux, 4, 1)

If uno = dos Then

por = por - 3

aux = Mid(aux, 1, 1)

ElseIf dos = tres Then

por = por - 2 aux = Mid(aux, 1, 2)

ElseIf tres = cuatro Then

por = por - 1 aux = Mid(aux, 1, 3)

End If

ElseIf Len(aux) = 3 And IntCifras = 3 Then

uno = Mid(aux, 1, 1)

dos = Mid(aux, 2, 1)

tres = Mid(aux, 3, 1)

If uno = dos Then

por = por - 2 aux = Mid(aux, 1, 1) ElseIf dos = tres Then por = por - 1 aux = Mid(aux, 1, 2) End If

End IfNext por End IfGeneraNros = aux

End Function

Ej. Parta obtener un número al azar de 3 cifras permitiendo que el número tenga dígitos contiguos repetidos (como 114, 255, 300 etc) llame la función así:

GeneraNros(3,1)

Puedes crear una tabla con un campo texto, indexado sin repetidos, para ir registrando los números obtenidos con la función. Esta función la uso para asignar números en boletas de rifas.

Hola, Eduardo:

Muchas gracias por el código. Tengo una gran duda: ¿cómo hago para que se visualice el número de 3 cifras en un formulario antes de que se guarde en un campo de una tabla?

Saludos.

El código me da fallos en varias líneas :(

Saludos.

Lamento te de fallos en unas líneas seguro algo está mal digitado, envíame tu email para suministrarte el código y un ejemplo. Así lo puedes entender mejor.

Ahora, para visualizar los 3 números en un formulario create un campo tipo label (Texto) por ejemplo, supongamos que el campo label se llama lbl1 entonces al obtener las 3 cifras puedes agregar esta línea donde se genera el evento.

me.lbl1.caption=GeneraNros(3,1)

Espero entiendas, de todas maneras lo mejor es suministrando un ejemplo a tu correo. Una pregunta ¿de qué país haces la consulta?

Empecemos de 0 (que estoy haciendo un montón de pruebas y ya estoy perdido).
El objetivo es que en un formulario se muestre, en un elemento, una cifra de tres números positivos (llamémosles "numeritos"). Todo esto antes de guardar un registro: esos números se guardarán en una tabla.
Y que a su vez haya un control para que no se repitan por día; es decir, que en una fecha determinada no puedan haber "numeritos" repetidos, iguales.
¿Es posible?
Tengo conocimientos básicos de VB :)

La consulta la hago desde España.


Saludos.

Sencillo. Necesitas que la tabla donde se guarde el número tenga 2 campos esenciales y son, fechaNro y NroAleatorio, debes crear un índice con los 2 campos SIN repetidos, ahora, en el formulario llamas la función que te envíe, generas los números y los guardas en la tabla. En el formulario debes crear un evento AlOcurrirError o algo similar en donde determine si Err=3022 entonces ya existe el número para este día, en caso contrario no pasa nada.

Otra forma es antes de guardar el número en la tabla, hacer una función que devuelva un valor tipo Booleam al validar, si ya existe el número para esta fecha, esto se hace mediante SQL. Una pregunta ¿ya probaste la función?

Te pedi tu email para enviarte un ejemplo.

Disculpa, me olvidé del mail que es: [email protected]

Probé el código pero me pierdo en varias líneas. Que a su vez están dando error :(

Saludos.

Revisa tu correo, te preparé un ejemplo.

Respuesta
1

puedes poner como valor predeterminado un =format$(rnd(),"000") y así te lo creará cuando crees el registro. No es la mejor manera pero creo que es la forma más sencilla de explicar. Si sabes un poquito de VBA te puedo echar una mano a hacerlo de una forma más "decente" ;)

Hola:


Muchas gracias por el código. Tengo una gran duda: ¿cómo hago para que se visualice el número de 3 cifras en un formulario antes de que se guarde en un campo de una tabla?


Saludos.

Tengo este código, pero no me funciona. Tampoco sabría que elemento utilizar para visualizarlo en un formulario:

Public Function GeneraNros(IntCifras As Integer, IntPacha As Integer) As String ' Función para generar números aleatorios
' Parámetros: IntCifras -->> Número de cifras o dígitos a generar por lo regular 3 o 4
' IntPacha ----> 1= Con Pachas 2= Sin pachas
' Retorna: Cadena de un número de 3 o 4 dígitos '
Dim intNro As Integer ' variable para guardar un número aleatorio
Dim por As Integer ' variable contador
Dim aux As String ' variable de cadena para ir guardando los dígitos
Dim aux2 As String
Dim uno, dos, tres, cuatro As String
Dim lnPachas As String
Dim miNro As StringIf IntPacha = 1 Then
For por = 1 To IntCifras Randomize intNro = Int(10 * Rnd) aux = aux & LTrim(RTrim(Str(intNro))) Next por
Else ' Sin Pachas
For por = 1 To IntCifras Randomize intNro = Int(10 * Rnd)
miNro = LTrim(RTrim(Str(intNro))) aux = aux & miNroIf Len(aux) = 4 And IntCifras = 4 Then
uno = Mid(aux, 1, 1)
dos = Mid(aux, 2, 1)
tres = Mid(aux, 3, 1)
cuatro = Mid(aux, 4, 1)
If uno = dos Then
por = por - 3
aux = Mid(aux, 1, 1)
ElseIf dos = tres Then
por = por - 2 aux = Mid(aux, 1, 2)
ElseIf tres = cuatro Then
por = por - 1 aux = Mid(aux, 1, 3)
End If
ElseIf Len(aux) = 3 And IntCifras = 3 Then
uno = Mid(aux, 1, 1)
dos = Mid(aux, 2, 1)
tres = Mid(aux, 3, 1)
If uno = dos Then
por = por - 2 aux = Mid(aux, 1, 1) ElseIf dos = tres Then por = por - 1 aux = Mid(aux, 1, 2) End If
End IfNext por End IfGeneraNros = aux
End Function

Saludos.

puedes ponerlo en un label...

Randomize timer

label=format$(rnd(),"000")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas