Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Operation not aplicable en tabla Paradox (https://www.clubdelphi.com/foros/showthread.php?t=9595)

marto 27-04-2004 17:35:29

Operation not aplicable en tabla Paradox
 
Wop!

Me ha tocado volver a bajar a los abismos de Paradox y es bastante fustrante... en fin, habrá que aguantarse :(

Al trapo, el tema es que tengo que conectar con una tabla paradox y, atención a la tontería, hacer un locate o, en su defecto, un filtro. Bien, el problema es que al hacer el Locate o al tocar la propiedad Filter (no filtered) da la majestuosa excepción que da título al hilo. Hasta aquí no me sorprendería demasiado, ya me curé de espantos con las excetricidades del BDE hace tiempo. El cachondeo viene cuando compruebo que la tabla no solo se abre bien si no que no da problemas para hacer insert's, edit's... No estoy hablando de que el fichero .db esté bien, si no que el propio componente TTable permite hacer todo esto sin problemas.

Os explico las "peculiaridades" del modo de conexión. Por una historia que no viene a cuento, el módulo de datos se crea, una pantalla cliente hace una serie de acciones y después todo se destruye. Para conectar se crea un alias al vuelo ya que después no se volverá a usar, y se asignan las propiedades correspondientes. Todo esto se hace en un método público del DataModule

Código:

procedure TDMCreaEmpre.Conecta(PNet, PLocal, PDir: String);
var
  i: Integer;
begin
  try Session1.DeleteAlias('CREACIOBD'); except end;
  Session1.AddStandardAlias('CREACIOBD',PDir,'PARADOX');
  //
  Session1.AddPassword('******');
  //la TSession
  Session1.NetFileDir := PNet;
  Session1.PrivateDir := PLocal;
  //La TDataBase
  Db.Connected := false;
  Db.AliasName := 'CREACIOBD';
  Db.Connected := True;
  //Las tablas
  for i := 0 to ComponentCount - 1 do
        if Components[i] is TTable then
          with Components[i] as TTable do
          begin
                Active := false;
                SessionName := Session1.SessionName;
                DatabaseName := Db.DatabaseName;
                Active := true;
          end;
end;

Lo curioso es que con las otras tablas no da ningún error. He probado a cargarme el TTable y recrearlo y nada.... en fin que estoy sin ideas.

NOTA: Provad a poner ' "operation not aplicable" Paradox' en google... es fustrante :rolleyes:

marcoszorrilla 27-04-2004 18:13:51

Tiene algún índice esa tabla?

Todo parace indicar que lo que falta es crear al menos un índice.

Un Saludo.

marto 27-04-2004 19:34:45

Sí, tiene la primary key :confused: :confused:

marcoszorrilla 27-04-2004 22:00:36

Por si te da alguna referencia esta es la localización del error:

Cita:

$2A01 (10753) = Field is not a BLOB.
$2A02 (10754) = BLOB already opened.
$2A03 (10755) = BLOB not opened.
$2A04 (10756) = Operation not applicable.
$2A05 (10757) = Table is not indexed.
$2A06 (10758) = Engine not initialized.
De momento no se me ocurre nada.

Un Saludo.

roman 27-04-2004 22:14:38

Y a todo esto, ¿cuál es el filtro que causa problemas?

// Saludos

marto 28-04-2004 09:56:12

Cita:

Empezado por roman
Y a todo esto, ¿cuál es el filtro que causa problemas?

Es igual, pongas el filtro que pongas, de hecho, si intentas hacer un Locate sobre la tabla, pasa exactamente lo mismo.... estoy sin ideas... ¿lo paso todo a Oracle? :confused: :( :( :confused:

marto 28-04-2004 12:44:34

Wop!

Tema solucionado.... casi :)

Está souucionado porque he conseguido hacer lo que quería de otra manera... pero no me gusta hacer las cosas así, y menos si no entiendo porqué.

Investigando en el tema de los índices que comentaba marcos, he comprobado que si el locate o el filtro lo hacía por los campos que formaban un índice el error no se producía :eek: . Esto me ha dejado flipado, ya que estoy cansado de hacer locate's por campos no indexados, va más lento, pero no peta :o . Cuál ha sido mi sorpresa cuando creando un proyecto nuevo y usando un alias "estático", podía buscar por campos que no formaban parte de ningún índice sin problemas.

No he averiguado más. He optado por obtener el valor de la clave primaria mediante una quary y luego hacer el locate por la clave.... es una guarrada pour si muove ;)

roman 28-04-2004 16:53:31

El problema me suena más a algún conflicto de instalación del bde, quizá alguna versión incorrecta. Si bien en Google como dices hay pocas referencias encontrarás más en los grupos de noticias de Borland.

// Saludos


La franja horaria es GMT +2. Ahora son las 18:25:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi