![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
pues eso es básicamente lo que tendrías que hacer. Solamente la variable "Level" es opcional en caso de vayas a manejar varias transacciones anidadas y quieres llevar el control de cada trasancacción, si no quieres llevar el control específico por cada transacción, pues no sería necesaria esa variable.
Como "cuestión de estilos" a mi no me gusta usar la excepción general "E:Exception", prefiero usar la clase específica para darle un manejo específico a cada tipo de error. Y Finalmente, en el bloque de código que pones, en caso de ocurrir un error, se hace el "rollback", pero no se muestra ningún mensaje por lo que el usuario nunca se enteraría del error. tendría que ser algo como:
Importante: el mensaje debe de ir siempre después del "rollback", si lo pones antes, el "rollback" se ejecutará hasta después de que le den "aceptar" y está científicamente comprobado que si el usuario se está tomando un café (o apenas fue a hacerlo) se va a tardar mucho en darle aceptar y la base de datos se queda bloqueada por que la transacción no termina.
__________________
|
|
#2
|
||||
|
||||
|
Perfecto !!!!
__________________
Dulce Regalo que Satanas manda para mi..... |
|
#3
|
||||
|
||||
|
retomando este tema
se me ha presentado un problema tengo una tabla que esta en constante actualización, el asunto es que tengo que agregar nuevos registros a esta tabla hay un campo que se llama formulario, lo obtengo generando el MAX del campo y le sumo 1, el asunto es que cuando estoy tratando de obtener el ultimo numero para sumarle uno, alguien mas en la web (php) que usa esta misma tabla ya capturo y grabo ese numero, por lo cual me aparece el mensaje de error (porque es un campo PK) que no acepta duplicados uso transacciones
el tema es que ahora estoy usando Firedac que estoy haciendo mal ? no podria bloquear la tabla para grabar el registro q quiero y despues liberarla ? o estoy usando mal las transaciones
__________________
Dulce Regalo que Satanas manda para mi..... |
|
#4
|
||||
|
||||
|
La primera opción sería usar un campo AutoIncremental, si es que lo tienes disponible, con eso evitas trabajo (buscar el máximo y sumar 1) y evitas problemas.
Si no puedes usar Autoincrementales, debes hacer ambas operaciones dento de la misma transacción. Si es necesario, modificas el IsolationLevel de la transacción y con eso deberías eviar duplicados. Aunque como he comentado, no es la práctica recomendable en SGBD's bloquear tablas. Las transacciones son para otros menesteres.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#5
|
||||
|
||||
|
Cita:
Esta es la clave. Cita:
https://stackoverflow.com/questions/...y-alternatives Como funciona un max? Tienes un MILLON de registros. La BD por defecto, recorre el MILLON de registro comparando si este es mayor al anterior. Al final, da un resultado. Luego le sumas 1. Esos significa que estas introduciendo una ESPERA. Eso genera una ventana para que otra operacion compita contigo. (Con un indice se puede agilizar el proceso. Igual, es una demora) En otras palabras, el orden de ejecucion en una RDBMS NO ES deterministico, sino aleatorio. (a menos que uses una transaccion, pero nota mas abajo). La forma de tener tu propio generador:
Solo son LOCALES A TU OPERACION. No hay una forma *eficiente* de hacer transacciones globales, y lo que hay implica meter un monton de asuntos que es mejor no lidiar con ellos. Cita:
----- Asi, que que hacer? El problema que tienes te grita: Tu diseño esta errado. Deja que la BD genere IDs. A menos que presentes un escenario justificable, yo pararía ahi.
__________________
El malabarista. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| tablas en sql server demasiadas tablas | yeison Cristman | SQL | 8 | 10-08-2006 16:26:36 |
| Uso SQL Server, las tablas no se refrescan | yeison Cristman | SQL | 4 | 09-08-2006 07:07:54 |
| bloqueo de tablas | davidgaldo | Conexión con bases de datos | 0 | 26-11-2004 13:23:56 |
| Bloqueo de tablas en dbase | metronio | Tablas planas | 1 | 29-09-2004 14:20:41 |
| Tablas de sistema SQL SERVER | fjcg02 | SQL | 3 | 29-12-2003 14:07:48 |
|