elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  No guarda los cambios?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: No guarda los cambios?  (Leído 5,963 veces)
GzaRC

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: No guarda los cambios?
« Respuesta #10 en: 13 Diciembre 2019, 19:02 pm »

Por lo pronto te envío los archivos ya que durante el fin de semana no tengo accesos a ellos.

La imagen en cuestión había un error, debe mostrarse u ocultarse, ya esta reparada esa linea.

Mas allá de la imagen que no se muestra, tampoco realiza lo que le indico en osocial_click.txt (señalado con flechas).

Te agradezco muchisimo.

https://mega.nz/#!0mgVAIzT!aIfm5l9lfisZMq8MSM845qeHi_PDJDr8d8h0O4tSXh8


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: No guarda los cambios?
« Respuesta #11 en: 14 Diciembre 2019, 13:16 pm »

Pués al margen de todo, el label funciona perfectamente lo mismo que el picturebox (no es un control image, pese a que el nombre así lo haga creer a primera vista).

He eliminado o comentado el código prescindible o cuya funcionalidad está ausente, para poder centrarme en ambos aspectos, y cuando está en ejecución sea en diseño o compilado funciona correctamente... Adjunto imágenes.



Un botón al efecto, para cambiar el texto del label y hacer visible el picturebox (yo renombre el llabel, eso de label33(0) no es procedente).




Otro botón vuelve a cambiar el texto del label y oculta la imagen:




Ejecutado desde tu propio código, también se comporta como s espera (claro que yo tenía eliminado o comentado la funcinalidad ausente): Esto es, debajo se dan indicaciones al caso...


Así que solo resta pensar que no sucede lo que esperas, porque no llega a ejecutarse. En mi caso gracias al código comentado o eliminado tal posibilidad no se da (ni puede darse). Para que pudiera darse tendría que tener el proyecto completo y así tener todo activo, sin eliminar ni cmentar nada, sin funcionalidad ni dependencias ausentes...

Así que lo que habría que hacer es cerciorarse de si es así o no...

Mirando la funcionalidad del evento click del textbox 'osocial', se aprecian dos puntos de salida del método antes de llegar a las instrucciones que visibilizan el picturebox.
Luego procede poner código de control que nos aclare (una vez compilado) si se ejecuta o no...

1: añadimos un msgbox al comienzo de la función, dentro del primer condicional antes del 'exist sub'...
Código
  1. Private Sub osocial_Click()
  2.    Dim bolOSIVASegunPaciente As Boolean
  3.    Dim bolPacienteIVASI As Boolean
  4.    Dim bolOSIVASI As Boolean
  5.  
  6.    If (osocial.Tag = "X" Or IdOSocial = Me.osocial.ItemData(Me.osocial.ListIndex)) And Es_Alta = False Then
  7.        msgbox "Estoy saliendo de 'osocial'... no esperes que se vea la imagen (punto: 1)"
  8.        Exit Sub
  9.    end if
  10.   '...
  11.  

2: Añadimos otro msgbox, un poco más abajo (también dentro de otro condicional)...
Código
  1.    If ((num(Me.idpaciente, 0) = 0) Or (IdOSocial = 0)) Then
  2.        msgbox "Estoy saliendo de 'osocial'... no esperes que se vea la imagen (punto: 2)"
  3.        Exit Sub
  4.    End If
  5.  
  6.  

3: Si pasa de dichos puntos (esto es, si sigue en la función), vemos si todavía se ejecuta la parte que visibiliza la imagen...
Código
  1. If nonul(osocial.Text) <> Buscar_Datos("select osocial.nombre from osocial, paciente where osocial.numero = paciente.osocial and paciente.numero = " & nropa) Then
  2.        bolOSIVASI = esVer(bd("siniva", "paciente_osocial", "idpaciente = " & nropa))
  3.        bolOSIVASegunPaciente = False
  4.        imgWarning.Visible = True
  5.        msgbox "La imagen debe aparecer..."
  6.    Else
  7.        nroafiliado = nonul(bd("afiliado", "paciente", "numero =" & nropa))
  8.        imgWarning.Visible = False
  9.        msgbox "La imagen no aparecerá y si antes se veía ahora se oculta..."
  10.        bolOSIVASI = esVer(bd("siniva", "osocial", "nombre = " & nonul(osocial.Text)))
  11.    End If
  12.  

Ahora compila (provisionalmente), con esos msgbox... y ejecútalo para ver si se sale de la función o no, y si no sale si se da el condicional que muestra el picturebox o no...
Si se sale, ya tendrás que mirar esos condicionales al detalle que lo sacan de la fnción....

Un error grave en dicha funcionalidad es desentenderse de los errores... cuando haces:
Código
  1.    On Error Resume Next
  2.    IdOSocial = Me.osocial.ItemData(Me.osocial.ListIndex)
  3.    On Error GoTo 0
  4.    '...
Básicamente le estás diciendo que te da igual lo que suceda, así que pueden suceder situaciones incontroladas y por tanto no ser conducido por el código sino por un cúmulo de estados fuera de control, luego es normal que antes un error pueda haber algún comportamiento inesperado.
Ceder antes los errores es perder el control del código.

Lo mínimo antes un error es reportasr su código y exponer su mensaje, y en modo debug parar ahí la ejecución para ver de arreglarlo ó entenderlo y dar una respuesta adecuada distinta de: 'sigue como si nada hubiera pasado'...

Código
  1.    On Error Resume Next
  2. Private Sub osocial_Click()
  3.    Dim bolOSIVASegunPaciente As Boolean
  4.    Dim bolPacienteIVASI As Boolean
  5.    Dim bolOSIVASI As Boolean
  6.  
  7.    On Error goto ControlarErrores
  8.    ...
  9.    IdOSocial = Me.osocial.ItemData(Me.osocial.ListIndex)
  10.  
  11.    '...
  12.    exit sub
  13.  
  14. ControlarErrores:
  15.    msgbox "se ha producido un error no controlado: " & cstr( err.number) & vbcrlf & err.message
  16.    err.clear
  17.    stop ' <----- para continuar paso a paso con 'F8' y ver el punto donde se produjo el error. Comprobar valore esperados, los recibidos o calculados, etc...
  18.  
  19.    resume next
  20. End sub
  21.  

...para terminar, como comentario final (al margen de errores)...
- El código es bastante espagueti, la interfaz está recargada, lo que hará que cualquiera que se enfrente a ella 'la tema', pués sentirá que necesitará al menos 6 meses para entenderla por encima. Deberías hacerlo más intuitiva... separando la mayoría de la interfaz delegando a varias ventanas con sendos botones que abran dichas ventanas y se rellenen los datos (sea automática o manualmente por parte del usuario) y luego pueda cancelar o aceptar. Eso haría también que la carga del formulario fuera más fluída y la interfaz asequible, pués cada ventana trataría un aspecto en exclusiva, luego se autoexplica por e título de la misma. - Al tiempo falta ayuda en los Tooltiptext, que faciliten al usuario saber que leches debe poner o para que sirve algo específico...
- Tratas demasiados eventos 'lostfocus', y en todo caso tratándose de datos debería ser el evento 'validate', en otros controles no está justificado... tampoco tiene mucho sentido estar alternando el valor de la propiedad 'KeyPreview',
- Por último los nombres son a menudo desacertados (por no decir inentiligibles)...  algo como: 'bolOSIVASI', nadie más que tú tiene forma de saber que es 'OSIVASI', podría ser el nombre de una empresa, de un reglamento, ley o simplemente una conjunción (mal formada) de 2 o 3 palabras (bien formada solo la primera letra de cada palabra sería mayúscula)... ninguna de ellas debería ser el nombre de una variable, en todo caso 'bolEmpresa' (sin importar como rayos se llame la empresa), 'bolReglamento' (sin importar como se llame el dichoso relgamento, aunque tampoco sobran 2 ó 3 letras finales (así: bolReglamentoOSI'), 'bolSiLlevaIVA'...
- Aunque hay algunas fuentes que recomiendan precerder el nombre de una variable por letras o siglas del tipo, yo lo suelo dejar para los objetos, que no hay forma de entender de que se trata, para los tipos primarios, su nombre debe ser tan descriptivo que baste: 'Indice', 'Cantidad', 'Edad' ya sugieren que son numéricos. 'Masculino', 'Activo', 'Visible' ya sugieren que son buleanos. 'TipoSexo', 'DiaDeLaSemana' ya sugieren que son valores enumerado. 'Nombre', 'Ciudad' ya sugiere que se trata de strings... etc...
- Un picturebox, es un control 'caro' en cuanto a recursos, para mostrar una simple  imagen tipo icono es preferible usar un control image (que además con su propiedad Stretch a TRUE, peromite ajustar la imagen a las medidas del control.


« Última modificación: 14 Diciembre 2019, 13:28 pm por NEBIRE » En línea

GzaRC

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: No guarda los cambios?
« Respuesta #12 en: 17 Diciembre 2019, 12:23 pm »

Pués al margen de todo, el label funciona perfectamente lo mismo que el picturebox (no es un control image, pese a que el nombre así lo haga creer a primera vista).

He eliminado o comentado el código prescindible o cuya funcionalidad está ausente, para poder centrarme en ambos aspectos, y cuando está en ejecución sea en diseño o compilado funciona correctamente... Adjunto imágenes.



Un botón al efecto, para cambiar el texto del label y hacer visible el picturebox (yo renombre el llabel, eso de label33(0) no es procedente).




Otro botón vuelve a cambiar el texto del label y oculta la imagen:




Ejecutado desde tu propio código, también se comporta como s espera (claro que yo tenía eliminado o comentado la funcinalidad ausente): Esto es, debajo se dan indicaciones al caso...


Así que solo resta pensar que no sucede lo que esperas, porque no llega a ejecutarse. En mi caso gracias al código comentado o eliminado tal posibilidad no se da (ni puede darse). Para que pudiera darse tendría que tener el proyecto completo y así tener todo activo, sin eliminar ni cmentar nada, sin funcionalidad ni dependencias ausentes...

Así que lo que habría que hacer es cerciorarse de si es así o no...

Mirando la funcionalidad del evento click del textbox 'osocial', se aprecian dos puntos de salida del método antes de llegar a las instrucciones que visibilizan el picturebox.
Luego procede poner código de control que nos aclare (una vez compilado) si se ejecuta o no...

1: añadimos un msgbox al comienzo de la función, dentro del primer condicional antes del 'exist sub'...
Código
  1. Private Sub osocial_Click()
  2.    Dim bolOSIVASegunPaciente As Boolean
  3.    Dim bolPacienteIVASI As Boolean
  4.    Dim bolOSIVASI As Boolean
  5.  
  6.    If (osocial.Tag = "X" Or IdOSocial = Me.osocial.ItemData(Me.osocial.ListIndex)) And Es_Alta = False Then
  7.        msgbox "Estoy saliendo de 'osocial'... no esperes que se vea la imagen (punto: 1)"
  8.        Exit Sub
  9.    end if
  10.   '...
  11.  

2: Añadimos otro msgbox, un poco más abajo (también dentro de otro condicional)...
Código
  1.    If ((num(Me.idpaciente, 0) = 0) Or (IdOSocial = 0)) Then
  2.        msgbox "Estoy saliendo de 'osocial'... no esperes que se vea la imagen (punto: 2)"
  3.        Exit Sub
  4.    End If
  5.  
  6.  

3: Si pasa de dichos puntos (esto es, si sigue en la función), vemos si todavía se ejecuta la parte que visibiliza la imagen...
Código
  1. If nonul(osocial.Text) <> Buscar_Datos("select osocial.nombre from osocial, paciente where osocial.numero = paciente.osocial and paciente.numero = " & nropa) Then
  2.        bolOSIVASI = esVer(bd("siniva", "paciente_osocial", "idpaciente = " & nropa))
  3.        bolOSIVASegunPaciente = False
  4.        imgWarning.Visible = True
  5.        msgbox "La imagen debe aparecer..."
  6.    Else
  7.        nroafiliado = nonul(bd("afiliado", "paciente", "numero =" & nropa))
  8.        imgWarning.Visible = False
  9.        msgbox "La imagen no aparecerá y si antes se veía ahora se oculta..."
  10.        bolOSIVASI = esVer(bd("siniva", "osocial", "nombre = " & nonul(osocial.Text)))
  11.    End If
  12.  

Ahora compila (provisionalmente), con esos msgbox... y ejecútalo para ver si se sale de la función o no, y si no sale si se da el condicional que muestra el picturebox o no...
Si se sale, ya tendrás que mirar esos condicionales al detalle que lo sacan de la fnción....

Un error grave en dicha funcionalidad es desentenderse de los errores... cuando haces:
Código
  1.    On Error Resume Next
  2.    IdOSocial = Me.osocial.ItemData(Me.osocial.ListIndex)
  3.    On Error GoTo 0
  4.    '...
Básicamente le estás diciendo que te da igual lo que suceda, así que pueden suceder situaciones incontroladas y por tanto no ser conducido por el código sino por un cúmulo de estados fuera de control, luego es normal que antes un error pueda haber algún comportamiento inesperado.
Ceder antes los errores es perder el control del código.

Lo mínimo antes un error es reportasr su código y exponer su mensaje, y en modo debug parar ahí la ejecución para ver de arreglarlo ó entenderlo y dar una respuesta adecuada distinta de: 'sigue como si nada hubiera pasado'...

Código
  1.    On Error Resume Next
  2. Private Sub osocial_Click()
  3.    Dim bolOSIVASegunPaciente As Boolean
  4.    Dim bolPacienteIVASI As Boolean
  5.    Dim bolOSIVASI As Boolean
  6.  
  7.    On Error goto ControlarErrores
  8.    ...
  9.    IdOSocial = Me.osocial.ItemData(Me.osocial.ListIndex)
  10.  
  11.    '...
  12.    exit sub
  13.  
  14. ControlarErrores:
  15.    msgbox "se ha producido un error no controlado: " & cstr( err.number) & vbcrlf & err.message
  16.    err.clear
  17.    stop ' <----- para continuar paso a paso con 'F8' y ver el punto donde se produjo el error. Comprobar valore esperados, los recibidos o calculados, etc...
  18.  
  19.    resume next
  20. End sub
  21.  

...para terminar, como comentario final (al margen de errores)...
- El código es bastante espagueti, la interfaz está recargada, lo que hará que cualquiera que se enfrente a ella 'la tema', pués sentirá que necesitará al menos 6 meses para entenderla por encima. Deberías hacerlo más intuitiva... separando la mayoría de la interfaz delegando a varias ventanas con sendos botones que abran dichas ventanas y se rellenen los datos (sea automática o manualmente por parte del usuario) y luego pueda cancelar o aceptar. Eso haría también que la carga del formulario fuera más fluída y la interfaz asequible, pués cada ventana trataría un aspecto en exclusiva, luego se autoexplica por e título de la misma. - Al tiempo falta ayuda en los Tooltiptext, que faciliten al usuario saber que leches debe poner o para que sirve algo específico...
- Tratas demasiados eventos 'lostfocus', y en todo caso tratándose de datos debería ser el evento 'validate', en otros controles no está justificado... tampoco tiene mucho sentido estar alternando el valor de la propiedad 'KeyPreview',
- Por último los nombres son a menudo desacertados (por no decir inentiligibles)...  algo como: 'bolOSIVASI', nadie más que tú tiene forma de saber que es 'OSIVASI', podría ser el nombre de una empresa, de un reglamento, ley o simplemente una conjunción (mal formada) de 2 o 3 palabras (bien formada solo la primera letra de cada palabra sería mayúscula)... ninguna de ellas debería ser el nombre de una variable, en todo caso 'bolEmpresa' (sin importar como rayos se llame la empresa), 'bolReglamento' (sin importar como se llame el dichoso relgamento, aunque tampoco sobran 2 ó 3 letras finales (así: bolReglamentoOSI'), 'bolSiLlevaIVA'...
- Aunque hay algunas fuentes que recomiendan precerder el nombre de una variable por letras o siglas del tipo, yo lo suelo dejar para los objetos, que no hay forma de entender de que se trata, para los tipos primarios, su nombre debe ser tan descriptivo que baste: 'Indice', 'Cantidad', 'Edad' ya sugieren que son numéricos. 'Masculino', 'Activo', 'Visible' ya sugieren que son buleanos. 'TipoSexo', 'DiaDeLaSemana' ya sugieren que son valores enumerado. 'Nombre', 'Ciudad' ya sugiere que se trata de strings... etc...
- Un picturebox, es un control 'caro' en cuanto a recursos, para mostrar una simple  imagen tipo icono es preferible usar un control image (que además con su propiedad Stretch a TRUE, peromite ajustar la imagen a las medidas del control.


NEBIRE, te agradezco muchisimo el tiempo que te has tomado para ver este problema.
Hemos tenido unos dias bastantes agitados en el trabajo por lo que aun no he podido realizar las pruebas que me indicaste.

Apenas pueda, entre hoy y mañana seguramente, podre ver bien, con tiempo y tranquilidad, tus comentarios.

Te comento luego como me ha ido.

Muchas gracias nuevamente!
En línea

GzaRC

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: No guarda los cambios?
« Respuesta #13 en: 18 Diciembre 2019, 20:29 pm »

Muchas gracias por todo NEBIRE, al final termine dándome cuenta que el error era mio... Este formulario se comparte entre dos proyectos (no lo sabia pues no arme yo todo esto y lo voy conociendo día a día), entonces estaba realizando los cambios pero compilando el proyecto equivocado...

En cuanto a todos tus consejos, voy a tenerlos muy en cuenta, como te decía, este sistema lo estoy conociendo ya que hace poco trabajo con el y también, muchas veces, se me hace bastante engorroso poder entenderlo, como así también los nombres de variables y demás.

Decime como hago para poner puntuación, ya que mereces lo mejor por el tiempo que me has dedicado y los consejos brindados.

Muchísimas gracias!!
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines