Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2008
HectorMendez HectorMendez is offline
Miembro
 
Registrado: may 2004
Posts: 14
Poder: 0
HectorMendez Va por buen camino
Question Master - Detail SQL

Saludos...

Tengo un inconveniente con una aplicacion que estoy desarrollando con unos compañeros, sucede que la aplicacion funciona perfectamente en local, pero al momento de probar en red presenta los siguientes inconveniente.

Utilizo Delphi 7, SQLServer y para la conexion utilizo un componente externo llamado SQLDAC.....

1.- Si estoy en una captura que lleva marter-detail no me permite trabajar al mismo tiempo con usuarios diferentes, es decir tengo una tabla de Aseguradoras y otra de Planes de Seguros (hija de la primera). Si estoy agreando un plan a una aseguradora e intento hacerlo desde otra usuario la misma operacion, se frisa el programa, como puedo resolver eso.

La Prueba la hacemos en la misma pc, iniciando la aplicacion desde delphi y luego desde la carpeta.... si usamos el mismo usuario no sucede lo anterior

2.- El otro inconveniente es que por ejemplo, tenemos un campo en la tabla aseguradora que es el condigo, el cual es autoincrementado, si cargamos la aplicacion dos veces e intentamos captura saldra el mismo numero a los usuarios, es decir el numero que sigue, por ejemplo la ultima fue la 5 al iniciar la captura nuevamente seria la 6 para todos, queremos ahora que el primero que grama se le quede el numero que le corresponde y a los siguientes se aumente en base al ultimo numero, pero no encontramos forma...

Espero haber sido explicido... no soy muy bueno dando estos detalles si no estoy mostrando los codigos... ademas no estoy en casa donde los tengo... si no me hago entender favor hacerme saber...

Les agradeceria mucho si me pueden ayudar
Responder Con Cita
  #2  
Antiguo 21-04-2008
oca oca is offline
Miembro
 
Registrado: ene 2005
Posts: 10
Poder: 0
oca Va por buen camino
En cuanto al segundo problema que mencionas tuve uno bastante similar utilizando Firebird, lo solucione modificando la transacción a "Read Committed"
Responder Con Cita
  #3  
Antiguo 21-04-2008
HectorMendez HectorMendez is offline
Miembro
 
Registrado: may 2004
Posts: 14
Poder: 0
HectorMendez Va por buen camino
Mater - Detail

El Problema es que no uso Firebird, uso SQLServer y un componente externo que se llama SQLDAC de CoreLab
Responder Con Cita
  #4  
Antiguo 21-04-2008
oca oca is offline
Miembro
 
Registrado: ene 2005
Posts: 10
Poder: 0
oca Va por buen camino
Si, pero probablemente tambien puedas configurar la manera en que el componente maneja las transacciones.
Responder Con Cita
  #5  
Antiguo 21-04-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
El punto 1 parece ser un problema de transacciones.
El segundo se resolvería asignando los números.
Yo no trabajo con SQLServer y utilizo poco los atoincrementales. Solo para casos en los que se hacen cosas automaticamente.
Lo que hago es tener una tabla con contadores.
Cuando necesito un número:
- hago un select de ese contador.
- le sumo uno
- lo grabo sobre ese contador (con un update)
Si me ha dejado, quiere decir que puedo usarlo. Sinó, que alguien más lo está tratando de utilizar. Espero un poco y lo vuelvo a intenter.
Responder Con Cita
  #6  
Antiguo 21-04-2008
HectorMendez HectorMendez is offline
Miembro
 
Registrado: may 2004
Posts: 14
Poder: 0
HectorMendez Va por buen camino
Mater - Detail

Pensamos en esa solucion, el problema es que si uno de los usuarios que esta capturando cancela.... que pasa con ese numero.... ya queda guardado....
O me equivoco....
Responder Con Cita
  #7  
Antiguo 21-04-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Todo se soluciona con transacciones y calculando ese valor en el momento preciso.

Yo calculo el valor justo antes de grabar.
En una tabla normal sería OnBeforePost.

Para esto abro una transacción aparte y calculo el contador. (utilizo un procedimiento almacenado que además verifica si se ha borrado un número y lo reutiliza)

Código:
TablaOnBeforePost
begin
   Abro TransacciónContador
   Calculo Contador
   TablaCONTADO.AsInteger := Contador;
end;

TablaOnAfterPost
begin
   Cierro TransacciónContador
end;

TablaOnPostError
begin
   Rollback de TransacciónContador;
end;

Última edición por duilioisola fecha: 21-04-2008 a las 15:31:23.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
DBLookupComboBoxs Master/Detail o Detail/Master yusnerqui OOP 5 29-07-2005 18:40:20
master/detail, imprimiendo master en cada hoja acalderonr Impresión 4 29-11-2003 14:46:07
master detail marcelofabiani Firebird e Interbase 5 01-11-2003 22:21:28
interbase:¿como crear un master-detail-detail? ElSanto24 Firebird e Interbase 2 22-10-2003 10:24:45
Master/Detail/Detail/Detail/etc... hgiacobone Tablas planas 2 24-07-2003 17:20:31


La franja horaria es GMT +2. Ahora son las 10:04:11.


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