duda if

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
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

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

Buenas Carsonzillo, no entiendo lo que dices puedes ser más explicito.

Saludos

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

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:

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

Me alegro mucho de que mi respuesta le aya ayudado. :friends: