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 15-04-2005
LucianoRey LucianoRey is offline
Miembro
 
Registrado: feb 2004
Posts: 73
Poder: 21
LucianoRey Va por buen camino
Ado y transacciones

Hola a todos, espero me puedan orientar, tengo el siguiente problema:

Tengo una pantalla de captura, donde manejo una relacion master-detail,es decir tengo los datos que pertenecen a la tabla maestra y ademas unos grids que son los detalles, bueno el caso es que por la "relacion", yo se que tengo que grabar el principal antes de capturar los detalles, entonces, el usuario sabe que si le da al boton ok, su registro queda grabado (maestro y detalles), si lo cancela aunque haya metido información no graba nada, pero para mi, si el usuario intenta meter detalles yo grabo el registro principal y entonces si le dejo meter detalles, como esto lo hago por medio de transacciones no hay problema, tengo Adodataset para mis tablas maestra y detalles y mi forma de manejar la llave que relaciona las tablas es, cuando el usuario intenta meter un detalle (cualquiera), por medio de un procedimiento almacenado (SQLServer) me traigo el ultimo numero de la tabla principal y lo asigno al master, como yo se que, en lo que el usuario termina su captura, pueden pasar n segundos, minutos, u horas, solo hasta que le da al boton ok entonces vuelvo a ejecutar mi procedimiento almacenado y lo asigno al campo clave del maestro y detalles, pero el detalle esta en que cuando vuelvo a ejecutarlo me da el ultimo numero pero de lo que tengo en memoria, es decir, y no se si sea por que esta dentro de la tranasaccion, parece como si el procedimiento almacenado se ejecutara en memoria de mi ordenador, no en el servidor como deberia (y como yo quiero), entonces,alguien me podria decir que estoy haciendo mal? ó que me falta?, aparte de estudiar mas supongo, ya intente usar un numero temporal para la clave, en lo que estoy capturando y cuando le doy boton ok usar el procedimiento, me lo hace bien la primera vez, despues ya no, tambien otra tabla con el ultimo grabado, lo uso en lo que capturo y me sucede lo mismo, mi procedimiento almacenado lo desactivo antes de ejecutarlo nuevamente, pero nada, espero haber sido claro y me puedan ayudar, gracias.
Responder Con Cita
  #2  
Antiguo 15-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Dejo constancia que he intentado leer la el problema... pero me ha parecido que se complica por no estar dividido en parrafos y, dado que no dispongo de mucho tiempo, lo dejo para alguien mas valiente que yo (o mas desocupado )...

Un saludo.
__________________
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 15-04-2005
LucianoRey LucianoRey is offline
Miembro
 
Registrado: feb 2004
Posts: 73
Poder: 21
LucianoRey Va por buen camino
Ado y transacciones

Ok, gracias por el comentario y tienes razón tengo que redactar bien, saludos.
Responder Con Cita
  #4  
Antiguo 15-04-2005
Avatar de kalimero
kalimero kalimero is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 288
Poder: 21
kalimero Va por buen camino
Hola.

Bueno cojo el relevo de jachguate(jejejeje). No termino de comprender que tengas que ejecutar dos veces el procedimiento almacenado para coger el ultimo valor. Bueno la verdad es que si lo entiendo pero no lo comparto. Podrias trabajar con los datasets en modo cache, es decir, poner la propiedad locktype = ltBatchOptimistc. Despues en el evento BeforePost del master recoges el ultimo valor introducido en la BD y por ultimo en el evento de AfterPost tambien del master recorres el Detalle y le añades el campo llave de la cabecera. Para terminar aplicas los datos de la cahé y listo.
De esta forma no importa si el usuario tarda mucho en rellenar las lineas.

Saludos
Responder Con Cita
  #5  
Antiguo 15-04-2005
LucianoRey LucianoRey is offline
Miembro
 
Registrado: feb 2004
Posts: 73
Poder: 21
LucianoRey Va por buen camino
Ado y transacciones

Hola, ya lo hice asi, pero algo me falta, en una transacción no tengo problema, pero abri dos veces la aplicación en una capturo mi registro principal y al pasar a capturar detalles, le doy post al principal para que me deje capturar los detalles y lo dejo esperando, ¡ah! me dio el 18 (ultima clave), en la otra capturo como en la primera y lo grabo me graba el 18 porque en la anterior no lo hice, regreso a esta y trato de grabar, me dice que no puedo duplicar una clave, que me faltaria?, lo que entendi como aplicar datos de la cache lo hice con :
AdoDataset.cacheupdate, de antemano gracias.
Responder Con Cita
  #6  
Antiguo 15-04-2005
LucianoRey LucianoRey is offline
Miembro
 
Registrado: feb 2004
Posts: 73
Poder: 21
LucianoRey Va por buen camino
Ado y transacciones

Perdón fue asi :

DataModule1.ADODataSet5.UpdateBatch(); *tabla principal
DataModule1.ADODataSet15.UpdateBatch(); *tabla detalles
DataModule1.ADODataSet12.UpdateBatch(); *tabla detalles
DataModule1.ADODataSet10.UpdateBatch(); *tabla detalles

DataModule1.ADOConnection1.CommitTrans;

antes de esto, no doy otro post, pues cuando intentan capturar detalles ya lo hice y enseguida lo pongo en modo de edición.
Responder Con Cita
  #7  
Antiguo 15-04-2005
LucianoRey LucianoRey is offline
Miembro
 
Registrado: feb 2004
Posts: 73
Poder: 21
LucianoRey Va por buen camino
Ado y transacciones

¡¡¡Gracias por la ayuda!!!, ya funciona, asi como me dijiste "kalimero", lo que paso es que cuando el usuario entra a alguno de los grids-detalle, yo doy un post al registro principal, para que me deje meter detalles.

Luego si el usuario le pica al boton Ok, ya no hacia otro post del registro principal, solo "vaciaba" el buffer e iniciaba otra transacción, append de registro principal y otra vez a capturar, lo cambie puse otra vez el post al registro principal y ¡¡¡listo!!!.

En el caso de mi boton Cancel, no habia problema, porque le daba cancel al registro principal y deshacia la transacción.

Ahora solo me falta ver como manejo la edición en la misma pantalla (por el llamado al proc. almac. dentro del post), pero creo debe ser mas facil, gracias otra vez por la ayuda, pues eso de pasar de Clipper a Delphi es otro mundo, pero muy bueno, saludos.
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 07:07:41.


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