Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Master - Detail SQL (https://www.clubdelphi.com/foros/showthread.php?t=55577)

HectorMendez 21-04-2008 14:51:50

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...

:oEspero 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... :o

Les agradeceria mucho si me pueden ayudar :confused:

oca 21-04-2008 15:08:02

En cuanto al segundo problema que mencionas tuve uno bastante similar utilizando Firebird, lo solucione modificando la transacción a "Read Committed"

HectorMendez 21-04-2008 15:11:01

Mater - Detail
 
El Problema es que no uso Firebird, uso SQLServer y un componente externo que se llama SQLDAC de CoreLab

oca 21-04-2008 15:12:24

Si, pero probablemente tambien puedas configurar la manera en que el componente maneja las transacciones.

duilioisola 21-04-2008 15:14:26

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.

HectorMendez 21-04-2008 15:18:06

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....:confused:

duilioisola 21-04-2008 15:28:19

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;



La franja horaria es GMT +2. Ahora son las 11:04: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