Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Conexión con bases de datos
Register FAQ Members List Calendar Guía de estilo Today's Posts

Conexión con bases de datos

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 23/10/2003
Delfino Delfino is offline
Miembro
 
Join Date: Jul 2003
Location: Madrid
Posts: 974
Poder: 23
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
Reply With Quote
  #2  
Old 23/10/2003
__cadetill __cadetill is offline
Miembro
 
Join Date: May 2003
Posts: 3,387
Poder: 27
__cadetill Va por buen camino
qué motor de bases de datos utilizas? Si te soporta los procedimientos almacenados, puedes probar con ellos
Reply With Quote
  #3  
Old 23/10/2003
andres1569 andres1569 is offline
Miembro
 
Join Date: May 2003
Posts: 908
Poder: 24
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.

Code:
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
Reply With Quote
  #4  
Old 23/10/2003
Cabanyaler's Avatar
Cabanyaler Cabanyaler is offline
Miembro
 
Join Date: Jun 2003
Location: País Valencià
Posts: 339
Poder: 24
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í.
Reply With Quote
  #5  
Old 24/10/2003
Delfino Delfino is offline
Miembro
 
Join Date: Jul 2003
Location: Madrid
Posts: 974
Poder: 23
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..
Reply With Quote
  #6  
Old 24/10/2003
__cadetill __cadetill is offline
Miembro
 
Join Date: May 2003
Posts: 3,387
Poder: 27
__cadetill Va por buen camino
Pues te remito a lo comentado por el amigo Andrés

Quote:
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.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 20:11.


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