Combo box y textbox aleatorio ¿Cómo puedo que me muestre solo un dato después de los combobox dependientes?
Espero me pueden apoyar, tengo un formulario con los siguientes combobox dependientes, Producto, Ubicación, Conectividad, Aplicación y Modelo y 2 textbox Proveedor y Cantidad. Mi punto es que requiero que un proveedor salgo definido en el textbox aleatoriamente (tengo hasta 5 proveedores) y no logro como hacerlo me podrían apoyar..
1 Respuesta
Geovany: Al ignorar la forma en que tienes montada tu tabla de Proveedores, te doy la idea y creo que no tendrás dificultades en aplicarla, suponiendo que te manejas en VBA.
En el AfterUpdate de tu Combo Producto, generas un aleatorio del 1 al 5 con la Función Rnd.
Guardas ese valor en una variable que por ejemplo puedes llamar >> ProvAleatorio.
Supongamos además que tu TextBox de Proveedor, se llama TxtProveedor.
Como lína para mostrar el proveedor le pones algo así:
Me.TxtProveedor = "SELECT NombreProveedor FROM Proveedores WHERE IdProveedor = " & ProvAleatorio
Ya me contarás. Mis saludos >> Jacinto
Muchas gracias Estimado por tu tiempo. Pero aun no logro funcionar este formulario
Mi tabla comprende de los siguientes campos
IdProveedor
Producto
Aplicación
Categoría (Conectividad)
Proveedor
Modelo
Ubicación(plaza)
Cantidad
Requiero de que el proveedor salga de manera automática después de seleccionar los combos anteriores,( no siempre saldrá 5 proveedores de acuerdo a la zona sino depende de la disponibilidad de acuerdo a la plaza)
El código que realice fue el siguiente
ProvAleatorio = Int((5 * Rnd) + 1)
Me.Proveedor = "SELECT Proveedor from Equipo_Disponible WHERE IdProveedor =" & ProvAleatorio
Y continua sin aparecer solo un proveedor
Espero me pueda ayudar. Muchas Gracias
Geovany: La explicación que das es clara sobre como tienes tu Tabla, que supongo es la que citas en la Selección, o sea Equipo_Disponible.
Si admites que "no siempre Saldrán 5 Proveedores..."
La Función general para aleatorios es :
Rnd (Función)
Int((NumeroMayor - NumeroMenor + 1) * Rnd + NumeroMenor)
De modo que lo que haces con esa Función ya está bien. Otra cosa es que retomando lo de arriba y si solo tienes 2 proveedores disponibles con Id = 2 e Id = 3 y el Aleatorio te devuelve 5, no te tomará ningún Proveedor. Supongo que el Proveedor tiene un Origen de Fila y te devuelve los que encuentra.
De ese modo, el aleatorio lo deberías generar dentro del Rango de números disponibles, pero si los tienes "No correlativos", mal asunto porque ese proceso será muy inseguro.
Mira si con ésta guía puedes salir y si no es así debería de ver tu BD. Mis saludos >> Jacinto
Geovany: Me refiero a lo siguiente y te lo comento con un Ejemplo.
En lo que veo arriba de tu Formulario, donde hay Producto = TPVRetail
Supongamos que después de actualizarlo tienes disponibles los proveedores 1,2 y 3 y que el Aleatorio te genera un 5. Lógicamente no te selecconará nada.
Tal como te comentaba arriba, si conocer los Objetos y su relación en tu BD, es dificil seguir sugiriendo posibles soluciones un poco a ciegas.
Ejemplo: ¿Cómo sabes que vas a disponer de 2 o de 5 Proveedores para elegir 1?.
¿Cómo identificas a eso proveedores?. Te apuntaba la posibilidad de que cuelgues tu BD aquí con datos que no sean reales y así la ayuda sería más eficaz. Mis saludos >> Jacinto
Option Compare Database Dim Sql As String Dim vendor As String Private Sub Aplicacion_AfterUpdate() Forms!Equipo_Disponible!Modelo = Null 'Forms!Equipo_Disponible!Ubicacion = Null Text10.Value = "" 'Set SubForm = Forms!Equipo_Disponible!Ubicacion 'With SubForm.Requery 'End With 'Forms!Equipo_Disponible!Modelo = Null Set SubForm = Forms!Equipo_Disponible!Modelo With SubForm.Requery End With End Sub Private Sub Combo29_AfterUpdate() If Combo29 = "TPV Retail" Then DoCmd.OpenQuery "Actualiza_Prod_1" ElseIf Combo29 = "TPV Retail MIT" Then DoCmd.OpenQuery "Actualiza_Prod_2" ElseIf Combo29 = "Super Cobros Plus" Then DoCmd.OpenQuery "Actualiza_Prod_3" ElseIf Combo29 = "Centro de Pagos" Then DoCmd.OpenQuery "Actualiza_Prod_4" ElseIf Combo29 = "TPV Escuelas MIT" Then DoCmd.OpenQuery "Actualiza_Prod_5" ElseIf Combo29 = "TPV Restaurantes" Then DoCmd.OpenQuery "Actualiza_Prod_6" ElseIf Combo29 = "TPV Restaurantes MIT" Then DoCmd.OpenQuery "Actualiza_Prod_7" ElseIf Combo29 = "Super Cobros Plus Restaurantes" Then DoCmd.OpenQuery "Actualiza_Prod_8" ElseIf Combo29 = "Centros de Pagos Restaurantes" Then DoCmd.OpenQuery "Actualiza_Prod_9" ElseIf Combo29 = "TPV Hoteles" Then DoCmd.OpenQuery "Actualiza_Prod_10" ElseIf Combo29 = "Super Cobros Plus Hoteles" Then DoCmd.OpenQuery "Actializa_Prod_11" ElseIf Combo29 = "Centro de Pagos Hoteles" Then DoCmd.OpenQuery "Actualiza_Prod_12" 'ElseIf Combo29 = "MiTPV" Then 'DoCmd.OpenQuery "Actualiza_Prod_13" ElseIf Combo29 = "TPV Hoteles MIT" Then DoCmd.OpenQuery "Actualiza_Prod_14" End If Forms!Equipo_Disponible!Aplicacion = Null Forms!Equipo_Disponible!Modelo = Null Forms!Equipo_Disponible!Ubicacion = Null Forms!Equipo_Disponible!Proveedor = Null Forms!Equipo_Disponible!Combo39 = Null Text10.Value = "" 'Dim ProvAleatorio 'ProvAleatorio = Int((5 * Rnd) + 1) 'Me.Proveedor = "SELECT Proveedor from Equipo_Disponible WHERE IdProveedor =" & ProvAleatorio 'Set SubForm = Forms!Equipo_Disponible!Proveedor 'With SubForm.Requery 'End With 'Set SubForm = Forms!Equipo_Disponible!Ubicacion 'With SubForm.Requery 'End With End Sub Private Sub Combo29_BeforeUpdate(cancel As Integer) DoCmd.OpenQuery "Limpia_Equip_Disp" End Sub Private Sub Combo29_LostFocus() 'Set SubForm = Forms!Equipo_Disponible!Combo39 'With SubForm.Requery 'End With End Sub Private Sub Combo39_AfterUpdate() Forms!Equipo_Disponible!Proveedor = Null Forms!Equipo_Disponible!Aplicacion = Null 'Forms!Equipo_Disponible!Modelo = Null 'Forms!Equipo_Disponible!Ubicacion = Null Text10.Value = "" 'Set SubForm = Forms!Equipo_Disponible!Combo39 'With SubForm.Requery 'End With Set SubForm = Forms!Equipo_Disponible!Aplicacion With SubForm.Requery End With 'Set SubForm = Forms!Equipo_Disponible!Proveedor 'With SubForm.Requery 'End With End Sub Private Sub Combo39_Click() 'Me.Combo39.RowSource = "SELECT Proveedor.Equipo_Disponible, " _ & "FROM Equipo_Disponible" _ & "ORDER BY Proveedor.Equipo_Disponible " 'Me.Combo39.Requery End Sub Private Sub Combo39_GotFocus() Set SubForm = Forms!Equipo_Disponible!Combo39 With SubForm.Requery End With End Sub Private Sub Command30_Click() Text31.Enabled = True If Me.Text35 < 0 Then DoCmd.OpenForm "MensajeNo" ElseIf Me.Text35 = Null Then Cmd.OpenForm "MensajeVacio" ElseIf Me.Text35 > 0 Then DoCmd.OpenQuery "Resta_varios_Equipo_Disponible" DoCmd.Close DoCmd.OpenForm "Confirma_asignacion_Realizada" ElseIf Me.Text35 = 0 Then DoCmd.OpenQuery "Resta_varios_Equipo_Disponible" DoCmd.Close DoCmd.OpenForm "Confirma_asignacion_Realizada" End If End Sub Private Sub Command30_GotFocus() Text35 = Text10 - Text31 If Text31 = Null Then Cmd.OpenForm "MensajeVacio" End If End Sub Private Sub Form_GotFocus() Set SubForm = Forms!Equipo_Disponible!Text10 With SubForm.Requery End With End Sub Private Sub Form_Open(cancel As Integer) Command14.Enabled = False Command30.Enabled = False Text31.Enabled = False End Sub Private Sub Form_Timer() DoCmd.Close acForm, Me.Name End Sub Private Sub Label12_Click() End Sub Private Sub Modelo_AfterUpdate() Set SubForm = Forms!Equipo_Disponible!Modelo With SubForm.Requery End With ProvAleatorio = Int((5 * Rnd) + 1) Me.Proveedor = "SELECT Proveedor from Equipo_Disponible WHERE IdProveedor = " & ProvAleatorio 'End If 'SELECT Modelos.id_marca, Marcas.marca, Modelos.id_tipo, Tipos.tipo, Modelos.id_modelo, Modelos.modelo " _ ' & "FROM (Modelos INNER JOIN Marcas ON Modelos.id_marca=Marcas.id_marca) INNER JOIN Tipos ON Modelos.id_tipo=Tipos.id_tipo " 'SELECT Equipo_Disponible.Proveedor 'FROM Dealer_vendors INNER JOIN Equipo_Disponible ON Dealer_vendors.Ubicacion = Equipo_Disponible.Ubicacion 'Set SubForm = Forms!Equipo_Disponible!Text10 'With SubForm.Requery 'Set SubForm = Forms!Equipo_Disponible!Ubicacion 'With SubForm.Requery 'End With 'End With 'Forms!Equipo_Disponible!Ubicacion = Null 'Text10.Value = "" End Sub Private Sub Modelo_Click() Set SubForm = Forms!Equipo_Disponible!Text37 With SubForm.Requery End With End Sub Private Sub Text10_BeforeUpdate(cancel As Integer) End Sub Private Sub Ubicacion_AfterUpdate() Set SubForm = Forms!Equipo_Disponible!Ubicacion With SubForm.Requery 'Set SubForm = Forms!Equipo_Disponible!Modelo 'With SubForm.Requery End With 'End With Set SubForm = Forms!Equipo_Disponible!Combo39 With SubForm.Requery End With 'Forms!Equipo_Disponible!Modelo = Null 'Set SubForm = Forms!Equipo_Disponible!Modelo 'With SubForm.Requery 'End With End Sub Private Sub Proveedor_AfterUpdate() Set SubForm = Forms!Equipo_Disponible!Text10 With SubForm.Requery End With Command14.Enabled = True Command30.Enabled = True Text31.Enabled = True 'Forms!Equipo_Disponible!Aplicacion = Null Text10.Value = "" 'Set SubForm = Forms!Equipo_Disponible!Aplicacion 'With SubForm.Requery 'End With End Sub Private Sub Ubicacion_LostFocus() Set SubForm = Forms!Equipo_Disponible!Combo39 With SubForm.Requery End With End Sub tABLA 1 EQUIPO_DISPONIBLE Id Aplicación Proveedor Modelo Ubicacion Cantidad Categoria3 Categoria4 Proveedor Categoria 1 DUAL DIAL UP INGENICO ICT220 PUEBLA 50 DIAL UP 1 2 DUAL DIAL UP INGENICO ICT220 QUERETARO 1 DIAL UP 1 3 DUAL DIAL UP INGENICO ICT220 ALMACEN CENTRAL 44 DIAL UP 1 4 DUAL DIAL UP INGENICO ICT220 BAJA CALIFORNIA NORTE 1 DIAL UP 1 5 DUAL DIAL UP INGENICO ICT220 CIUDAD DE MEXICO 21 DIAL UP 1 6 DUAL DIAL UP INGENICO ICT220 ESTADO DE MEXICO 12 DIAL UP 1 7 DUAL DIAL UP INGENICO ICT220 GUANAJUATO 4 DIAL UP 1 8 DUAL DIAL UP INGENICO ICT220 JALISCO 5 DIAL UP 1 9 DUAL DIAL UP INGENICO ICT220 MICHOACAN 5 DIAL UP 1 10 DUAL DIAL UP INGENICO ICT220 MORELOS 4 DIAL UP 1 11 DUAL DIAL UP INGENICO ICT220 QUERETARO 6 DIAL UP 1 12 DUAL DIAL UP INGENICO ICT220 QUINTANA ROO 4 DIAL UP 1 13 DUAL DIAL UP INGENICO ICT220 SAN LUIS POTOSI 6 DIAL UP 1 14 DUAL DIAL UP INGENICO ICT220 VERACRUZ 6 DIAL UP 1 15 DUAL DIAL UP MICROFORMAS ICT220 AGUASCALIENTES 4 DIAL UP 1 16 DUAL DIAL UP MICROFORMAS ICT220 ALMACEN CENTRAL 378 DIAL UP 1 17 DUAL DIAL UP MICROFORMAS ICT220 BAJA CALIFORNIA SUR 4 DIAL UP 1 18 DUAL DIAL UP MICROFORMAS ICT220 CAMPECHE 7 DIAL UP 1 19 DUAL DIAL UP MICROFORMAS ICT220 CHIAPAS 3 DIAL UP 1 20 DUAL DIAL UP MICROFORMAS ICT220 CHIHUAHUA 5 DIAL UP 1 21 DUAL DIAL UP MICROFORMAS ICT220 CIUDAD DE MEXICO 40 DIAL UP 1 22 DUAL DIAL UP MICROFORMAS ICT220 COLIMA 4 DIAL UP 1 23 DUAL DIAL UP MICROFORMAS ICT220 ESTADO DE MEXICO 3 DIAL UP 1 24 DUAL DIAL UP MICROFORMAS ICT220 GUANAJUATO 16 DIAL UP 1 25 DUAL DIAL UP MICROFORMAS ICT220 GUERRERO 10 DIAL UP 1 26 DUAL DIAL UP MICROFORMAS ICT220 HIDALGO 5 DIAL UP 1 27 DUAL DIAL UP MICROFORMAS ICT220 JALISCO 18 DIAL UP 1 28 DUAL DIAL UP MICROFORMAS ICT220 MICHOACAN 5 DIAL UP 1 29 DUAL DIAL UP MICROFORMAS ICT220 MORELOS 2 DIAL UP 1 30 DUAL DIAL UP VERIFONE ICT220 IP NAYARIT 3 DIAL UP 1 31 DUAL DIAL UP VERIFONE ICT220 IP OAXACA 3 DIAL UP 1 TABLA2 ID Producto 1 TPV Retail 2 TPV Retail2 3 Super 4 Centro 5 TPV Escuelas MIT
Muchas Gracias por el apoyo
Geovany: Miro de entender el conjunto y te comento porque de antemano veo que alguna dificultad voy a tener con los Nombre de Controles ya que no tienen nombre significativos.
Cuando te comentaba que pusieras aquí un enlace con tu BD y datos inventados me refería a la Base de datos no a una parte del código y que además, con Nombres como Combo29, Textxx, Commandxx.
En fin intentaré hacer lo que pueda y si al final no lo acabo de entender te comento.
Mis saludos >> Jacinto
Geonany: No te preocupes pero dado que mi tiempo disponible es casi nulo, no puedo dedicar mucho ala la interpretación de algo que al final ignoro si una propuesta de solución pueda no ser buena.
Entonces creo que si por alguna razón no quieres hacer pública tu BD, aunque yo crea que es lo mejor para recibir más de una solución, puedes enviármela a [email protected]
Entre una de varias cosas que no acierto a ver es si el control "Proveedor" es un Combo o un LisBox o un TextBox.
Insisto en que si tus datos son de tipo confidencial, los cambies a ficticios.
Espero tus noticias. Mis saludos >> Jacinto
- Compartir respuesta