PDA

Ver la Versión Completa : No encuentro el evento adecuado


Delfino
23-10-2003, 13:43:38
Saludos a todos,
mi problema es q tengo un procidimiento para cuando se cambie el valor de un campo actualice todas las filas de la tabla hacia el final de ella, el procidimiento lo tengo en un click de boton (para pruebas) y funciona perfectamente con el resultado deseado, el problema es q no encuentro el evento de la tabla, campo, o grid para q se ejecute de manera transparente al usuario, cuando lo pongo en el AfterScroll o OnUpdateChange o OnChange me da "Stack Overflow", en el OnDataChange ni si quiera se abre la aplicacion pq "cannot perform this action on a closed dataset", en el evento AfterPost o OnStateChange no se puede pq el procidimiento utiliza los metodos edit y next q llaman a post, bueno estoy hecho un lio y lo he probado de mil maneras pero na.., seguro q alguien tiene una idea brillante:)

__cadetill
23-10-2003, 13:53:31
qué motor de bases de datos utilizas? Si te soporta los procedimientos almacenados, puedes probar con ellos

andres1569
23-10-2003, 14:08:52
Hola:

En cualquier caso, si implementas desde Delphi cualquier acción en uno de esos eventos, es necesario que uses un semáforo (una variable boolean). El error de "Stack overflow" te salta porque en el OnChange haces modificaciones que a su vez disparan ese evento OnChange y así hasta el infinito ... o hasta quen se agota la memoria.


actualizando : Boolean; // variable global al formulario

procedure TablaMiCampoChange;
begin
if actualizando then EXIT;
actualizando := TRUE;
try
// Lo que sea
finally
actualizando := FALSE;
end;
end;

Tal como comenta Cadetill, si tu SGBD lo permite, usas procedimientos almacenados, pero tampoco es mala idea lanzar una consulta SQL que efectúe esos cambios en los registros pertinentes (luego haces un refresh a la tabla para que se actualice), o bien usas una tabla auxiliar para hacer esos recorridos, sincronizando luego ambas tablas.

Cabanyaler
23-10-2003, 16:44:41
Bueno, no sé como tienes implementado el código, pero ese Stack Overflow salta por provocarse un desbordamiento de la pila de la memoria y esto sucede cuando se incurre en algún tipo de bucle infinito de llamadas recursivas y algo parecido.
Comprueba que si el evento salta al producirse una determinada acción como por ejemplo indicas "AfterScroll o OnUpdateChange o OnChange " ese mismo evento se producirapor cada uno de las tuplas que estan desde la tupla donde se produce hasta el final y asi para cada uno de ellas.
Suerte.

Delfino
24-10-2003, 13:51:41
En realidad no uso ningun motor pq uso la denominada MyBase con ClientDataSet, eso pq es una aplicacion para un negocio pequeño q el numero total de registros no pasara de los 6000 o 7000 como mucho, por eso decidi de usar (por primera vez) la MyBase, espero q me puedan ayudar, asias de antemano..

__cadetill
24-10-2003, 14:19:00
Pues te remito a lo comentado por el amigo Andrés

Posteado originalmente por andres1569
...pero tampoco es mala idea lanzar una consulta SQL que efectúe esos cambios en los registros pertinentes (luego haces un refresh a la tabla para que se actualice), o bien usas una tabla auxiliar para hacer esos recorridos, sincronizando luego ambas tablas.