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!