Ver Mensaje Individual
  #1  
Antiguo 20-09-2010
DamianG DamianG is offline
Miembro
 
Registrado: mar 2008
Posts: 95
Reputación: 19
DamianG Va por buen camino
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 = tocom');
      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 = tocom');
      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!
Responder Con Cita