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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-07-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
actualización de tablas tras un Post

Hola.

estoy usando delphi6 e interbase 7.

En una parte de mi aplicación, al pulsar un botón, se inserta, en un nuevo registro de mi tabla econo, varios campos y se muestra la ventana para pagar.

Haciendo doble click sobre el grid de esta ventana, me selecciona, lo que quiero tramitar, de lo que hay pendiente de pago para un cliente.

Una vez seleccionado el pago que quiero realizar, damos a aceptar, y se guardan los datos del registro que habiamos
insertado.

De este registro, tenemos que tomar inmediatamente despues, el valor que toma el campo CODIGO, que es un campo auto numérico, y que adquiere su valor de un generador que tiene asociado directamente en la base de datos interbase.

El caso es que, al hacer el post, no se actualiza directamente , y si pongo un refresh a esa tabla, se me situa en el primer registro, no en el que acabo de insertar, por lo que el valor que toma en ese caso, no es el que yo necesito.

¿Hay alguna forma de guardar este registro, y que se actualizen los datos que se generan desde la base de datos, directamente en la tabla de Delphi, sin que se me cambie de registro?

Necesito ayuda.....

Alguna idea???

Muchas gracias de ante mano.

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)

Última edición por Giniromero fecha: 04-07-2003 a las 13:11:26.
Responder Con Cita
  #2  
Antiguo 04-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Si estas conectado via BDE (que no lo mencionas), y el campo CODIGO es parte de la llave primaria, no hay forma de hacer lo que pedis... pues el BDE se basa en la llave primaria para identificar al registro.

El comportamiento es que al hacer un POST, el BDE, luego de recibir de nuevo el control, relee el registro de la base de datos (digamos, genera un Select * from tabla where llaveprimaria = llaveprimaria antes de actualizar).

De alli, que si el valor de esta cambia durante el post (mediante triggers), el BDE pierde el registro y te situa al inicio de la tabla.

Lo que si podes hacer para evitar esto, es llamar vos directamente al generador, digamos en el evento BeforePost de la tabla, y asignarle el valor dentro del mismo BDE.

Yo lo hago normalmente llamando a un stored procedure, que obtiene el valor del generador y lo devuelve en un parámetro.

y en el evento BeforePost hago algo cómo:

Código:
Procedure Table1BeforePost(aDataSet : TDataSet);

Begin
  if (Table1.State = dsInsert) and (Table1CODIGO.IsNull) Then
  Begin
     spObtieneCodigoTable1.ExecProc;
     Table1CODIGO.AsInteger := spObtieneCodigoTable1.ParamByName('aID').AsInteger;
  end;
end;
la idea es esa...

Hasta luego

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 14-08-2003
rafadrover rafadrover is offline
Miembro
 
Registrado: jun 2003
Ubicación: Mallorca
Posts: 48
Poder: 0
rafadrover Va por buen camino
Sabeis si se puede solucionar este problema utilizando los componentes de interbase?

Gracias.
Responder Con Cita
  #4  
Antiguo 18-08-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Supongo que el procedimiento es el mismo...
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 19-08-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
Smile

Debes percatarte de que el código autonumérico se incrementa una vez hecho el post, por lo que, como tantas veces hemos comentado la naturaleza de este tipo de campos no es aconsejable para su posterior utilización en claves ajenas p.e. en tablas master:detail.
Para ello busca otra clave alternativa aunque debas hacerlo manualmente la simulación de este tipo de campos.

Suerte.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 18:26:35.


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