Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problema entre distintas CPU's (https://www.clubdelphi.com/foros/showthread.php?t=30352)

jsanchez 04-04-2006 17:04:44

Problema entre distintas CPU's
 
Hola foro,

Se me presentó un problema,

Yo trabajo con FireBird 1.5, y en delphi utilizo el BDE.

Tengo dos Tablas maestro-detalle, se puede decir que: factura y detalle_factura, las dos tablas tienen sus llaves primarias codigo, y detalle_factura tiene una referencia a factura con el campo código.

Hay un proceso en el cierre que pasa al histórico_factura y historico_detalle_factura, con la misma estructura de llaves primarias y referenciales. Este proceso se hace en una transacción por si hay algún problema poder hacer el rollback. En el ordenador que programo no hay ningún problema y a la hora de hacer el paso al historico lo hace. Lo probé en otro ordenador, también en local, la misma base de datos, evidentemente el mismo ejecutable, y cuando va a pasar al historico, al hacer el insert en la tabla historico_detalle_factura, me dice que se ha violado la llave referencial, habiendose hecho previamente el paso a la tabla Historico_factura, eso si, dentro de una transacción.

Lo que no entiendo es porque en un ordenador si funciona y en otro no.

Si alguien me pudiera ayudar, lo agradecería.


Gracias por la ayuda.

ggram2 07-04-2006 01:02:31

Para tratar de enterle la pregunta seria bueno conocer que componentes usa, Lo que se supone es que el detalle haga Post primero que el master y por eso sale el mensaje.

jsanchez 07-04-2006 16:28:31

No utilizo controles como tales, sino que utilizo variables tQuery y le doy open para consultas y execSQL para ejecutar inserts.

Tengo que insertar primero el maestro porque tiene que estar el codigo de referncia en la tabla maestro y luego inserto el detalle. Esto está dentro de una transacción, si todo sale bien, se hace el commit, si no el rollback. Esto funciona bien en un ordenador, pero en otro ordenador al ejecutarlo sale que se está violando un constraint.

Lepe 07-04-2006 17:07:54

Si has copiado la definicion de la tabla factura (con sus generadores) para hacer la tabla factura_histórico, no puedes pasarle el número del generador a la tabla de histórico, (porque esa tiene su propio generador), o incluso puede estar cogiendo el generador de la tabla factura (cuando debía coger el generador de la tabla factura_historico).

Sin tener mucha experiencia, creo que la tabla de histórico no debe tener generadores (al menos que tenga un campo aparte que sea la clave primaria), así puedes copiar los autoincrementales perfectamente.

La tabla detalle_factura si tendrá su generador, pero detalle_factura_historico no debe tenerlo. Este caso es más fácil de entender, el generador de detalle_factura puede ir por 2.000 y sin embargo en detalle_factura_historico puede estar a cero.

Saludos y espero se me entienda...que no se yo.... :D


La franja horaria es GMT +2. Ahora son las 07:21:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi