FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Dudas con transacciones
Hola.
Uso Delphi 7, Firebird 1.5.3 e IBX 7.08 Ya lei todos los hilos relacionados con transacciones del foro; pero todavia me quedan algunas dudas: - Cuando se dice que las transacciones no deben quedar abiertas mucho tiempo. Esto se refiere a que una vez ejecutado starttransaction se debe ejecutar inmediatamente un commit o commitretaining??? - Supongamos que tenemos un formulario en donde el usuario debe introducir una gran cantidad de informacion. Durante ese tiempo la transaccion debe quedar abierta hasta que el usuario termine de introducir los datos??? - Cual es momento mas adecuado para iniciar la transaccion. Al crearse el formulario en donde se llenara informacion??? Al momento de hacer click en algun boton de "insertar" o "modificar"??? - Cuando se trabajan con transacciones es adecuado utilizar los controles DataAware (DBEdits, DBComboBox,etc.)??? Muchas gracias de antemano. |
#2
|
|||
|
|||
Solo espero que lo que voy a poner sea lo correcto. Al menos es como yo lo hago.
Cita:
También puede pasar que un registro sea modificado desde varios terminales (casi) al mismo tiempo, por ejemplo, el clasico del stock en los supermercados. La filosofia no es hacer un commit justo al abrir la transacción, sino en no abrir la transacción hasta que no vayas a hacer un commit. Es decir, que recojes los datos, y cuando ya los tienes todos y el usuario esta seguro y quiere aceptar, inicias la transacción, grabas los datos y la terminas. Conseguir esto a veces te obliga a escribir más código, y a utilizar controles no dbaware. Recomiendo la "cara oculta de delphi 6", aunque creo que la versión de delphi 4 tambien es muy buena. Cita:
Cita:
También hay que tener en cuenta los diferentes tipos de transacciones, y buscar el que mejor se ajuste a lo que necesitas. En mi caso, casi todas son "read committed" Espero que te solucione algo. |
#3
|
||||
|
||||
Podrías informarte sobre los ClientsDataset con cacheUpdates. Usas controles DBEdits asociados a ese CDS. Puedes Editar, insertar, eliminar registros, etc, pero realmente los datos no se graban a las tablas, sino que se hace en memoria.
Cuando el usuario Pulsa en Grabar, por código llamas a ApplyUpdates del CDS y en ese momento es cuando inicias la transacción, grabas los datos y despues terminas la transacción. PD: Si me equivoco, por favor corríjanme. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
||||
|
||||
Sick boy y Lepe:
Muchas gracias por responder tan rapido. Me quedan otras dudas. para Sick boy: Cita:
hacer que se llame a STARTTRANSACTION y seguidamente a COMMIT? Cita:
Para Lepe Cita:
Última edición por Hagen fecha: 05-07-2006 a las 15:16:02. |
#5
|
|||
|
|||
Yo personalmente te recomiendo que utilices lo siguiente:
ConsultaIB -> TDataSetProvider -> TClientDataSet En "ConsultaIB" utiliza los componentes de acceso a Interbase que prefieras (siempre que deriben de TDataset). Al usar esta "técnica" lo que consigues es que las actualizaciones se realizan en local, y cuando llamas al método "ApplyUpdates" del TClientDataset, que se encarga de iniciar la transacción, realizar todas las actualizaciones a la base de datos que sean necesarias y a continuación el commit. Sinceramente, tienes que cambiar un poco la mentalidad de cómo se realizan las actualizaciones, además de que cuando quieres realizar cambios en varias tablas a la vez en una sola transacción debes controlarlo manualmente, pero por lo demás es muy sencillo y eficaz. Documéntate sobre ello. Si mal no recuerdo hay varios ejemplos en bdn.borland.com. Y si tienes algo de dinero para invertir, cómprale a Ian Marteens uno de sus cursos a distancia (son de lo mejor para iniciarse en esto) en http://www.marteens.com |
#6
|
|||
|
|||
La solución PROVIDER + CLIENTDATASET parece muy buena, aunque yo aun no la he probado, por eso no puedo opinar.
Como en todo, la solución del PROVIDER tendrá sus ventajas y sus inconvenientes. Cita:
Por ejemplo, al crear una factura, recoges el codigo del producto y la cantidad mediante un par de edits, y luego al pulsar el boton construyes el SQL que hace la inserción. Cita:
Esto es una opinión, seguro que hay otras formas de hacerlo, y posiblemente más eficientes, pero estaba migrando un programa de PARADOX a FB, y esto es lo que me resultó más facil. Añadir que yo no utilizo IBX, uso los MDO (Mercury Database Objects), muy buenos, y libres. Y recomendarte de nuevo la Cara Oculta de Delphi 4, libro gratuito y facil de encontrar. Hay mucha información sobre las transacciones en general. Y en la cara oculta de delphi 6 hay todo un apartado sobre proveedores y modulos remotos y servidores de capa intermedia. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Las transacciones y yo | gario | Conexión con bases de datos | 5 | 16-03-2009 17:23:13 |
Transacciones | JulioGO | Firebird e Interbase | 1 | 07-05-2006 00:46:28 |
dudas sobre transacciones..... | inexperto | Conexión con bases de datos | 2 | 18-11-2004 20:24:31 |
Dudas con Transacciones y Actualizaciones en Caché | cybergerman | Conexión con bases de datos | 3 | 29-09-2004 21:13:03 |
|