Hola Lorenzo.
No entiendo q son los folios.
Este es un foro de VFP, supongo q debería tener un OT el asunto.
Con respecto a las transacciones, el llamado de las mismas es diferente desde VFP, q de cualquier otro lenguaje, Visual Studio en tu caso. Yo divido las transacciones de 2 formas, si la operación va a ser de Lectura o Escritura, de acuerdo a esta situación envío los parámetros correspondientes antes del Select, Update, Insert, etc. El manejo de Transacciones es fundamental p la salud de tu motor SQL y p evitarte dolores de cabeza futuros.
Saludos
Esteban.
En qué momento determinas el numero de folio a asignar a la factura, al iniciar la factura o al grabarla?

CREATE TABLE NUMEROS_FACTURA ( ID INTEGER);
UPDATE NUMEROS_FACTURA SET ID=ID+1 RETURNING NEW.ID
* Preparar la Transacción
SET TRANSACTION READ WRITE READ COMMITTED WAIT
* Bloquear Registro de Facturas_Folio
Select * From facturas_folios WITH LOCK
* Ya localizado el registro lo incrementas, si no lo agregas con insert y ya inicia en 1
Update facturas_folios set folio = folio + 1
De forma local conviertes el valor del folio en carácter, en el ejemplo es el folio 10 y lo guardas en la factura
* Ahora envías a guardar la factura y obtienes el ultimo ID
Insert Into Facturas (serie, folio, ...) values ("F", "000010", ....) RETURNING facturas.id
* Debes actualizar el UltimoID en la tabla de detalles de forma local para luego mandar a guardar la tabla de detalles
insert into ..... etc etc
insert into ..... etc etc
* Si todo salio bien
Commit
* Si algo salio mal
Rollback
* Obtener consecutivo
odb.Code("facturas_folios", "folio", "Serie", "'F'")
* Reemplazar en el folio de la factura
replace facturas.folio ......
* Guardar factura y obtener ultimoId
odb.Update("facturas", .t.)
* Reemplazar ultimo id en detalles
replace facturas_detalles.idfactura with ....... all
* Guardar Detalles
odb.Update("detalles")
* Finalizar transaccion
if odb.Commit()
* Listo
else
odb.Rollback()
* Hay un error
endif
Gracias por el "cumplido" Miguel y te digo lo mismo que a Melanie, si no entiendes es porque seguramente tambien tienes "scheiße" en vez de cerebro.Que tengas un buen dia.
El viernes, 17 de noviembre de 2017, 5:21:02 (UTC-6), Miguel escribió:Luis: Si no es por la aclaración de Melanie, lo tuyo no se entiende nada.
Saludos
Acá tenes resuelto en forma muy simple el tema de las transacciones desde VFP a Firebird.
https://firebird21.wordpress.com/2014/03/31/parametros-de-las-transacciones-usando-visual-foxpro/
Saludos