![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Un método append que funciona en un Grid y falla en un TForm con controles
Hola de nuevo. Diréis que soy un poco inútil pero me pasa una cosa curiosa que paso a detallaros a continuación:
En un Modulo de datos tengo una IBDataSet y un DataSet apuntando a él. Sobre un formulario dispongo un Grid enlazado a ese DataSet de modo que el TForm queda encima y el grid debajo y mediante lo siguiente conmuto entre uno y otro:
En el formulario dispongo tantos controles DBEdit como campos hay en el grid. Bueno pues la cuestión es que desde el grid el método append funciona perfectamente y añade un nuevo registro sin problemas. Pero si desde el Form dispongo de una botonera para ejecutar el método append y luego el post como sigue:
Otra cosa curiosa es que sobre los controles del Form puedo editar los datos y guarda los cambios directamente sin el post pero no permite el método append lanzando la siguiente excepción: "cannot focus a disabled or invisible window" Alguna idea. Seguro que es la tontería mas grande del mundo pero no lo veo. |
#2
|
||||
|
||||
Hola gorsan.
La verdad me cuesta entender la situación, por ejemplo: Cita:
Además hay controles como GLista, PNEdicion, WFicha que no imagino la clase y no me queda en claro cuál es su función Cita:
Hay tres puntos donde llamas al método SetFocus: Con seguridad la provoca una (o mas) de ellas. Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
|||
|
|||
Buenos días.
Muchas gracias por responder. Se agradece. No. No parece ser ese el caso ya que he deshabilitado las tres sentencias que señalas y el errror sigue produciendose. Intentaré explicar un poco el concepto del programa. Lo del Grid y el Form: es solo una forma alternativa de presentar al usuario, segun su iniciativa, los datos de una tabla, ya que ambos estan conectados al mismo DataSource que enlaza con la tabla. Si pulsa el boton "ficha" aparece lo que llamo la ficha que no es mas que un panel, PNEdition, con los controles DBEdit conectados a los distintos campos de la tabla. Si pulsa el boton "tabla" se presenta el grid que está debajo y que apunta a los mismos datos mediante el metodo GLista.BringToFront; y el panel PNEdicion con los controles DBEdit pasan a un segundo plano mediante el metodo PNEdition.SendToBack; Sinceramente, no creo que el problema esté aquí. De hecho, he eliminado las 3 referencias al foco y la excepcion sigue produciendose. Mi idea primera era que solo se puedieran añadir registros a la tabla a traves de la "ficha" mediante un boton (TBAdd: TToolButton) y con el codigo que expongo en mi anterior post, ya que cada nuevo registro lleva un número unico que se produce con un generador que manejo desde la BD (campo contador). Por tanto que desde el grid no se permitiera el metodo append, solo la edicion de los datos de los campos. Para ello disponía: Digo disponia porque este codigo fue lo primero que descarté al comenzar a darse el error. Una vez descartado compruebo con asombro como desde el Grid sí que puedo añadir un registro y no solo editar los anteriores. Por tanto y concluyendo, desde los dbedit que estan sobre el PNEdicion se editan los datos que ya estan en la tabla pero cuando pretendo añadir un nuevo registro, sobre estos mismos controles, e introduzco los nuevos datos de este, falla al hacer el metodo post dando la excepcion que comento. No se si he aclarado el "pastel" que tengo liado pero lo de bringtofront y sendtoback no creo sea el problema y lo del setfocus tampoco. Muchas gracias por vuestro esfuerzo. Última edición por gorsan fecha: 19-03-2014 a las 08:38:00. |
#4
|
||||
|
||||
Estoy bastante de acuerdo con ecfisa. Ese error normalmente está provocado por el SetFocus o similares, cuando un control se encuentra no visible o no accesible. Por ejemplo, cuando está en un TabSheet que no es activo.
Piensa que a veces el SetFocus se puede llamar de forma indirecta, cuando activas ventanas, cuando se ejecuta SetActiveControl,...
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Gracias Neftalí.
No entiendo nada. He inhabilitado las sentencias que dice ecfisa pero sigue produciéndose la excepción. Si estoy escribiendo sobre controles DBEdit entiendo que el foco del teclado lo tiene el contenedor del componente DBEdit, pero la excepción salta cuando hago un método post contra el DataSet que está admitiendo las actualizaciones de los datos. Entiendo que lo que falla, y no se porque, es el método append del TIBDataSet que soporta los datos. El tinglao tiene que estar por otro sitio ... |
#6
|
||||
|
||||
Hola gorsan.
Ya con los datos que me faltaban en mano, una tabla de prueba y dejando de lado las llamadas al TIBStoredProc, pude reproducir tu caso sin obtener ningún error. Este es el código de la prueba:
¿ Seguro que no hay mas código involucrado ? ¿ Algo en algún evento ? Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
|||
|
|||
Hola ecfisa. Muchas gracias por tu ayuda y por "pegarte" con mi farragoso código. Ahí va más porque sí, hay más código implicado.
Si tienes paciencia échale un vistazo a ver si ves algo que te llame la atención en el sentido que nos ocupa. Se trata del módulo de datos donde están alojados los componentes que manejan los datos. Si, ya se, es un pantano. Pero yo no veo aquí tampoco el núcleo del error que nos ocupa. En tres veces por los problemas de numero máximo de caracteres admitidos:
Última edición por gorsan fecha: 19-03-2014 a las 23:17:15. |
#8
|
|||
|
|||
No me se me permite por razones de cupo o algo así, enviar el resto de la unit que contiene el módulo de datos.
¿Existe la posibilidad de hacerlo en un *.txt? |
#9
|
||||
|
||||
Hola gorsan.
Si por supuesto. Guarda el código en un archivo .txt, comprimilo y adjuntalo al mensaje, mediante el ícono clip: ![]() Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#10
|
||||
|
||||
Nunca me había fijado en ese icono
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#11
|
|||
|
|||
Siento discrepar pero a mi no me sale el icono que muestras, en su lugar, es decir, inmediatamente a la izquierda de los iconos deshacer y rehacer, tengo una especie de combo que pone archivos adjuntos y el desplegable de persiana no hace nada. No se como subir un fichero salvo por e-mail.
Gracias por vuestras respuestas. |
#12
|
||||
|
||||
Hola gorsan.
Debes tener algún problema con el navegador o su configuración, acabo de crear un usuario con 0 mensajes para descartar cualquier restricción por el número de mensajes. Y tanto con Mozilla Firefox como con Internet Explorer visualizo y puedo acceder por el ícono que te mencioné y también por el que indicó Casimiro. Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#13
|
|||
|
|||
Una vez resuelto el problema adjunto el fichero con el codigo.
|
#14
|
|||
|
|||
Hola. Buenos dias.
Ya he dado con el problema. Me ha traido de cabeza porque el mensaje "cannot focus a disabled or invisible window" no me daba las pistas adecuadas, mas bien al contrario. Las prisas no son buenas y yo tenía que entregar la aplicación cuanto antes. Debido a un cambio de ultima hora del cliente (el comprador del programa) tuve que rehacer el planteamiento de la base de datos desde inicio con un montón de código ya hecho. Entonces me sobraba un campo. Ese campo estaba con su control data-aware sobre el formulario ficha. Pues nada lo eliminé sin darme cuenta de que estaba declarado como not null. Error imperdonable. Desde el formulario saltaba el error al invocar el metodo append y dejar ese campo en blanco. Desde el grid no saltaba el error porque como lo metia a mano pues no daba el error. Pero no me digais que el tenor literal del error no da ninguna pista acerca de esto. Deberia haber sido la base de datos la que se quejara de alguna manera ¿no? En todo caso, muchas gracias a ecfisa por su tiempo y a todos los demas que os habeis interesado. Doy por concluido este hilo. Un saludo para todos y salud. |
#15
|
||||
|
||||
Hola gorsan.
Cita:
![]() Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Encontrar objeto por su nombre, encontrar metodo, ejecutar metodo | coso | Trucos | 7 | 02-09-2011 00:23:13 |
edit autocompletado mediante grid no funciona | Rofocale | Varios | 3 | 17-05-2011 04:45:55 |
[IE7] Método POST no funciona | alapaco | PHP | 8 | 05-06-2008 21:27:26 |
uso de append en tabla | macro32 | Conexión con bases de datos | 5 | 21-04-2008 19:35:04 |
Método accesible desde varios controles en diferentes forms | athlontado | OOP | 9 | 29-10-2004 16:10:16 |
![]() |
|