PDA

Ver la Versión Completa : secuencia en red


ingmichel
07-08-2008, 21:39:25
hola a todos como estan, espero k esten bien, les cuento que estoy haciendo un programa en el cual tengo una tabla sql con un campo llamado numsec de tipo int el cual es una clave primaria, lo que quiero hacer es que cada vez que el usuario le de al boton grabar el campo numsec se incremente en 1 (emular a un campo identiy), bien lo que he hecho es que en un componente tquery he usado la clausula select max(numsec) + 1 al momento del usuario darle al boton grabar, esto funciona correctamente en una maquina que este trabajndo local, el problema es que la aplicacion se ejecutara en red con varios usuarios trabajando simultaneamente sobre la misma asi que creo que me dara un error de violacion de clave primaria, espero k me haya dado a entender, y por favor me puedan sugerir algo para solucionarlo, gracias de antemano...

FGarcia
07-08-2008, 21:45:33
" en este momento nuestros operadores estan ocupados investigando telepaticamente que version de delphi esta usted usando, asi como cual es el motor de base datos con el que trabaja su aplicacion. Por favor no cuelgue, un ejecutivo lo atendera"

BlueSteel
07-08-2008, 21:53:47
hola a todos como estan, espero k esten bien, les cuento que estoy haciendo un programa en el cual tengo una tabla sql con un campo llamado numsec de tipo int el cual es una clave primaria, lo que quiero hacer es que cada vez que el usuario le de al boton grabar el campo numsec se incremente en 1 (emular a un campo identiy), bien lo que he hecho es que en un componente tquery he usado la clausula select max(numsec) + 1 al momento del usuario darle al boton grabar, esto funciona correctamente en una maquina que este trabajndo local, el problema es que la aplicacion se ejecutara en red con varios usuarios trabajando simultaneamente sobre la misma asi que creo que me dara un error de violacion de clave primaria, espero k me haya dado a entender, y por favor me puedan sugerir algo para solucionarlo, gracias de antemano...


Debes indicar más información.. motor de base de datos... y versión de delphi...

Salu2:p:D

PD: Esto hace una simulación del traspaso del llamado de FGarcia a mi...

ingmichel
07-08-2008, 22:07:10
hola chicos, gracias por responderme, es verdad se me paso indicar que estoy utilizando el motor de bd a sql server 2000 y la version de delphi 7.

BlueSteel
07-08-2008, 22:11:59
hola chicos, gracias por responderme, es verdad se me paso indicar que estoy utilizando el motor de bd a sql server 2000 y la version de delphi 7.

Hola ingmichel...

pero cual es el problema que designes el campo como identidad, cuando eso el SQL 2000 lo hace....

Otra opción es que te crees un trigger, y al momento de guardar te genere el numero del numsec, asi te evitaras cualquier problema, por que el numero se asignará en el servidor y no en el cliente...

tendrias que hacer un trigger en el evento before insert..

Espero que esto te sirva
Salu2:p:D

ingmichel
07-08-2008, 22:30:13
Hola ingmichel...

pero cual es el problema que designes el campo como identidad, cuando eso el SQL 2000 lo hace....

Otra opción es que te crees un trigger, y al momento de guardar te genere el numero del numsec, asi te evitaras cualquier problema, por que el numero se asignará en el servidor y no en el cliente...

tendrias que hacer un trigger en el evento before insert..

Espero que esto te sirva
Salu2:p:D


k tal bluesteel, veras lo que sucede es que estoy trabajando desconectado, es decir no estoy usando componentes db y no estoy utilizando capos de un query para hacer un insert, por lo que esta descartado el uso del evento before insert, veras, estoy haciendo un mastro detalle y por eso es que no quiero hacer uso del campo identity ya que en ocaciones trae muchos problemas,

duilioisola
08-08-2008, 12:48:33
estoy trabajando desconectado ???
Si estás desconectado, cómo insertas en la base?

no estoy utilizando capos de un query ???
Y cómo lo haces?

De todos modos, puedes utilizar triggers para que calculen el MAX(ID) y lo agreguen automáticamente.

ingmichel
08-08-2008, 20:40:59
Si estás desconectado, cómo insertas en la base?


Y cómo lo haces?

De todos modos, puedes utilizar triggers para que calculen el MAX(ID) y lo agreguen automáticamente.

hola que tal, y como crearia dicho triguer ?, seria para for insert, for delete o for update o todas

duilioisola
09-08-2008, 21:23:46
Debería ser FOR INSERT, pues es dónde se crea.
Cuando hagas una modificación, deberás verificar que no cambie.
Cuando borres, deberías tener un trigger FOR DELETE en la cabecera que borre el detalle, para que no queden líneas huérfanas.