Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: GzaRC en 10 Diciembre 2019, 20:14 pm



Título: No guarda los cambios?
Publicado por: GzaRC en 10 Diciembre 2019, 20:14 pm
Buenas tardes, les comento lo que me pasa.

Agregue algunas lineas de código y una pequeña imagen que debía mostrarse u ocultarse según algunas condiciones, estos cambios se ven reflejados lo mas bien si lo veo y ejecuto desde la fuente, pero al compilar y abrir el ejecutable esos cambios no se ven reflejados.

Ya elimine, renombre el viejo ejecutable, compile un monton de veces.

Vale aclarar que solo pasa con este solo formulario, los demas formularios del proyecto toman y compilan los cambios.

No me da ningún error y, supuestamente, compila lo mas bien.

El archivo frx tendrá algo que ver, podrá repararse o "limpiar" la solución como en Visual Studio??


Podrían darme una mano por favor?


Muchas gracias desde ya!


Título: Re: No guarda los cambios?
Publicado por: engel lex en 10 Diciembre 2019, 20:24 pm
tal vez el ejecutable sigue ejecutndose y el compilador no puede sobreescribirlo?


Título: Re: No guarda los cambios?
Publicado por: GzaRC en 10 Diciembre 2019, 22:53 pm
No es eso. No se que esta pasando.

Puede ser que este proyecto no este compilando? He leido que suele pasar con visual studio y la solucion es recompilar, en VB6 existe esa funcion?

Ayuda por favor!!


Título: Re: No guarda los cambios?
Publicado por: Serapis en 12 Diciembre 2019, 19:09 pm
Jamás he tenido en estos 21 años problemas de ese tipo al compilar con VB6... así que asumo que el problema lo tienes en el propio código... tal vez tengas una directiva de compilación (por ejemplo)...

¿puedes exponer ese 'código que no funciona' cuando se compila, pero que sí funciona cuando se interpreta?

... y como dices que está asociado a un control de imagen o picturebox, exponer sus propiedades (además de las medidas). Una captura de ambas situaciones, ayudaría a entende rmejor el problema... (antes de hace rlas capturas, pon la propiedad 'BorderStyle a 1... para que aunque no se viere imagen se vea la posición y medidas que ocupa...


Título: Re: No guarda los cambios?
Publicado por: GzaRC en 12 Diciembre 2019, 21:01 pm
Hola NEBIRE!

Gracias por responder..

Los cambios los reverti pensando que podria haber algun error en el codigo (por lo menos yo no me doy cuenta ni lo veo), pero de todas formas, tampoco me compila, por ejemplo, si cambio un texto de un txt.

Soy nuevo en este foro y no veo donde puedo adjuntarte un archivo con el codigo en cuestion...


Título: Re: No guarda los cambios?
Publicado por: Serapis en 13 Diciembre 2019, 14:51 pm
En casi todas partes es lo mismo... pegar el texto o pegar un enlace a un archivo comprimido:

- Si el texto es corto, puedes volcarlo directamente en el foro, metido entre etiqeutas GeSHI (cuando escribes un mensaje en el encabezado encima de la caja donde escribes está la ayuda a la edición a la derecha un bombo con diferentes lenguajes de programación, eliges VB (a secas), y luego pegas el código dentro del par de etiquetas...

- Si el texto es largo, o si requiere mirar propiedades de los objetos o del proyecto (que razonablemente podría ser el caso), entonces es mejor que comprimas los archivos que componen el proyecto, y lo subas a una página de descarga, luego simplemente pega aquí el enlace de descarga...


Título: Re: No guarda los cambios?
Publicado por: GzaRC en 13 Diciembre 2019, 15:24 pm
En casi todas partes es lo mismo... pegar el texto o pegar un enlace a un archivo comprimido:

- Si el texto es corto, puedes volcarlo directamente en el foro, metido entre etiqeutas GeSHI (cuando escribes un mensaje en el encabezado encima de la caja donde escribes está la ayuda a la edición a la derecha un bombo con diferentes lenguajes de programación, eliges VB (a secas), y luego pegas el código dentro del par de etiquetas...

- Si el texto es largo, o si requiere mirar propiedades de los objetos o del proyecto (que razonablemente podría ser el caso), entonces es mejor que comprimas los archivos que componen el proyecto, y lo subas a una página de descarga, luego simplemente pega aquí el enlace de descarga...


Barbaro! Aca adjunto el archivo con dos casos (Un ejemplo y el caso que necesito realizar) Hay imagenes y txt con los codigos.

Muchas gracias desde ya!!

https://mega.nz/#!JiYAxA4Y!pONFK13sCUnevJI3rzqsMpop4tsA4sgk7sFuF2FhQlI


Título: Re: No guarda los cambios?
Publicado por: Serapis en 13 Diciembre 2019, 16:27 pm
He descargado el  fichero, pero veo diferentes imágenes y textos, sin orden ni concierto...

Puedes indicar algo como???????????????
1 - Leer primero.txt
2 - codigo.png
3 - codigo2.png
4 - blablabla...

Así tengo un orden al que referir, si no, me obligas a montar un puzzle y perder inútilmente tiempo por no colocar 7 simples números que YA dejen ordenado y deje de ser un puzzle. Si fuera un proyecto de VB, lo arrancas e intentas ejecutar y ya se 'atrancaría' donde salte el fallo... pero con ficheros sueltos desconectados sin referencias...




Título: Re: No guarda los cambios?
Publicado por: GzaRC en 13 Diciembre 2019, 17:05 pm
Perdon! Pense que se iba a entender..

LEER PRIMERO.txt especifica eso que me pedis.

codigo, codigo2, ejecutable y ejecutable2 son imagenes de ejemplos.

carga_medica.txt es el codigo de ese formulario y osocial_click.txt es el evento donde quiero realizar los cambios que no me toma...

1- LEER PRIMERO.txt
2- codigo.png
3- ejecutable.png
4 - codigo2.png
5- ejecutable2.png
6- carga_medica.txt
7- osocial_click.txt


Título: Re: No guarda los cambios?
Publicado por: Serapis en 13 Diciembre 2019, 17:35 pm
has contestado mientras me reeditaba, y posiblemente no veas luego mi mensaje previo editado... así que lo pego aquí:

...al final he compuesto el puzzle...
El caso es que no puedo probar realmente nada, porque incluso aunque un textbox contenga todo el código de un formulario, es farragoso leerlo como texto, lo he guardado como *.bas, para que al menos lo pueda cargar desde el IDE y con el coloreado resulte más esclarecedor... todavía son 157 kb. de código (4350 líneas), sin poder ejecutarlo y sin una referencia clara de adónde debe uno enfocarse, es perder el tiempo (la parte buena es que al menos está correctamente indentado, no puede decirse lo mismo de los nombres usados para las variables, deberías dejar de usar guiones bajos: Esto_en_una_mala_practica, EstoEsMuchoMejor).

Luego del otro pedazo de código, me quedo con dos cosas, expongo solo una:
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.        OSIVASI = esVer(bd("siniva", "paciente_osocial", "idpaciente = " & nropa))
  3.        OSIVASegunPaciente = False      
  4.        imgWarning.visible = True '<-----------------------------------------------
  5.    Else
  6.        nroafiliado = nonul(bd("afiliado", "paciente", "numero =" & nropa))
  7.        imgWarning.visible = True     '<-----------------------------------------------
  8. '        OSIVASI = esVer(bd("siniva", "osocial", "nombre = " & nonul(osocial.text)))
  9.    End If
  10.  

Como se ve, sí o sí, se fuerza "imgwarning" visible, luego si no aparece es por alguna de las siguientes causas:
A - Las medidas d ela imagen son ínfimas (por ejemplo 1x1 pixel).
B - La posición de la imagen queda fuera de lugar. Esto e sposible si la escala no es la adecuada, si en un lugar está en pixels y en otro en twips...
C - La posición es casi correcta, pero está tapada por otro control cuya orden gráfico es superior (un textbox o un combobox, tienen un nivel gráfico superior, es decir un control 'image' jamás puede superponerse encima de un control textbox, porque los controles 'image, line, frame, y shape' no son controles reales si no selecciones gráficas del propio contenedor, luego están siempre en el fondo).
D - Y lo más probable un redibujado del contenedor puede borrar el contenido previo, es decir no se redibuja después...

Vamos a poner soluciones a cada caso, con pruebas de cada uno (en el mismo orden expuesto, pero tú para probar, prueba (si quieres antes la 'd')...

Voy a suponer que el contenedor de ese label y esa imagen se llama picPaciente (sustituye obviamente dicho nombre por el que realmente tenga dicho contenedor)...
Para probar A y B:
Código
  1. Debug.print "Prueba A y B:"
  2. debug.print imgwarning.left , imgWarning.top, imgWarning.Width, imgWarning.Height
  3. debug.print picPaciente.width, picPaciente.Height, picPaciente.Scalemode
  4. If nonul(OSocial.text) <> ....  ' aquí el resto dle código inicio...
  5.  
Para que aparezca la "ventana inmediato"  (o bien lo buscas en su menú, o simplemente), pulsa simultáneamente las teclas "CTRL + G"
Ahí aparecerá el resultado... lo copias y lo pegas aquí. Si al para la ejecución cerrar la ventana desaparece, en modo edición puedes volver a pulsar dicha combinación (son independientes la parición de dicha ventana durante edición y durante ejecución).

Luego que pares la ejecución, localiza el control imgWarning y selecciónala, confirma que sus propiedades Left, Top, width y Height son los valores arrojados... Si no lo son, algo por medio podría estar cambiándolo... o si left y top exceden las medidas del contenedor (en cualquier dirección), lógicamente no se verá.

Para probar C:
Código
  1. Debug.print "Prueba C:"
  2. txtPacienteId.visible = false
  3. txtPacienteNombre.visible = false
  4. lisGenero.visible = false
  5. imgBolamundo.visible=false
  6. lisUNR.visible = false
  7. txtPaceinteX.Visible = false
  8. txtPacienteY.Visible = false
  9.  
  10. If nonul(OSocial.text) <> ....  ' aquí el resto del código del inicio...
  11.  
Esta es una prueba visual, como se 've', lo que hacemos es ocultar todos los controles que comparten posición (horizontal), para asegurarnos que no lo está tapando otro control y que está ahí, pero mal posicionada. Los nombres de los controles son ficticios, porque desconozco cuales son...

Para probar D:
Código
  1. Debug.print "Prueba D:"
  2.  
  3. If nonul(OSocial.text) <> ....  ' aquí el resto del código del inicio...
  4.  
  5. debug.print picPaciente.drawmode
  6. debug.print picPaciente.AutoRedraw
  7. picPacientes.Drawmode = 13
  8. picPaciente.AutoRedraw = True
  9.  
  10. imgWarning.bordestyle = 1
  11. imgWarning.visible = true
  12. picPacientes.Refresh
  13. imgWarning.refresh
  14. labPacientes.Refresh
  15. debug.print labPacientes.Caption
  16.  
En esta prueba queremos saber que método de dibujado se está usando. Y forzamos un redibujado... también volcamos el contenido dle label en la ventana inmediato (de resultados)...

Copia en cada caso, el volcado de las impresiones (debug.print) en la ventana inmediato, para ver que arroja...

Si a pesar de todo, sigue sin quedar claro el problema, envíame al menos ese formulario (los ficheros: carga_medica.frm y carga_medica.frx, ambos si no es lo mismo que nada), no importa el resto del proyecto, y no importa que tenga dependencias, ya elimiaría lo innecesario para aislar y reducir el problema...


Título: Re: No guarda los cambios?
Publicado por: GzaRC 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


Título: Re: No guarda los cambios?
Publicado por: Serapis 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).
(https://i.imgur.com/RKcfio0.png)



Otro botón vuelve a cambiar el texto del label y oculta la imagen:
(https://i.imgur.com/DRard3Z.png)



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...
(https://i.imgur.com/1i1LeJW.png)

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.


Título: Re: No guarda los cambios?
Publicado por: GzaRC 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).
(https://i.imgur.com/RKcfio0.png)



Otro botón vuelve a cambiar el texto del label y oculta la imagen:
(https://i.imgur.com/DRard3Z.png)



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...
(https://i.imgur.com/1i1LeJW.png)

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!


Título: Re: No guarda los cambios?
Publicado por: GzaRC 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!!