Visual Basic - Problema con un Inputbox

Life is soft - evento anual de software empresarial
 
Vista:

Problema con un Inputbox

Publicado por Alejandro (13 intervenciones) el 14/11/2008 18:57:10
Hola que tal tengo un problema con este inputbox ya que lo hago llamar con un valor entero pido una opción la cual quiero que se guarde en como texto y no como valor entero, me pueden ayudar.

Set MySet5 = New ADODB.Recordset

MySet5.CursorLocation = adUseClient
MySet5.Open "SELECT * FROM [Prestamos Personales movimientos agrupados]", MyDb, adOpenKeyset, adLockOptimistic
MySet5.AddNew
MySet5.Fields("Forma de pago") = InputBox("FORMA DE PAGO(1.EFECTIVO, 2.DEPOSITO A BANCOS)")
MySet5.Update
MySet5.Close
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con un Inputbox

Publicado por quique (63 intervenciones) el 14/11/2008 20:29:13
Te iba a contestar, pero es que ese nombre me cae mal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un Inputbox

Publicado por Carlos (10 intervenciones) el 15/11/2008 06:34:40
Facil, haber si te entendi, lo que quieres hacer con ese input es que el usuario seleccione una forma de pago, si ingresa 1 es efectivo y 2 deposito a b...., pero lo que tu quieres hacer es que si presiona 1 guarde Efectivo y no el valor 1, bien lo que tienes que hacer es lo siguiente

Dim strValor As String

strValor = InputBox("Forma Pago(1.Efectivo, 2.Deposito)")

If (strValor = "1" Or strValor = "2") Then

If (strValor = "1") Then

MySet5.Fields("Forma de pago") = "Efectivo"

End If

If (strValor = "2") Then

MySet5.Fields("Forma de pago") = "Deposito"

End If

Else

MsgBox "Selecciona una "

End If
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un Inputbox

Publicado por igor (633 intervenciones) el 15/11/2008 14:34:33
Bien solucionado, pero cometes el típico error de novato, este código es más correcto:

Dim strValor As String

strValor = InputBox("Forma Pago(1.Efectivo, 2.Deposito)")

Select case strValor
case "1"
MySet5.Fields("Forma de pago") = "Efectivo"
case "2"
MySet5.Fields("Forma de pago") = "Deposito"
case else
MsgBox "Selecciona una "
end select

Espero que a partir de ahora useis select para estos casos, es mejor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un Inputbox

Publicado por quique (63 intervenciones) el 15/11/2008 17:53:31
Y porqué hay que usar select? ¿porqué es mejor? ¿porqué es mas correcto?

a mi me parece mas correcto lo siguiente, pues tiene que hacer menos evaluaciones, y claro, poner menos código.

strvalor = InputBox("Forma Pago(1.Efectivo, 2.Deposito)")
If strvalor <> "" Then Exit <Sub/Function>
MySet5.Fields("Forma de pago") = IIf(strvalor = 1, "Efectivo", "Deposito")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un Inputbox

Publicado por igor (633 intervenciones) el 15/11/2008 22:50:32
Realmente crees que ese código hace menos comparaciones?

Estas seguro de que cuando strvalor es distinto que "" debe salir de la función?

Si strvalor contiene un valor distinto de "Efectivo" o "Deposito" que es lo que pasará?

Que valor contendrá finalmente MySet5.Fields?

Entiendo que quieras dejarme en evidencia, te caigo mal y quieres dejarme en ridículo, ok. Pero con estas cosas, mmmmmm, creo que no estas quedando muy bien.

Si quieres dejarme en evidencia adelante, seguro que puedes conseguirlo, yo cometo errores, no me importa, pero que sea con buenas ideas, no con estas cosas.

Y para que por lo menos aprendamos algo con esto, un código fuente con menos líneas no significa que esté más optimizado que otro con más líneas, la traducción a ensamblador puede cambiar la percepción de algunos sobre lo que es programar. Lo digo por propia experiencia.

Además está la cuestión de la legibilidad del código, algo más importante y prioritario que la optimización, ya que el software actual está hecho por una sola persona, sino por grupos de trabajo, con lo que es muy importante que los demás entiendan el código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un Inputbox

Publicado por quique (63 intervenciones) el 15/11/2008 23:15:06
jder a la cantidad de preguntas que tiene uno que responder aquí:

"Realmente crees que ese código hace menos comparaciones?"
SIIIIII


"Estas seguro de que cuando strvalor es distinto que "" debe salir de la función? "
SIIIIIIIIII

"Si strvalor contiene un valor distinto de "Efectivo" o "Deposito" que es lo que pasará? "
strvalor nunca va a contener una valor de Efectivo o deposito, sino 1, 2 o ninguno

"Que valor contendrá finalmente MySet5.Fields?"
el que se haya asignado en el inputbox (1, 2 o ninguno)

"Entiendo que quieras dejarme en evidencia, te caigo mal y quieres dejarme en ridículo, ok. Pero con estas cosas, mmmmmm, creo que no estas quedando muy bien."
No es que te quiera dejar en evidencia, lo haces tú mismo, y no me caes mal (yo también soy de origen vasco)

"Si quieres dejarme en evidencia adelante, seguro que puedes conseguirlo, yo cometo errores, no me importa, pero que sea con buenas ideas, no con estas cosas."
Ver respuesta anterior (siempre con buenas ideas, nunca se me ocurrió lo contrario)

"Y para que por lo menos aprendamos algo con esto, un código fuente con menos líneas no significa que esté más optimizado que otro con más líneas, la traducción a ensamblador puede cambiar la percepción de algunos sobre lo que es programar. Lo digo por propia experiencia."

vale, te quedaste en la época del 'ensamblador' ¿ qué tal si te actualizas ?


"Además está la cuestión de la legibilidad del código, algo más importante y prioritario que la optimización, ya que el software actual está hecho por una sola persona, sino por grupos de trabajo, con lo que es muy importante que los demás entiendan el código."

y realmente crees que porque pongan un select se va a entender mejor el código?






--------------------------------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un Inputbox

Publicado por igor (633 intervenciones) el 16/11/2008 00:29:03
Mira que me hace trabajar el amigo quique. Como lo dice tan seguro me entran dudas de si se me estará escapando algo, hasta lo he tenido que comprobar. Insisto:

If strvalor <> "" Then Exit <Sub/Function>

Esta instrucción hace que cualquier valor distinto de una cadena vacía (null) proboque una salida de la función, con lo que 1 o 2 siempre darán un Exit <Sub/Function>

Además si se introduce cualquier otro valor no tenemos un código que lo controle, ni mucho menos que nos de el MsgBox "Selecciona una ", indicado por Carlos, que no aparece por ningún lado.

No se por qué te empeñas en seguir con esa actitud agresiva. No se si serás de por aquí, pero si es cierto o eres de esos Francofonos que "adoran" Euskadi o eres de esos "patriotas" que como el rey midas toco lo que tocan lo llenan de mda.

Lo de ensamblador y actualizarme me lo dicen mucho. La verdad es que también uso NET pero siempre me ha gustado destripar los sistemas.

Con select se entiende mejor o peor? Cada cual que siga su propio camino, a ver a donde le lleva.

Y si quieres seguir discutiendo yo encantado, pero por lo menos admite la evidencia, la instrucción que querías poner era:

If strvalor = "" Then Exit <Sub/Function>

Por lo menos eso mutil, si quieres el resto pues tienes razón, para tí el premio, pero por lo menos eso.

Gero arte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un Inputbox

Publicado por quique (63 intervenciones) el 16/11/2008 09:59:33
Vale, admito la evidencia, me equivoqué (fíjate que hasta yo me equivoco de vez en cuando).

y lo del mensajito se lo sacó alguien de la manga, pues en la pregunta original yo no ví nada de mensajes. Además, puesto así como lo pones lo que haría es mostrar el mensaje y salir del procedimiento con lo cual habría que apretar de nuevo el botoncito para que mostrara el InputBox y además sin controlar si se pulsó en 'Cancelar'

Pongo el procedimiento de nuevo y esta vez comentado

etiqueta:
strvalor = InputBox("Forma Pago(1.Efectivo, 2.Deposito)")
If strvalor = "" Then Exit Sub <-- se ha dejado vacío o se ha pulsado 'Cancelar'
If strvalor <> 1 And strvalor <> 2 Then <-- se ha pulsado cualquier otra tecla
MsgBox "Opción no válida"
GoTo etiqueta '<-- se muestra de nuevo el InpuBox
End If
MySet5.Fields("Forma de pago") = IIf(strvalor = 1, "Efectivo", "Deposito") <-- se ha pulsado una opción válida

y si a aclarar las cosas le llamas tú "actitud agresiva" es que no me has visto cabreado de verdad!

horrek asko daki gero!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un Inputbox

Publicado por Carlos (10 intervenciones) el 16/11/2008 10:06:47
Ah jajajajajjajaja que risa medio leer tus comentarios

como este:

"para que por lo menos aprendamos algo con esto, un código fuente con menos líneas no significa que esté más optimizado que otro con más líneas"

o este

"Además está la cuestión de la legibilidad del código, algo más importante y prioritario que la optimización, ya que el software actual está hecho por una sola persona, sino por grupos de trabajo, con lo que es muy importante que los demás entiendan el código."

o bien este:

"Espero que a partir de ahora useis select para estos casos, es mejor."

si deberas quieres legibilidad entonces de seguro que tampoco es lo que propusiste y si que lo es lo siguiente, asi por cierto en tu codigo propuesto si el usuario por descuido ingresa uno o mas espacios vacios antes o despues de ingresar un valor valido " 1" o "2" entonces desplegara el mensaje "selecciona una" y sin embargo aun con los espacios vacios a la izquerda o derecha es un valor valido; mientras que con esto aunque ingreses espacios vacios sea a la izquerda o derecha si el valor es valido "1" o "2", si que lo aceptara

Dim strValor As String

strValor = InputBox("Forma Pago(1.Efectivo, 2.Deposito)")

Select Case True

Case strValor = 1
MySet5.Fields("Forma de pago") = "Efectivo"
Case strValor = 2
MySet5.Fields("Forma de pago") = "Deposito"
Case Else
MsgBox "Selecciona una "
End Select

pero no te preocupes, es un error tipico de novato, simplemente fallaste, espero que apartir de ahora, pienses que quiza quien presenta una propuesta lo hace para ayudar sin que complique a quien pregunta y que no necesariamente es novato por no poner el codigo, mas optimo o legible si es que no se lo pidieron, ha sabes siempre he usado Select, es probable que no respondas a este mensaje, pero si lo haces no te respondere porque ya perdi mucho tiempo en leer y responder tus comentarios, te saludo desde Guatemala, bye
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un Inputbox

Publicado por igor (633 intervenciones) el 16/11/2008 12:40:50
Esta claro que no se me da bien hacer amigos.

Quique, totalmente de acuerdo con lo que dices. Me alegro de aclarar las cosas, eso es positivo. Aunque después de mucho hemos conseguido un código similar al de Carlos. Si os gusta más así pues ok, no digo nada.

Solo una cosa, con riesgo de meterme en otro fregao, no suele ser una buena idea utilizar la instrucción goto según la metodología de la programación estructurada. Yo la usaba porque aprendí a programar por mi cuenta, hasta que me enseñaron que no era bueno, y no la hecho de menos. Lo he visto en mucha gente, alumnos y por supuesto profesores que lo enseñan a los alumnos. Pero que no se entienda como una crítica, no quiero más lios, solo intento aportar mi experiencia.

Carlos, saludos desdes Euskadi a todos los guatemaltecos. Es muy cierto que no habíamos tenido en cuenta esa posibilidad, al igual que no habíamos tenido en cuenta lo indicado por quique, la posibilidad de pedir el valor hasta que sea uno válido.

Pero igual sería conveniente explicar por qué tu código similar al mío funciona con los espacios. Lo hace porque VB automáticamente convierte un valor de tipo string en un valor de tipo integer, de manera que al realizar la comparación lo hace entre enteros y no entre cadenas. Es muy válido, pero lo es en VB, si alguien intenta hacer lo mismo en C se volverá loco.

Sea como sea, enhorabuena por esa forma tan peculiar de utilizar un selec, nunca lo había usado así, me gusta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con un Inputbox

Publicado por igor (633 intervenciones) el 17/11/2008 22:03:08
Me dices que no venga aquí a daros clases de programación, y según tú a que tenemos que venir?

Te recuerdo que este es un foro de programación, no de GH.

La verdad es que no se si será el NOP o el quique o algún otro, ya que más da.

La instrucción goto simplemente hace ilegible un programa, no hay más que hacer un diagrama de flujo. Claro, que si no sabemos lo que es la programación estructurada no creo que sepamos lo que es un diagrama de flujo.

Otra opción para el goto? Pues si, con bucles que al fin y al cabo son lo mismo, no hay más que ver un poco de ensamblador para comprobar que un bucle condicional y un if con un goto es lo mismo.

Desgraciadamente cuando me tocó estudiar programación, 1997, ya sabía bastante del tema y en 2007 en un curso de electrónica he podido comprobar lo poco que saben los profesores que se dedican a enseñar. Lógicamente los pobres alumnos compañeros míos cometían los mismos errores como el de goto.

Saludos NOP.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar