Ver Mensaje Individual
  #15  
Antiguo 02-01-2013
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Reputación: 16
orodriguezca Va por buen camino
Creo que lo que está ocurriendo es lo siguiente: La aplicación originalmente está funcionando para un solo PC y la base de datos está sobre ese PC. En el modulo de datos el componente de conexión está "alambrado" a esa base de datos y además la conexion ibdatabase1 está abierta en tiempo de diseño. Cada una de las tablas que están asociadas a está conexión también está abierta. La aplicación se compila, se ejecuta y todo funciona a la perfección.

Cuando se modifica la aplicación para funcionar en red se le adiciona el código para que en tiempo de ejecución establezca la conexión a la base de datos:

Código Delphi [-]
 BasedeDatos := ElIniFile.ReadString('BD','Path','');

pero la base de datos sigue abierta en tiempo de diseño, por tanto, cuando se intenta ejecutar la instrucción anterior obtenemos el mensaje: Cannot perform operation -- db is currently open.

Debes cerciorarte que la base de datos esté cerrada en tiempo de diseño, o sino va a intentar conectarse a una base de datos en el PC local tan pronto inicie la aplicación y antes de que se ejecute el código que configura la conexión.

Por otro lado cuando aplicas la sugerencia de casimiro
Código Delphi [-]
ibdatabase1.Close;
ibdatabase1.DatabaseName:=BasedeDatos; 
ibtablaclientes.Active:=true;

El mensaje de error lo obtiene sobre la tabla ibtablaclientes y no sobre la base de datos ibdatabase1. Sugiero que pruebes lo siguiente (verificando previamente que la base de datos no está abierta en tiempo de diseño):
Código Delphi [-]
ibdatabase1.Close;
ibdatabase1.DatabaseName:=BasedeDatos; 
ibdatabase1.open;  //estoy añadiendo esta línea para abrir explicitamente la base de datos
ibtablaclientes.Active:=true;

Quizás esto no solucione definitivamente el problema pero nos puede proporcionar un mensaje de error que nos acerque más a la solución.
Responder Con Cita