![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
|||
|
|||
|
Prueba cerrar y abrir la tabla
TablaX.close; TablaX.open Esto te deberia actualizar los datos en el datagrid. |
|
#2
|
||||
|
||||
|
Repito dando algo más de explicación, ya que tenía bastante prisa:
- El evento Paint se dispara muchas veces seguidas dentro del form, por tanto, puede que se esté abriendo la consulta y se mande a cerrar de nuevo una y otra vez. - El evento Paint (en general, no solo para el Form) tiene baja prioridad en Windows, por tanto puede obviarse el evento y no hacer lo que quieres en el momento deseado. El DataSource tiene un evento OnDataChange, (cuando se modifica un registro) o incluso OnStateChange (cuando pasa de Explorar la tabla a modificar, a editar, etc). Puede usarse el OnDataChange para hacer lo que consideres oportuno. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#3
|
|||
|
|||
|
Gracias Lepe.
Todavía no he podido probar lo que me has dicho, pero ya me doy cuenta de que el problema va por ahí. Es que todavía ando un poco pez en esto de delphi, pero no me convencía el hecho de utilizar el evento FormPaint (por los argumentos que diste). Pero me surge una duda: para refresacar los datos de un form, o cargar combos que contenga con valores que se hayan generado por la transacción recien ejecutada, no se usa el FormPaint tampoco?. Cúal es la alternativa? Espero no haber abusado mucho de tu ayuda. Gracias! |
|
#4
|
||||
|
||||
|
En el FormPaint, como su nombre indica, se debe usar para pintar algo en el Form, por ejemplo usando la función Draw, DrawText . También podría usarse para actualizar un gráfico, pero si usamos un TImage, sería más conveniente usar el propio evento Paint de dicho TImage.
Todo lo que sea pintar sobre el Form, (como pintar con tiza sobre una pizarra), si usaríamos el evento Paint. Ejemplo: Pintar una flecha "------->" que salga de un Edit y que apunte a otro control. Al cambiar de tamaño la ventana "la pizarra se borraría" y haría falta el evento Paint para pintarlo de nuevo. Un evento muy usado por ejemplo en los DBgrids es el DrawColumnCell que se dispara al pintar la celda, en este caso se podría usar para "incrustar" un combobox, un TDatetime, etc en la columna apropiada. Todo se reduce a lo mismo, usar cada evento para lo que fue diseñado. Si quieres actualizar los datos de un datagrid al borrar desde un botón, puedes usar ese mismo botón para añadir el código de refresco. Incluso hacerte una rutina "ActualizaDatos" para llamarla desde varios eventos (el boton de borrar, el botón de añadir...). En este caso no estamos pintando nada sobre el form, sino actualizando los datos que se inyectan a los controles DataAware, de ahí que sugiera otro evento o mecánica distinta. Lo lógico sería usar los eventos del TADODataset, dando una vuelta por F1 para saber cual es el más apropiado para nuestra necesidad. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 26-12-2006 a las 15:32:43. |
|
#5
|
|||
|
|||
|
Aquí de nuevo.
Si de esta no soy capaz de solucionar mi problema desisto y queda como está. El problema sigue siendo que la consulta que realizo después de la eliminación del elemento seleccionado en el dataGrid a través del botón eliminar, todavía lee el registro recien eliminado. La consulta es: lsSQL := 'SELECT * FROM ' + TBL_FUNCION + ' WHERE NOMUSUARIO = "' + obUsuario.Nombre + '" AND NOMPROYECTO = "' + obProyecto.Nombre + '" AND FECHA = "' + obEstimacion.Fecha + '" AND HORA = "' + obEstimacion.Hora + '" AND TIPO = "T" ORDER BY NOMFUNCION'; frmPrincipal.ADODataSet1.CommandText := lsSQL; frmPrincipal.ADODataSet1.Open; DBGrid1.DataSource := datasource1; {donde datasource1.DataSet = ADODataSet1} He probado a realizar esta consulta despues de la eliminación, cuando salta el evento AfterDelete, realizar un commit y no hay manera. Si busco el registro inmediatamente con locate ya no está, pero si realizo la consulta anterior, sí me lo encuentra. Debo estar haciendo algo de forma muy torpe pero no caigo. No sé si influye pero el DataGrid lo tengo con readonly = true, porque solo lo quiero para mostrar los datos de la tabla FUNCION. Siento ser tan pesado. Todos los comentarios anteriores me han ayudado también, gracias. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| DataGrid | altp | .NET | 1 | 27-10-2006 19:06:54 |
| Checkbox en un datagrid | joel20 | .NET | 5 | 18-04-2006 13:39:02 |
| Cabecera DataGrid | mamen | .NET | 4 | 26-10-2004 13:16:51 |
| DataGrid en asp.net | mamen | .NET | 2 | 04-10-2004 13:00:26 |
|