Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-10-2003
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
No encuentro el evento adecuado

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
Responder Con Cita
  #2  
Antiguo 23-10-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
qué motor de bases de datos utilizas? Si te soporta los procedimientos almacenados, puedes probar con ellos
Responder Con Cita
  #3  
Antiguo 23-10-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
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.

Código:
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.
__________________
Guía de Estilo
Responder Con Cita
  #4  
Antiguo 23-10-2003
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
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.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #5  
Antiguo 24-10-2003
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
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..
Responder Con Cita
  #6  
Antiguo 24-10-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Pues te remito a lo comentado por el amigo Andrés

Cita:
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:50:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi