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 09-02-2006
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
He buscado un poquito por ahí tu problema y tienes razón, existe un problema entre el BDE y esta versión de Interbase, por el que no se reflejan bien los valores de los campos clave que son actualizados en el servidor después de una inserción.

Por lo que encontré, sólo hay dos maneras de solucionarlo:

1. Actuar como lo has hecho hasta ahora: creando un procedimiento almacenado y ejecutándolo en el evento OnBeforePost o en OnNewRecord para actualizar el campo clave de autoincremento.

2. Ó, actualizando dicho campo en el servidor a través de un disparador y, luego, cerrando y volviendo a abrir la tabla (en vez de ejecutar Refresh) para que se actualice el valor del campo en el cliente. (Claro que esta operación es más costosa y requiere que salvemos la posición del registro actual para volver a posicionarnos donde estábamos).

Yo te aconsejaría, más que usar el BDE, utilizar los componentes nativos para acceder a Interbase (los de la pestaña InterBase) o cualquier librería de componentes que exísten por ahí para tal propósito (algunas son, incluso, gratuitas).

Saludos!
Responder Con Cita
  #2  
Antiguo 09-02-2006
rafa_adrim rafa_adrim is offline
Miembro
 
Registrado: ene 2006
Posts: 17
Poder: 0
rafa_adrim Va por buen camino
Gracias,

Me lo estoy planteando el problema es que estamos hablando de una aplicación que existe desde el 99, con mas de 90 tablas y unos 160 formularios de gestión.

Claro migrar esto a por ejemplo ibx es muy traumàtico.

Bueno la solucion que he hecho al final es la siguiente, por si ha alguien le interesa:

1. Tener un storedprocedure que devuelve en número siguente de un generador siempre i cuando no haya ningun valor en una tabla de números a recuperar. (Tabla idRecuperado)
2. En el beforepost assignar el número que devuelve el storedprocedure.
3. En caso de que hang cancel inserto el número que se va a perder en la tabla idRecuperado para que la proxima el storedprocedure lo reaproveche.

La opción de que cada vez que se crea un registro cerrar i abrir la ttable es muy muy costosa en terminos de rendimiento de datos al servidor ya que el bde cada vez que abre una tabla hace una gran carga de datos en local.

Bueno hay la información por si alguien la necesitase.
Gracias otra vez.
Responder Con Cita
  #3  
Antiguo 09-02-2006
rafa_adrim rafa_adrim is offline
Miembro
 
Registrado: ene 2006
Posts: 17
Poder: 0
rafa_adrim Va por buen camino
joder cada vez escrivo peor.
Perdón.
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:09.


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