![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
|
Transacción no activa
Buenas tardes. A ver si me explico: Tengo dos tablas (Facturas Y Detfactura) en una base de datos FB; en la primera guardo los datos de cabecera de las facturas y en la segunda las líneas de detalle de cada una de ellas.
Para grabar en la primera tengo este query: En la misma tabla guardo albaranes y facturas por comodidad. Una vez que he guardado estos datos hago esto con otro query antes de grabar el detalle del documento: Lo curioso es que el primer query, el de grabación, se ejecuta sin problema pero al tratar de ejecutar el segundo para sacar el número de documento que se ha generado me da un error: me dice que la transacción asociada al query no está activa. El primer query tiene asociada una transacción que he llamado tTpv y el segundo otra distinta que he llamado tAuxiliar y que en ningún momento desactivo ni detengo ni nada. Llevo todo el día dándome de tortas con estas líneas de código y no sé por qué se produce ese error. En el formulario donde tengo declarada la BB.DD. y demás hay esto: ![]() Ejecutando con el depurador, antes de ejecutar el primer query puedo ver esto: ![]() Después del ExecSQL() queda así: ![]() La segunda transacción, que está activa, es la que está asociada al segundo query, pero me da ese error que indico. |
|
#2
|
||||
|
||||
|
Al hacer Transaction->Commit / Rollback se cierra la transacción.
Luego de esto hay que hacer un Transaction->StartTransaction. Supongo que tienes una sola transacción asociada a la base de datos. En ese caso, suelo poner antes de hacer e Query código que inicia la transacción si está cerrada. Código:
if (not Auxiliar->Transaction.InTransaction) then
Auxiliar->Transaction.StartTransaction;
Auxiliar->Close();
Auxiliar->SQL->Text = "SELECT GEN_ID(ID_" + (fFacturas->Tag == 1 ? (String)"Tiquet" : (fFacturas->Tag == 2 ? (String)"Albaran" : (String)"Factura")) +
", 0) Valor FROM RDB$DATABASE";
Auxiliar->Open();
|
|
#3
|
||||
|
||||
|
También puedes ejecutar cada sql en una transacción distinta.
Yo lo hago así en Delphi:
|
|
#4
|
||||
|
||||
|
Una solución ¿temporal? un poco chapucera, pero que funcionará:
Cambia esto: Query->Transaction->Commit(); Por Query->Transaction->CommitRetaining(); Y cuando salgas de la pantalla de ventas haces un commit para asegurarte de que se cierran todas las transacciones.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#5
|
||||
|
||||
|
Gracias por vuestras respuestas.
Cita:
![]() La otra sugerencia (StartTransaction) la había probado pero poniendo el código después del Close(); probaré como indicas. También probé con CommitRetaining(), pero me daba el mismo error. No obstante, en el caso de querys sólo de consulta ¿es necesaria la transacción? Es una duda que siempre he tenido ya que estaba convencido que eran necesarias únicamente en caso de actualizar la BB.DD. Sé que tengo muchas carencias en estos temas y tiene que ver en al forma que he aprendido a programar, a puñetazos. ![]() |
|
#6
|
||||
|
||||
|
Cita:
Y funciona perfectamente. Se ve que fFacturas->Tag == 1 ?..., que siempre me ha funcionado bien, ha decidido que a partir de ahora ya no vale. |
|
#7
|
||||
|
||||
|
Cita:
Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. Última edición por olbeup fecha: 08-11-2025 a las 19:53:45. Razón: Aclaración |
|
#8
|
||||
|
||||
|
Tienes razón @olbeup. El campo debe devolverse como entero mediante .AsInteger. He adaptado a mano un código similar que tengo para obtener descripciones de cosas dado un código.
Lo de capturar la excepción depende del contexto. En este caso en particular yo prefiero dejar que la excepción llegue a evitar que se ejecute lo que venga dentrás. Es más fácil que hacer if resultado <> -1 then ... para cada petición.
|
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| No activa la webcam | trex2000 | Gráficos | 3 | 30-05-2024 08:32:40 |
| App MDI Tabla Activa | pockelsm3 | Conexión con bases de datos | 4 | 15-11-2015 01:07:09 |
| No se activa tabla | Phacko | Tablas planas | 8 | 01-02-2012 19:50:32 |
| Impresora activa | botones67 | Impresión | 6 | 27-10-2005 14:18:24 |
| Urgente - problema de insertar en tabla - Transaccion Activa | Patricio | Conexión con bases de datos | 2 | 27-06-2005 16:29:06 |
|