Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-06-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
EBDEngineError "Object not Locked"

Hola compañeros.
Os agradecería que alguien me explicara de donde puede provenir este error, o dónde puedo informarme acerca de su significado y origen.
Estoy tratando de Reindexar una BD Paradox.

Código Delphi [-]
procedure Reindexar (Tabla : ttable);
begin
    Check (dbiregenindexes (tabla.Handle));
end;

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 10-06-2011
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
Hola jhonalone.

Lamento no poder aportarte mucho sobre Paradox, pero revisá si este enlace te sirve de ayuda: Reindexar en Paradox

Aquí tenes un listado completo de los códigos de error de BDE BDE Error Codes, aunque realmente no es muy explícito que digamos...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 10-06-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Talvez debas abrir la tabla en modo exclusivo.

Bueno, así a cómo ecfisa, yo también tengo experiencia nula en Paradox.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 10-06-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Gracias Ecfisa.
El enlace propone un problema casi idéntico al mío, pero quedó sin resolver...
El listado de errores del BDE me es muy útil para controlar excepciones.

Gracias Cris.
No he copiado todo el código, porque el error lo da justo en ésa sentencia. Pero te copio el código que la precede, donde abro la tabla en modo exclusivo.
Código Delphi [-]
        ...
        TTabla.Close;
        TTabla.DatabaseName := DirActual;
        TTabla.Exclusive := True;
        TTabla.TableName := ExtractFilename(lstFicheros.FileName);
        TTabla.Open;
        Reindexar (TTabla);
        ...
Al parecer esto ya es un problema antiguo. La solución que propone Cabanyaler en el link de Ecfisa podría ser una solución. Pero ¿cómo se hace el procedimiento que propone para generar los índices después de borrarlos?

Seguiré investigando. Si encuentro una solución válida la publicaré en este hilo para ayuda de otros.

Gracias amigos.
Responder Con Cita
  #5  
Antiguo 10-06-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Gracias, como siempre, por vuestra desinteresada ayuda.

He resuelto el problema, o por lo menos a mí me funciona. Estas son las conclusiones a las que he llegado. (Por si son de utilidad para alguien)

Algunas Condiciones para que funcione Reindexar:
1.- Las tablas master/detail deben estar cerradas (Salvo la que se Reindexa)
2.- Las tablas que compartan Dataset deben estar cerradas (Salvo la que se Reindexa)
3.- Usar Table1.DisableControls para que no interfieran los controles conectados

Así me quedó el código funcionando:
Código Delphi [-]
procedure Reindexar (Tabla : TTable);
begin
  Check (DbiRegenIndexes (Tabla.Handle));
end;
 
...
        TTabla.TableName := ExtractFilename(lstFicheros.FileName);
        TTabla.Close;
        TTabla.DatabaseName := DirActual;
        TTabla.Exclusive := True;
        TTabla.TableName := ExtractFilename(lstFicheros.FileName);
        TTabla.Open;
        TTabla.DisableControls; // que no actualice los controles conectados
        Reindexar (TTabla);
        TTabla.Close;  // Cerramos la tabla por si comparte un Dataet con la siguiente que reindexemos
...

Saludos.
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
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" Xavierator Varios 3 27-10-2008 09:09:50
Error "Record already locked by this session" karaoke Varios 5 13-12-2007 04:55:10
Sobre error "Object reference not set to an instance of an object" fer21unmsm .NET 2 11-05-2007 21:56:46
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
Method "elquesea" not supported by automation object mercury2005 Providers 0 08-12-2004 22:22:29


La franja horaria es GMT +2. Ahora son las 14:10:06.


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