Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=26)
-   -   cambia el valor de variable por otros programa (https://www.clubdelphi.com/foros/showthread.php?t=95015)

novato_erick 08-01-2021 23:30:02

cambia el valor de variable por otros programa
 
Buenas Tardes un Saludos a Todos Feliz año y Felicitaciones en todo los eventos.

Me han informado por primera vez en mis años en programa un comportamiento que sucede únicamente en un formulario denominado Cotizaciones la cual tengo una variable pública de tipo Entero llamada "ModoConsultaCot" en la que el valor 1 es consulta, 2 es Actualización y 3 es Agregar en fin me han notificado los usuarios que dejan temporalmente abierto el formulario y al empezar a realizar el ingreso de una cotización sucede que pierde ese valor la variable en la que el botón y el programa simplemente no hace nada en el botón de Aceptar que tiene la funcion:

Código Delphi [-]
procedure TfrmCotizadorPricipal.btnEmiteCotClick(Sender: TObject);
begin
    case dmCotiza.ModoConsultaCot of
        3: //Insertamos
            begin
                if dbgProductos.DataSource.DataSet.isEmpty then
                begin
                    ShowMessage
                      ('Caramba no tenemos productos en la lista para cotizar');
                    lbleBuscaProducto.SetFocus;
                end
                else
                begin
                    if application.MessageBox
                      (pchar('¿Deseas Emitir esta Cotización?'),
                      pchar('Cotizaciones'), (MB_YESNO + MB_ICONQUESTION)) = IDYES
                    then
                    begin
                        IngresaCotDB;
                        ExitoCot := True;
                        if ExitoCot = True then
                        begin
                            ImprimeCotizacion;
                            Limpiamostodo;
                            dmCotiza.ModoConsultaCot := 3;
                            ShowMessage('Listo puedes Verificar la impresora');
                        end;
                    end
                    else
                    begin
                        // Limpiamostodo;
                        rbBuscaCodigo.Checked := True;
                        lbleBuscaProducto.SetFocus;
                    end;
                end;
            end;
        2: // Actualizamos
            begin
                if ActualizaCot = True then
                begin
                    ImprimeCotizacion;
                    Limpiamostodo;
                    ShowMessage('Actualización Correcta');

                end
                else
                begin
                    ShowMessage
                      ('Error en Actualización Favor Llame al Adminsitrador Sistema');
                end;
            end;
    end;
end;

Alguien conoce si es posible que por pura casualidad de la vida esa variable es posible ser modificada por algún otro programa que tenga ese mismo nombre de variable? tengo mis dudas en cuanto hilos de ejecución ahora con esto. vuelvo a repetir nunca en los años que tengo usando el programa me habian notificado ese comportamiento.

PD: el sistema operativo instalado es Windows 10


Saludos:

novato_erick

Casimiro Noteví 09-01-2021 12:06:14

Si cierras el datamodule, ya la variable no existirá... por decir algo.

novato_erick 10-01-2021 03:17:19

Cita:

Empezado por Casimiro Notevi (Mensaje 539648)
Si cierras el datamodule, ya la variable no existirá... por decir algo.

Hola Buenas tardes disculpa por no responder enseguida.

no cierro el datamodule en ninguna circunstancia ya que en el está el de conexion etc pero sabes cambiaré la variable a una unidad de variables nueva para ver si tiene que ver con usar dicha variable en el módulo de datos.

Gracias Casimiro siempre contando con tu experiencia.

Saludos

novato_erick

Neftali [Germán.Estévez] 11-01-2021 12:47:31

Cita:

Empezado por novato_erick (Mensaje 539647)
...sucede únicamente en un formulario denominado Cotizaciones la cual tengo una variable pública de tipo Entero llamada "ModoConsultaCot" en la que el valor 1 es consulta, 2 es Actualización y 3


Creo que el problema puede venir por ser una variable global.
¿Deberías revisar si hay otros puntos del programa donde se pueda modificar? ¿O si hay la posibilidad de que existan 2 objetos creadpos de forma simultánea?

novato_erick 11-01-2021 15:12:38

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 539659)
Creo que el problema puede venir por ser una variable global.
¿Deberías revisar si hay otros puntos del programa donde se pueda modificar? ¿O si hay la posibilidad de que existan 2 objetos creadpos de forma simultánea?

Germán es un enorme placer encontrar respuestas de eminencias como ustedes.

Tenes razón, la variable global que se encuentra en el modulo de datos "normalmente" se encuentra en estado "3" de ingresar cotizaciones, solamente cambia al llamar un formulario denominado Consulta Cotizaciones en la que cambia su estado al presionar Modificar a "2" o Consultar a "1".

En fin el comportamiento reportado por el usuario:
[usuario:] "buenas tardes he notado que dejo la pantalla principal de cotizaciones sin usar durante un periodo la cual me voy hacer otras cosas y al nuevamente utilizarlo agrego bien los productos y los datos del cliente pero al oprimir el botón de cotizar no me hace nada. Lo que he hago es cerrar el formulario y volverlo abrir logrando realizar la cotización".

al principio del hilo me duda estaba es que si es posible que por casualidad de la vida otro programa que no sea el desarrollado tenga el nombre de esa variable y que al ser usado me modifique mi variable ya que la computadora es usado también para navegar en internet y otras aplicaciones.

Saludos;


novato_erick

Casimiro Noteví 11-01-2021 15:32:07

Cita:

Empezado por novato_erick (Mensaje 539660)
al principio del hilo me duda estaba es que si es posible que por casualidad de la vida otro programa que no sea el desarrollado tenga el nombre de esa variable y que al ser usado me modifique mi variable ya que la computadora es usado también para navegar en internet y otras aplicaciones.

Como poder, puede ser, a mí me ha pasado un par de veces en 37 años :eek:

novato_erick 11-01-2021 16:28:03

Cita:

Empezado por Casimiro Notevi (Mensaje 539661)
Como poder, puede ser, a mí me ha pasado un par de veces en 37 años :eek:

:rolleyes: entiendo cambiaré entonces el nombre de la variable. Les comento si eso resolvió el problema ya que el usuario suele dejar concurridamente el programa abierto y me lo ha reportado 6 veces en menos de 15 días.

Saludos

novato_erick

Neftali [Germán.Estévez] 12-01-2021 10:13:59

Cita:

Empezado por novato_erick (Mensaje 539660)
... me duda estaba es que si es posible que por casualidad de la vida otro programa que no sea el desarrollado tenga el nombre de esa variable y que al ser usado me modifique mi variable ya que la computadora es usado también para navegar en internet y otras aplicaciones.


Si los programas están bien diseñados no es posibble que por accidente un programa modifique las variables de otro, simplemente porque se llamen igual.
Si los programas no están bien diseñados podría ser que uno accediera a una parte de memoria de otro y modificara valores, cosa muy improbable.
E intencionadamente no le veo sentido a que otro de los programas que utilices intente modificar una variable del tuyo.
Así que me inclino más porque sea un problema de tu propio programa.

Casimiro Noteví 12-01-2021 12:43:15

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 539666)
Así que me inclino más porque sea un problema de tu propio programa.

Eso tiene una posibilidad del 99,999999999999999999% de ser así.


La franja horaria es GMT +2. Ahora son las 22:15:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi