![]() |
Tabla en tiempo de ejecución
De antemano gracias por al menos leer mi problema.
Uso Delphi 7, con Firebird (creo versión 1.5). En tiempo de ejecución creo una tabla llamada L20101228A, una vez creada no puedo acceder a ella. En el Datamodule tengo. 1- Tibdatabase 2- IbTransaction 3- TibTable 4- Tdatasource. Las únicas formas que he conseguido acceder a ella son: 1- Haciendo close del tibdatabase y volviendo abrir, con el problema que me vuelve a pedir el password y no es una opción lógica ni agil. 2- Saliendo del programa y volviendo a entrar (gran solución informática por excelencia. Agradecería algo de luz. He probado. IBTransaction2.Commit; IBTransaction2.StartTransaction; Pero da error de metada la table L20101228A no exist. Gracias por su ayuda. |
Está claro que la lógica dice que no deberías tener que reabrir la conexión de la Base de Datos. Lo lógico sería:
BeginTransaction CrearTabla CommitTransaction Desde ese momento deberías verla. Si no es así o si al cerrar la conexión sí existe puede ser que no tengas bien configurada la transacción. |
Cita:
Ibtransaction lo tengo configurado de la siguiente manera. Active True AutostopAction saNone Default Action TaCommit Default database IBDatabase2 idletimer 0 Name IBTransaction2 Params (vacío) Tag 0 La base de datos está abierta pues en ella tengo otras tablas que necesito para trabajar. Si uso... IBTransaction2.StartTransaction; me dice que ya está abierta. También he probado hacer lo siguiente... if dm.IBTransaction2.InTransaction then begin dm.IBTransaction2.Commit; dm.IBTransaction2.StartTransaction; end; Pero no sé donde falla. Gracias de nuevo. |
Cita:
Si las haces manualmente debes hacerlas en ese orden. Debes (1) Iniciar la transacción, (2) Crear la tabla y (3) finalmente aceptar la transacción y acabarla con CommitTransaction (o la orden que sea). Pueden variar los nombres, pero el orden de las operaciones debe ser ese. |
Cita:
Gracias. |
Cita:
(1) Iniciar_la_transacción (2) Crear_la_tabla (3) Realizar_Commit_de_la_transaccion Debe ser que hoy no e explico bien... |
Cita:
Venga gracias. |
Bueno... creo que lo solucioné... Antes de explicar cómo quiero agradecer la ayuda recibida.
La base de datos que uso tiene tablas fijas y otras que las tengo que crear en tiempo de ejecución. 1- En el datamodule, activo el database ibdatabase2.Params.Values['Password'] := '*****'; ibdatabase2.Connected := true; ibtransaction2.StartTransaction; 2- En el Form. Después de crear la tabla, ejecuto un.. dm.IBTransaction2.Commit; Esto hace que todas las tablas del Database queden sin acceso. 3- Restablezco el acceso en el momento necesario. if dm.IBTransaction2.InTransaction then begin dm.IBTransaction2.Commit; dm.IBTransaction2.StartTransaction; end; Si no lo condiciono al hacer el estart, me da error diciendo que la base de datos ya está activa. A partir de aquí ya todo funciona correctamente. Gracias por las ideas recibidas. Campiki |
| La franja horaria es GMT +2. Ahora son las 10:34:36. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi