FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
|||
|
|||
AzidRain, y nunca ha tenido problemas cuando necesita grabar 2 registros (2 Post) antes de hacer un ApplyUpdates ?
En mi caso debo crear algo así como el detalle de una factura, entonces creo el encabezado (factura) (1 Post) y luego el detalle (DetalleFactura) que son varios registros (varios Post), cuando se completa la operación debo hacer el Apply, pero en el 2do Post me sale el error 'Key Violation' |
#2
|
||||
|
||||
El error te sale porque estas tomando y asumiendo que el valor que tienes en folio o clave de las 2 facturas que estás editando es el mismo. La clave la debes obtener hasta que ya vayas a guardar el encabezado y posteriormente pasarla al detalle. Para ello puedes hacer lo siguiente, grabas la cabecera (sin indicar la clave o folio) inmediatamente despues obtienes que número le fue asignado usando "LAST_INSERT_ID" y ya con ese número actualizas el detalle y lo guardas y listo. "LAST_INSERT_ID" te devolverá siempre el último valor autoincrementado que te asignó el motor sin importar si otros usuarios antes o después que tú hicieron lo mismo. Ojo, tienes que abrir una transacción para hacer todo esto para que si ocurre cualquier error no te quedes con una cabecera sin detalle.
En resumidas cuentas tienes que hacer toda tu operación SIN saber que clave le corresponde a la cabecera, eso lo dejas hasta el final. Al usuario si quiere le muestras el folio asignado hasta el momento en que terminas las actualizaciones a la BD, antes NO.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#3
|
|||
|
|||
AzidRain, gracias por la recomendación es muy pertinente, sin embargo la PRIMARY KEY de la tabla Detalle es un campo AUTOINCREMENT, es decir, independiente de saber o no la clave de la cabecera, esa no es la clave principal, sino el campo AutoInc de la misma tabla Detalle cuyo valor no conozco en ese momento, de hecho el NroFactura (Id de la respectiva tabla cabecera) lo manejo desde otra tabla de consecutivos, por lo que al grabar el datalle si conozco el NroFactura.
|
#4
|
||||
|
||||
Yo creo que no necesitas el autoincrement en la tabla de detalle ya que muy seguramente la estructura de la tabla ya incluye como clave foránea el número de factura. Podría ser una clave compuesta que incluya el número de factura y el número de línea de detalle, el cual no tiene que ser autoinc. ya que no necesitas llevar la cuenta de cuantas líneas has insertado en todas las facturas sino solo en cada una. De esta manera podemos identificar cada fila como única a partir de su número de factura y número de línea.
Sería bueno ver la estructura de las 2 tablas
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#5
|
|||
|
|||
tema resuelto en el siguiente hilo: http://www.clubdelphi.com/foros/show...ear#post476477
Gracias a AzidRain por sus aportes ... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Auto carga de clases en PHP 5 | dec | PHP | 1 | 08-03-2008 22:37:13 |
EAN 128 Auto Switch ?? | ofillia | Varios | 2 | 02-02-2007 19:07:03 |
auto incremento | valentino | MySQL | 1 | 14-02-2005 12:59:33 |
Auto borrado | brandolin | Varios | 6 | 27-09-2003 21:18:37 |
Auto Crear Forma | cmgenny | Varios | 2 | 13-05-2003 13:46:03 |
|