Número de factura

07/03/2005 - 17:12 por valentín | Informe spam
Hola, os comento un tema que me trae de cabeza a ver si a
alguien se le ocurre algo.

Tengo un sistema de facturación con varios puestos en red
contra una base de datos de MySql.

El problema es cuando quiero obtener un nuevo número de
factura, que ha de ser único e irrepetible. En VB6 yo
bloqueaba para uso exclusivo una tabla que solo contenia
un contador, incrementaba el nº, guardaba el nuevo valor y
el resto de los usuarios no podian obtener números de
factura hasta que este proceso terminase.

El problema es que con ADO.NET no encuentro la forma de
blloquear la puñetera tabla. He intentando aplicar
técnicas que se describen en MSDN de añadir numeros de
versión a los registros, etc. El caso es que no consigo la
seguridad que lograba antes de que los números de factura
no se repetían jamas.

Agradezco cualquier sugerencia

Un saludo al foro

Preguntas similare

Leer las respuestas

#1 A.Poblacion
07/03/2005 - 17:22 | Informe spam
El truco para bloquear la tabla consiste en usar transacciones. Desde que
haces el "Begin Transaction" se va bloqueando todo lo que uses en la base de
datos, hasta que hagas el "Commit".


"valentín" wrote in message
news:3c5c01c52330$8816b8c0$
Hola, os comento un tema que me trae de cabeza a ver si a
alguien se le ocurre algo.

Tengo un sistema de facturación con varios puestos en red
contra una base de datos de MySql.

El problema es cuando quiero obtener un nuevo número de
factura, que ha de ser único e irrepetible. En VB6 yo
bloqueaba para uso exclusivo una tabla que solo contenia
un contador, incrementaba el nº, guardaba el nuevo valor y
el resto de los usuarios no podian obtener números de
factura hasta que este proceso terminase.

El problema es que con ADO.NET no encuentro la forma de
blloquear la puñetera tabla. He intentando aplicar
técnicas que se describen en MSDN de añadir numeros de
versión a los registros, etc. El caso es que no consigo la
seguridad que lograba antes de que los números de factura
no se repetían jamas.

Agradezco cualquier sugerencia

Un saludo al foro
Respuesta Responder a este mensaje
#2 Valentín
07/03/2005 - 18:01 | Informe spam
Pues si, era así de facil

Graciassssss

El truco para bloquear la tabla consiste en usar


transacciones. Desde que
haces el "Begin Transaction" se va bloqueando todo lo que


uses en la base de
datos, hasta que hagas el "Commit".


"valentín" wrote in


message
news:3c5c01c52330$8816b8c0$
Hola, os comento un tema que me trae de cabeza a ver si a
alguien se le ocurre algo.

Tengo un sistema de facturación con varios puestos en red
contra una base de datos de MySql.

El problema es cuando quiero obtener un nuevo número de
factura, que ha de ser único e irrepetible. En VB6 yo
bloqueaba para uso exclusivo una tabla que solo contenia
un contador, incrementaba el nº, guardaba el nuevo valor y
el resto de los usuarios no podian obtener números de
factura hasta que este proceso terminase.

El problema es que con ADO.NET no encuentro la forma de
blloquear la puñetera tabla. He intentando aplicar
técnicas que se describen en MSDN de añadir numeros de
versión a los registros, etc. El caso es que no consigo la
seguridad que lograba antes de que los números de factura
no se repetían jamas.

Agradezco cualquier sugerencia

Un saludo al foro


.

Respuesta Responder a este mensaje
#3 knd
07/03/2005 - 18:24 | Informe spam
Me pasó lo mismo en mysql3 (no acepta transacciones).
Hice aproximadamente lo siguiente:

insert into tabla(numero, importe)
select max(numero)+1 As Numero, 20.5 As Importe

El procedimiento anterior lo ejecuta como una única instrucción, por
lo tanto, tenés la tabla bloqueada hasta que termine de ejecutarse.
Respuesta Responder a este mensaje
#4 EAzoft
07/03/2005 - 18:43 | Informe spam
La realizacion de las transacciones es muy buena pero
supongo que no se te debe de olvidar que debes guardar la
cabecera de la factura cuando guardes la primera linea
para que en ningun momento se encuentre por un error con
una factura sin lineas, en dicho momento es cuando debes
abrir la transaccion, buscar el numero de la nueva
factura, y cerrarla.

Por lo menos eso es lo que yo hago.



Hola, os comento un tema que me trae de cabeza a ver si


a
alguien se le ocurre algo.

Tengo un sistema de facturación con varios puestos en


red
contra una base de datos de MySql.

El problema es cuando quiero obtener un nuevo número de
factura, que ha de ser único e irrepetible. En VB6 yo
bloqueaba para uso exclusivo una tabla que solo contenia
un contador, incrementaba el nº, guardaba el nuevo valor


y
el resto de los usuarios no podian obtener números de
factura hasta que este proceso terminase.

El problema es que con ADO.NET no encuentro la forma de
blloquear la puñetera tabla. He intentando aplicar
técnicas que se describen en MSDN de añadir numeros de
versión a los registros, etc. El caso es que no consigo


la
seguridad que lograba antes de que los números de


factura
no se repetían jamas.

Agradezco cualquier sugerencia

Un saludo al foro

.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida