![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
como obtiene el ultimo id de una tabla
Ya se que existe el metodo last_insert_id() en mysql pero hay casos en que si falla una transaccion el valor no se restaura.
Por otro lado usa max(idticket) es erroneo porque se puede pisar el valor. En mi caso tengo la tabla ticket ocn su cabecera y el detalle del ticket en otra tabla venta. Entonces necesito el ultimo id de ticket para la tabla venta que es varios a varios(en venta se guarda el idticket idproducto precio y cantidad). Me han recomendado tener en el servidor de aplicaciones (ya que estoy trabajando con datasnap) un metodo con un query asociado a una tabla con un solo campo, que sume 1 a este entero y luego seleccione el valor, pero el tema es que tengo que tener un metodo como este para cada tabla. Es decir la pregunta es como se hace para obtener el ultimo id de ticket a un habiendo transacciones simultaneas (es decir varios users insertando tickets a la vez). Se deberia bloquear el siguiente registro? |
|
#2
|
||||
|
||||
|
Si no he entendido mal, puedes valerte de un bucle al grabar.
En plan muy "rústico":
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#3
|
|||
|
|||
|
Es que de hecho hice una funcion que obtiene el ultimo id y le suma 1 antes de insertar en la tabla maestro...
Tambien estuve leyendo que FireBird no utiliza campos autoincrementales justamente por este motivo.. en vez de esto es un campo integer pero el valor lo genera el servidor de aplicaciones o el programa, no el motor de base de datos. Que te parece tener una tabla con un solo campo: ULTIMO(ultimoidticket) entonces cada transaccion suma 1 y se queda con el valor.. de esta forma no se pisan los valores, y no hay que esperar a que una transaccion finalize para empezar la otra. |
|
#4
|
||||
|
||||
|
No entiendo, ¿quiéres un incremental, aunque se salten números? ¿o quieres un número consecutivo y que no se salte ninguno?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal Última edición por Casimiro Noteví fecha: 15-05-2015 a las 11:08:20. |
|
#5
|
|||
|
|||
|
Cita:
Es que si es un entero de 32 bits tiene millones de posiciones... osea con lo anterior se soluciona el problema de conecurrencia, si hay 2 o mas pc s haciendo ticket.. la verdad no interesa si se saltea un numero.. De hecho si una transaccion falla sobre un autoincremental y el ultimo idticket era 17, el 18 no se ocupa nunca mas.. si la proxima transaccion tiene exito sera el 19... La funcion last_insert_id() retornara 18 para referenciar el ticket en la tabla detalleticket por lo tanto no sirve... Y la funcion max(idticket) si falla el 18 la proxima vez sera 18, pero no sirve porque si 2 pc generan esa consulta.. ambos detalles de ticket corresponderan al mismo ticket.. porque devolvera 18 en ambos casos... |
|
#6
|
||||
|
||||
|
Porque no se entiende qué quieres exactamente.
Por lo que dices, lo que buscas en un id "normal y corriente", para eso están los generadores autoincrementales, nunca jamás se repiten. Lo que comentas de bloqueos y repetirse, etc. no ocurre con ellos.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Como obtener un ultimo registro de una tabla!! | Caray | Varios | 4 | 09-07-2008 03:55:35 |
| Extraer ultimo campo de tabla | Petolansa | Varios | 4 | 26-10-2007 02:39:53 |
| Consulta que obtiene campos de una tabla u otra según condición | Gabo | SQL | 10 | 20-08-2007 08:53:02 |
| como conocer el ultimo valor autonumerico creado de una tabla | Tama | MS SQL Server | 8 | 16-06-2004 19:14:30 |
| Ir al último registro de una tabla | fortran | Tablas planas | 6 | 05-09-2003 16:36:02 |
|