Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2012
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
mensaje error db is currently open

Hola a ver si me podeis ayudar:

Tengo creado una base de datos en interbase, y funciona bien a modo monopuesto, intento hacerlo en red, y que ambos compartan la misma base de datos, cree el siguiente código:

Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
Var
     BaseDeDatos: String;
     ElIniFile: TIniFile;
begin
   // Obtiene la ruta y el nombre de la base de datos
   ElIniFile := TIniFile.Create(ExtractFilePath(Application.exename)+'BDatos.ini');
   BasedeDatos := ElIniFile.ReadString('BD','Path','');
   If BasedeDatos = '' then
    ShowMessage('Error al cargar Base de Datos') else
    ibdatabase1.DatabaseName:=BasedeDatos;   // BaseGeneral es el TIbDatabase y le asigno la ruta de la base de datos segun .ini
    ibtablaclientes.Active:=true;
end;

en el archivo BDatos.ini el siguiente:

[DELPHI[BD]
path="192.168.1.34:C:\Maestros1\MAESTRO.IB"][/delphi]

Pero me da el error del encabezado

Cannot perform operation -- db is currently open.


Gracias.
Responder Con Cita
  #2  
Antiguo 20-12-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En teoría es que estás intentando abrir una base de datos abierta, ciérrala antes.
Responder Con Cita
  #3  
Antiguo 20-12-2012
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
NO creo que sea eso, ya que sí me funciona con un sólo Pc bien, pero al ponerlo en red da el error, como prueba he puesto en el databasename directamente la dirección 192.168.1.34:C:Maestros1\Maestro.Db, pero se automaticamente todas las tablas se me ponen en active=false, y me da el siguiente error:

Unabled to complete network request to host "192.168.1.34:3050"
Falled to establish a conection.
unknowm Win32 error 10060
Responder Con Cita
  #4  
Antiguo 20-12-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por ginesgomezlopez Ver Mensaje
NO creo que sea eso, ya que sí me funciona con un sólo Pc bien, pero al ponerlo en red da el error, como prueba he puesto en el databasename directamente la dirección 192.168.1.34:C:Maestros1\Maestro.Db, pero se automaticamente todas las tablas se me ponen en active=false, y me da el siguiente error:

Unabled to complete network request to host "192.168.1.34:3050"
Falled to establish a conection.
unknowm Win32 error 10060
Hola.

¿ Ya le habilitaste a Firebird el puerto 3050 en el firewall del servidor ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 20-12-2012
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
Sí le abrí en el Firewall de windows del servidor el puerto 3050 tanto en TCP como en UDP, pero sigue dando el mismo error, estoy usando el interbase 2009 server, en el momento que cambio en el databasename a 192.168.1.31:c:\Maestros1\Maestro.ib, la verdad que no sé qué hacer.
Responder Con Cita
  #6  
Antiguo 20-12-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Has hecho la prueba de lo que te contesté?

Código Delphi [-]
ibdatabase1.Close;
ibdatabase1.DatabaseName:=BasedeDatos; 
ibtablaclientes.Active:=true;
Responder Con Cita
  #7  
Antiguo 20-12-2012
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
Sí probé, pero sale un mensaje diciendo:

ibTablaClientes:Cannot perform this operation on a closed dataset

y sino:

Unabled to complete netword request to host "192.168.1.34:3050"
Responder Con Cita
  #8  
Antiguo 20-12-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ginesgomezlopez Ver Mensaje
Unabled to complete netword request to host "192.168.1.34:3050"
¿Puedes poner la cadena de conexión que usas?
Y de paso todas los datos que usas para conectar.
Responder Con Cita
  #9  
Antiguo 20-12-2012
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
En Bdatos.ini

Cita:
[BD]
path="192.168.1.34:C:\Maestros1\MAESTRO.IB"

En Delphi:

Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
Var
     BaseDeDatos: String;
     ElIniFile: TIniFile;
begin
   // Obtiene la ruta y el nombre de la base de datos
   ElIniFile := TIniFile.Create(ExtractFilePath(Application.exename)+'BDatos.ini');
   BasedeDatos := ElIniFile.ReadString('BD','Path','');
   If BasedeDatos = '' then
    ShowMessage('Error al cargar Base de Datos') else
//    ibdatabase1.Close;
    ibdatabase1.DatabaseName:=BasedeDatos;   // BaseGeneral es el TIbDatabase y le asigno la ruta de la base de datos segun .ini
    ibtablaclientes.Active:=true;
end;
end.


En propiedades del Database1

en Dabatabasename=C:\Maestros1\Maestro.ib
Responder Con Cita
  #10  
Antiguo 20-12-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Qué componentes estás usando?
Responder Con Cita
  #11  
Antiguo 21-12-2012
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
Uso un IbDatabase donde:

Databasename= C:Maestros1\Maestro.ib por que 192.168.1.34:C:\Maestros1\Maestro.ib pone las 14 Tablas en Active=false

DefaultTransaction= IBTransaction1

Uso un IBTransaction1 donde:

DefaultDatabase= IbDatabase1

Uso 14 TIbTables conectados cada uno a su tabla mediante TableName y donde:

Database = IBDatabase1
Transaction = IBTransaction 1

Uso 14 TDatasources conectados cada uno a su tabla mediante su dataset correspondiente.
Responder Con Cita
  #12  
Antiguo 21-12-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Trabajas con tablas?, no es lo más adecuado, aunque ese no sea el tema aquí.

Cita:
Empezado por ginesgomezlopez
Databasename= C:Maestros1\Maestro.ib por que 192.168.1.34:C:\Maestros1\Maestro.ib pone las 14 Tablas en Active=false
Eso no lo entiendo.

Cita:
Empezado por ginesgomezlopez
Uso 14 TDatasources conectados cada uno a su tabla mediante su dataset correspondiente.
Eso tampoco lo entiendo, la tabla es un dataset, ¿cómo dices que está conectada mediante su dataset correspondiente?
Responder Con Cita
  #13  
Antiguo 22-12-2012
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
Bien, vamos a ver, en Ibconsole creo la base de datos, en la cual creo varias tablas, por ejemplo clientes y proveedores, por simplificar, una vez hecho esto, me voy a Delphi y creo un Tdatamodule, al cual inserto:

Cita:
TBDatabase
IBTransaction
IBTable1 (clientes)
IBTable2 (Proveedores)
IBDatasources1 (Clientes)
IBDatasources2 (Proveedores)
Bien, en la propiedad dataset del IBDatasource1, pongo la tabla a la que quiero conectarla que es IbTable1 y así sucesivamente con el resto de tablas.

Esto lo llevo haciendo siempre y programas de miles de líneas y me ha funcionado muy bien, pero siempre en monopuesto, ahora quería dar el salto a utilizarlos en red, y había visto que no había que hacer muchas modificaciones sólo añadirle al directorio donde está la base de datos la dirección IP del servidor, así si en monopuesto estaba en C:\Maestro1\Maestro.Ib, pues añadirle (192.168.1.34) que es la IP del servidor y quedar de esta manera el DatabaseName 192.168.1.34:C:\Maestro1|Maestro.ib) como demuestra el BDdatos.ini, que ya hemos visto anteriormente, y hacerlo mismo en todos los ordenadores clientes.

Éste es mi problema configurarlo y trabjar en red, ya está, la única forma de trabajar que conozco es esta, si hay otra forma de trabajar sin tablas te agradecería me la dijeras.

Gracias por vuestro interés.









Cita:
al
Responder Con Cita
  #14  
Antiguo 22-12-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues siento no poder ayudarte más, sería necesario más información. Realmente lo que hace falta es poder manejar tu ordenador, porque seguro que es alguna tontería el problema.
Responder Con Cita
  #15  
Antiguo 02-01-2013
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 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
  #16  
Antiguo 02-01-2013
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
Efectivamente orodriguezca, la Base de datos estaba abierta, al ejecutar:


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

Por lo que tengo que cerrarla y volverla abrir, tal y como dices, aunque tengo luego que abrir todas las tablas de las que depende la Base de Datos, ya funciona a la perfección,

Muchísimas gracias a tí y a Casimiro, da gusto dar con un foro como éste.

PD. Casimiro dijo que lo siguiente:

Cita:
¿Trabajas con tablas?, no es lo más adecuado, aunque ese no sea el tema aquí.
¿hay otra forma de trabajar más adecuada?.

Gracias.
Responder Con Cita
  #17  
Antiguo 02-01-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Con querys
Responder Con Cita
  #18  
Antiguo 02-01-2013
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
Me pondré manos a la obra, empezaré a buscar tutoriales y ejemplos, para empezar.
Responder Con Cita
  #19  
Antiguo 02-01-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ejemplo,
otro ejemplo
y el mejor libro.
Responder Con Cita
  #20  
Antiguo 02-01-2013
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
Muchas Gracias,
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda con mensaje Can no open Resultset rcantu MySQL 2 03-04-2008 07:39:06
Urge: Error TOO MANY OPEN FILES mrmanuel Conexión con bases de datos 4 01-12-2005 11:05:31
Error creating form:Cannot open avi Javier_A OOP 2 11-09-2005 21:11:01
Error al intentar guardar texto de Open Office en disquete fidel Linux 0 28-05-2005 13:19:09
Error while trying to open file nefy Firebird e Interbase 4 15-09-2004 20:02:42


La franja horaria es GMT +2. Ahora son las 06:32:05.


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
Copyright 1996-2007 Club Delphi