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)
-   -   registros grabados pero no los muestras (https://www.clubdelphi.com/foros/showthread.php?t=67812)

José Luis Garcí 07-05-2010 14:11:42

registros grabados pero no los muestras
 
Hola compañeros, lo que me ha ocurrido es muy extraño, primero informaros de que trabajo con delphi 2010, la base de datos es Firebird 2.0-2.1 (no recuerdo exactamente) y uso ibexpert para trabajar con la base de datos y los componentes de delphi 10 pestaña Interbase.

Lo que me ha ocurrido hoy es lo siguiente, modifique con ibexpert la tabla Lotes añadiendo unicamente un campo NOTAS tipo BLOB Size 80 subtype Text hago el save y el commit, paso a delphi, desactivo la base de datos agrego el campo al ibtable, me aseguro de activar los datos. Hasta aquí todo bien, agrego los componentes y no toco el código. Ejecuto, meto 4 nuevos lotes y parece todo ir bien, cierro hago cambios en otro modulo del programa, compilo y ejecuto , compruebo los nuevos cambios y todo bien, pero cuando vuelvo al modulo de datos, esta ene el mismo que antes de meter los 4 lotes nuevos, no me los muestra, pero al intentar crearlos de nuevo, el try Except me confirma que el registro con ese lote ya existe, voy a iberexpert y ahí están los cuatro registros,
Teneis idea de por que ocurre estos pues he perdido tres horas intentando arreglarlo y no hay manera.

guillotmarc 07-05-2010 16:01:31

¿ Transacciones ?.

Cuando abres una transacción, es como si hicieras una foto de la Base de Datos, y mientras esté abierta la transacción solo verás eso. Por más que se introduzcan datos desde otras transacciones, nunca los verás dentro de una transacción que haya sido abierta anteriormente.

Así pues, en el módulo donde no ves los nuevos registros, asegúrate de que inicias la transacción en el momento de consultar los datos, puesto que si estás usando una transacción abierta anteriormente, nunca verás la nueva información.

Saludos.

José Luis Garcí 07-05-2010 17:16:54

Probare, Guillotmarc, aunque he de reconocer que me pierdo en delphi, por eso aunque peque de ignorante podrías explicarme que es la Transaccion, de esto no es lo que se encarga el ibtrans...

guillotmarc 07-05-2010 19:31:27

Hola.

Toda consulta o acción en Firebird debe realizarse dentro de una transacción.

Sí, de eso se encargan componentes como el IBTransaction. Tienes que llamar al StartTransaction cuando quieras que empiece la transacción, y a Commit cuando la quieras finalizar.

Saludos.

José Luis Garcí 07-05-2010 20:18:22

Gracias de nuevo Guillotmarc, no conocia el StartTransaction, pero lo que si que hago es un CommitReanig (o parecido).

guillotmarc 07-05-2010 20:27:03

Para este caso utiliza el Commit en lugar del CommitRetaining (que deja la transacción abierta), y abre manualmente las transacciones cuando quieras ver los datos.

Ahora mismo estás dejando que los componentes abran las transacciones por si solos, con lo que no tienes control de cuando se hace. Y con el CommitRetaining las transacciones quedan abiertas.

Si quieres ver los nuevos datos, la consulta se tiene que hacer en una transacción abierta "después" de que se hayan entrado los datos en el otro ordenador/módulo y finalizado su transacción correspondiente.

Saludos.

José Luis Garcí 08-05-2010 12:57:07

HE probado lo que me dices y Quitando el auto estar del Ibtrans. cuando voy a grabar previamente abro la tansancion y grabo con el Commit en vez de con el CommitRetaining pero me da un error de transancion ya abierta y si desactivo el actibe del ibtrans. se me desactivan todas las bases de datos.

ÇQue es lo que hago mal. Como Siempres gracias por tus respuestas.

José Luis Garcí 09-05-2010 10:14:48

Os comento logre solucionar mi problema, sigo con el tema de transicion activa y lo que hice para evitarlo fue comprobar si el TIBtransiction estaba activo o no,
pero la solución, era que los registros que ya sabia que estaban en la tabla, pero el problema era que no estaban al final de la misma, y por eso no se veían en orden, no puedo usar un generador ya que esta contador cada vez que empieza el año cambia y empieza desde el numero del año +1 Su formato de este año sería (100001), lo que hice fue cambiar el Tibtable por TIbDataset y especificar el selectSql
Código Delphi [-]
Select * From Lotes Order By LOTE
y asunto arreglado.


De todas maneras muchas gracias Guillotmarc, gracias a tu explicación, me queda un poco más claro el uso del componente, auque tengo dudas del AllowAutoStart y del Idlertimer (supongo que es un timer en mili segundos, para aplicar el Defaultaction) y si es así se puede poner a 0 y que no ejecute ninguna acción.


La franja horaria es GMT +2. Ahora son las 08:15:20.

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