Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Error index unexpectedly deleted (https://www.clubdelphi.com/foros/showthread.php?t=69931)

DamianG 20-09-2010 13:37:59

Error index unexpectedly deleted
 
Hola a todos, mi consulta es la siguiente:

desarrole un sistema de registro de facturas de compras donde las tablas definidas son:

FACCPA - Encabezado de facturas
DETFCC - Detalle de factura impositivo
DETFCA - Detalle de productos comprados

las 3 con los siguientes campos en común.

TIPCOM - Tipo de comprobante
LETCOM - Letra
PTOCOM - Punto de venta
NROCOM - Número
CODPRC - Id Proveedor

Entonces tengo como clave primary de FACCPA:

tipcom,letcom,ptocom,nrocom,codprc

En un formulario muestro las 3 tablas de la siguiente manera:
Código Delphi [-]
   
  with datafb.query_faccpa do
  begin
    close;
    SQL.Clear;
    SQL.add('select f.codprc,f.tipcom,f.letcom,f.ptocom,f.nrocom,f.feccom,f.fecvto,f.feccon,f.aynpro,f.ivapro,f.cuipro,f  .cvtcom,f.remito,f.libro,f.parcial,f.estado,f.descri,f.desadi,f.stock,f.totcom,f.remito,f.ordcom,');
    sql.add('sum(d.tmpng) as zng, sum(d.tmpta) as zta, sum(d.tmpac) as zac, sum(d.tmpno) as zno, sum(d.tmpex) as zex, sum(d.tmprt) as zrt, sum(d.tmpto) as xto from faccpa f');
    sql.add('inner join detfcc d on f.codprc = d.codprc and f.tipcom = d.tipcom and f.letcom = d.letcom and f.ptocom = d.ptocom and f.nrocom = d.nrocom');
    SQL.add('where f.feccon >= ''' + xf1 + '''' + ' and f.feccon <= ''' + xf2 + '''');
    sql.add('group by f.codprc,f.tipcom,f.letcom,f.ptocom,f.nrocom,f.feccom,f.fecvto,f.feccon,f.aynpro,f.ivapro,f.cuipro,f  .cvtcom,f.remito,f.libro,f.parcial,f.estado,f.descri,f.desadi,f.stock,f.totcom,f.ordcom');
   
    SQL.add('order by f.feccon,f.letcom,f.ptocom,f.nrocom');
    open;
  end;
   
  with datafb.query_detfcc do
    begin
      DataSource := datafb.dsfaccpa;
      SQL.text := 'select tipcom,letcom,ptocom,nrocom,feccom,fecvis,codprc,cvtcom,codtmp,tmpng,tmpct,tmpta,tmpac,tmpno,tmpex,t  mprt,tiprt,tmpto,tmpim,tmpde,descri from detfcc';
      SQL.Add('where codprc = :codprc');
      SQL.add('and tipcom = :tipcom');
      SQL.add('and letcom = :letcom');
      SQL.add('and ptocom = :ptocom');
      SQL.add('and nrocom = :nrocom');
      open;
   
   
  with datafb.query_detfca do
    begin
      DataSource := datafb.dsfaccpa;
      SQL.text := 'select * from detfca';
      SQL.Add('where codprc = :codprc');
      SQL.add('and tipcom = :tipcom');
      SQL.add('and letcom = :letcom');
      SQL.add('and ptocom = :ptocom');
      SQL.add('and nrocom = :nrocom');
      open;
    end;

bueno y aquí el problema, después de hacer una modificacion a la una factura, cada tanto sale el error, INDEX UNEXPEDTEDLY DELETED, no es siempre y según pude detectar con un control de errores es cuando hago

Código Delphi [-]
   
  Query_accpa.active := false;
  Query_accpa.active := trae;

Para refrescar los datos en la grilla. (dbgrid)

Otra cosita.
Se me ocurrio en algún momento agregar indices a DETFCC Y DETFCA con los mismos campos de la PK para ver si mejoraba el rendimiento, esto me ayudara a que sea mas veloz la consulta?

MUCHAS GRACIAS!

DamianG 20-09-2010 15:51:38

Aclaración
 
Perdón pero no encontre como modificar el msj

las ultimas instrucciones donde sale el error son:

datafb.query_faccpa.active := false;
datafb.query_faccpa.active := true;

guillotmarc 21-09-2010 15:00:15

Que error más raro. Nunca lo había visto.

Te sugiero que hagas un Backup y un posterior Restore de tu base de datos (para reconstruir la base de datos y de esta forma descartar que no sea un problema de corrupción del archivo de la base de datos).

DamianG 21-09-2010 21:45:27

Gracias por tu respuesa. Por el momento borre los indices a detfcc y detfca como explique en la ultima parte y no esta saliendo el error.

Espero se solucione con eso.

Estarian de mas esos indices?????

gracias

guillotmarc 23-09-2010 14:50:14

Cita:

Empezado por DamianG (Mensaje 377036)
Gracias por tu respuesa. Por el momento borre los indices a detfcc y detfca como explique en la ultima parte y no esta saliendo el error.

Espero se solucione con eso.

Estarian de mas esos indices?????

gracias

Yo más bien imagino que estarían corruptos ya que no se ver ningún funcionamiento normal de la base de datos que te pueda provocar ese error.

guillotmarc 23-09-2010 14:52:32

Por cierto, esos índices realmente están de más, puesto que al definir una clave primaria ya se crea automáticamente un índice para ella, por lo que cualquier índice posterior sobre el mismo campo es redundante.

Pero vamos, aunque no sean necesarios ni vayan a mejorar tu rendimiento, tampoco no tienen que provocarte errores (hasta donde yo sé).

DamianG 23-09-2010 18:13:40

Debo tener algun concepto mal interpretado,

tengo la tabla FACCPA con los campos TIPCOM,LETCOM,PTOCOM,NROCOM como clave primaria.

despues tengo como tablas que dependen de FACCPA una que es de un detalle impositivo llamada DETFCC y otra con detalle de articulos de compra que es DETFCA, las 2 con los mismos campos que FACCPA en común para establecer la referencia. El tema es, en DETFCC Y DETFCA no tengo definidas claves primarias y habia creado indices para que las consultas supuestamente sean mas rapidas, ahi es la duda si son necesarias o no.

EJ de consulta.

tabla FACCPA

select * from faccpa
(la muestro en un dbgrid principal)

tabla DETFCC

datasource = dsfaccpa
select * from detfcc where tipcom=:tipcom and letcom=:letcom and ptocom=:ptocom and nrocom=:nrocom
(en otro dbgrid me va mostrando los detalles)

espero se entienda

saludos y gracias!

guillotmarc 23-09-2010 21:09:19

Si, por lo que lei en tu mensaje, pensé que eran indices sobre las claves primarias.

En el caso que dices, sí que tienes que crear los índices para agilizar las consultas para estas claves foráneas.

Saludos.


La franja horaria es GMT +2. Ahora son las 07:16:42.

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