Página 1 de 1

duda if

Publicado: 07 Dic 2014 21:03
por francismrtn18
Buenas, estoy intentando añadir más funciones al proyecto que había terminado la semana pasada gracias a la ayuda de Luma, Dowsher y Carsonzillo, he querido poner alguna condición más al proyecto, pero no hay forma que me funcione, la condición es la siguiente:
si el valor en la input es mayor que x (sCloro) que lance un mensaje, si quiere o no corregir el valor, una vez que indico que lo corrija, el dato se guarda en la db, sin esperar a que corrija el dato.
Podeis echar una mano.

Gracias
sFecha = Input.GetText("Inp_fecha")
sHora = Input.GetText("Inp_hora")
sHabitacion = Input.GetText("Inp_habitacion")
sCloro = Input.GetText("Inp_cloro")
sCaliente = Input.GetText("Inp_temp_ac")
sFria = Input.GetText("Inp_temp_af")
sEstado = ComboBox.GetText("ComboB_estado")
sNombre = Input.GetText("Inp_nombre");

if sFecha  == "" or sHora == "" or sHabitacion == "" or sCloro == "" or sCaliente == "" or sFria == "" or sEstado =="" or sNombre == "" then
Dialog.TimedMessage("Atención", "tiene que ingresar todos los datos", 5000, MB_ICONEXCLAMATION)

DialogEx.Close()
end

sCloro = String.ToNumber(Input.GetText("Inp_cloro"));
if sCloro > 2 then
Dialog.Message("LomLegio", "El valor ingresado es mayor de lo establecido, ¿Desea corregirlo?", MB_YESNOCANCEL, MB_ICONQUESTION, MB_DEFBUTTON1);



if bNewRecord then

SQLite.Query(db, "insert into CONTROL_GRIFO_HABITACION values(NULL, '"..sFecha.."', '"..sHora.."', '"..sHabitacion.."', '"..sCloro.."', '"..sCaliente.."', '"..sFria.."', '"..sEstado.."', '"..sNombre.."')");
nLastError = Application.GetLastError();
if nLastError ~= SQLite.OK then
Dialog.Message("Error de apertura de la bases de datos" ..nLastError, SQLite.GetLastErrorString());
end
 end
 Dialog.TimedMessage("Datos", "Los datos se han registrado correctamente", 2000, MB_ICONINFORMATION)
 DialogEx.Close()
 
 
end

Publicado: 07 Dic 2014 21:31
por carsonzillo
el codigo parece inconcluso falta un end ...¿porque reutilizas la misma variable (sCloro) en la operacion de conversion a numero en la linea 17 de este codigo? lo logico seria darle otro nombre de variable para el texto convertido en numero y meter la variable sCloro dentro dela accion String.ToNumber (...) y de ahi coger la variable convertida (ponle sConcertido) en el if de compraracion sConvertido > 2

Publicado: 07 Dic 2014 22:06
por francismrtn18
Buenas Carsonzillo, no entiendo lo que dices puedes ser más explicito.

Saludos

Publicado: 07 Dic 2014 22:48
por francismrtn18
Carsonzillo, he corregido los dos fallos que comentas, es verdad que faltaban el end y he quitado la variable repetida, pero sigue con el mismo fallo.

Cuando inserto un número mayor de dos, salta la pantalla si deseo corregir el dato, hasta ahí perfecto, pero cuando ejecuto el si para cambiar el dato, se cierra la pantalla y me lo guarda en la db, eses es el problema.

Saludos

Publicado: 07 Dic 2014 23:28
por Dow Sher
Hola francismrtn18!!
Vera... al igual que usted muchos usuarios del foro no saben utilizar la condición " if ", esta condición tiene dos subcondiciones llamadas " else " y " elseif "que se ejecuta cuando la condición principal no lo hizo....
Ejemplo:
r = 1
if r == 2 then -- Aquí la condición dice: "Si r es igual a 2, entonces..."
  Dialog.Message('', 'r es igual a 2');
else -- "Si no se cumplió la condición principal pero si se cumplió otra, entonces..."
 -- Hacer algo
end
en ocaciones no es necesario usar estas subcondiciones pero en tu caso si debes de usar la subcondicion " else ".
sFecha = Input.GetText("Inp_fecha");
sHora = Input.GetText("Inp_hora");
sHabitacion = Input.GetText("Inp_habitacion");
sCloro = Input.GetText("Inp_cloro");
sCaliente = Input.GetText("Inp_temp_ac");
sFria = Input.GetText("Inp_temp_af");
sEstado = ComboBox.GetText("ComboB_estado");
sNombre = Input.GetText("Inp_nombre");

if sFecha  == "" or sHora == "" or sHabitacion == "" or sCloro == "" or sCaliente == "" or sFria == "" or sEstado =="" or sNombre == "" then
  Dialog.TimedMessage("Atención", "tiene que ingresar todos los datos", 5000, MB_ICONEXCLAMATION);
  DialogEx.Close(); -- Con esto puedo ver que este código está en On Show de un DialoEx
else -- En caso de que la anterior no se cumpla...
  sCloro = String.ToNumber(Input.GetText("Inp_cloro"));
    if sCloro > 2 then
      Dialog.Message("LomLegio", "El valor ingresado es mayor de lo establecido, ¿Desea corregirlo?", MB_YESNOCANCEL, MB_ICONQUESTION, MB_DEFBUTTON1);
        if bNewRecord then
          SQLite.Query(db, "insert into CONTROL_GRIFO_HABITACION values(NULL, '"..sFecha.."', '"..sHora.."', '"..sHabitacion.."', '"..sCloro.."', '"..sCaliente.."', '"..sFria.."', '"..sEstado.."', '"..sNombre.."')");
           if Application.GetLastError() ~= SQLite.OK then
             Dialog.Message("Error de apertura de la bases de datos" ..nLastError, SQLite.GetLastErrorString());
           else -- En caso de que la anterior no se cumpla...
             Dialog.TimedMessage("Datos", "Los datos se han registrado correctamente", 2000, MB_ICONINFORMATION);
             DialogEx.Close();
           end
        end
    end
end
Espero haber podido ayudarte.
Saludos Dow Sher :friends:

Publicado: 08 Dic 2014 00:01
por francismrtn18
Gracias Dowsher por la rápida respuesta y las explicaciones que das, es más fácil con ejemplos y con los comentarios que adjuntas, como bien dices en mi caso soy novato y me cuesta entender las cadenas, son bastante compleja para las personas que empezamos pero gracias al foro y a vuestra inestimable ayuda se hace más fácil.

Mil gracias

Publicado: 08 Dic 2014 00:28
por Dow Sher
Me alegro mucho de que mi respuesta le aya ayudado. :friends: