Ver Mensaje Individual
  #4  
Antiguo 18-08-2003
Avatar de Voutarks
Voutarks Voutarks is offline
Miembro
 
Registrado: jul 2003
Ubicación: Islas Canarias
Posts: 118
Reputación: 21
Voutarks Va por buen camino
Bueno, en el post anterior hablaba de la situación más logica. A ver cómo se hace eso con Delphi. Puse que era fácil utilizar varias transacciones porque ahora uso los componentes IbObjects y con ellos se pueden asignar varios objetos 'Transaction' a un solo 'Connection' y luego decir a cada grupo de sentencias SQL que transacción utilizan, con lo que ya está todo solucionado. No todo el muno usa estos componentes, asi que perdón por el lapsus.

Con los componentes estándar de Delphi: para utilizar varias transacciones podríamos crear dinámicamente componentes de acceso a datos y manejarlos así, sobre la marcha, aunque la programación de esto es algo complicada. Es decir, crear un 'Transaction', un 'Connection', un 'Query', etc para cada ventana que se abra con lo que sería como si el usuario ubiese ejecutado la aplicación otra vez. Una opción que nadie usaría sería tener varios juegos de componentes de acceso a datos, uno para cada ventana MDI que se pueda abrir... pero ya digo, ni lo pienses.

Bien eso era para utilizar varias transacciones, pero ahora te voy a decir lo que yo haría, en tu caso:
Supongo que se te pierden los datos del otro formulario porque utilizas controles enlazados a datos. Personalmente no me gusta utiliazr estos controles, únicamente algún que otro DbGrid, y de solo lectura, donde es necesario (aunque yo he llegado a utilizar un StringGrid que 'cargo' tras una consulta SQL). Lo perfecto para ti serían controles normales, los cuales 'cargas' de datos.

Por pasos: Al abrirse un formulario abres la transacción, haces una o varias consultas para traer los datos, cierras la transacción. Después de que el usuario ha insertado o modificado los datos en el formulario y le da a un botón de aceptar entonces abres la transación, mandas los datos con un INSERT o UPDATE y cierras la transacción inmediatamente.

Así no queda la transacción abierta en ningún momento y no hay ningún problema con que el usuario maneje varios formularios a un tiempo. Si tienes, por ejemplo, algún control DbLookupComboBox, pon un simple Combobox y con una pequeña instrucción SQL 'cargas' la lista desplegable con los datos que interesan. Luego, al enviar la sentencia de inserción o modicicaión, primero lo compruebas para enviar el valor correcto.

Como ves, todo esto lleva más programación, pero los resultados lo merecen.
Responder Con Cita