Ibdataset- Mestre/detalhe (aumentar performace)

12/07/2004

0

Bom dia!!
Estou com um programa trabalhando com dois ibdataset como Mestre e Detalhe.
O ibdataset detalhe eu coloco no SQL um parametro para o campo que tera a ligação com a tabela meste e ligo a propriedade DATASOURCE no ibdataset da tabela mestre.

Percebi que conforme o nº de registros vai aumentando mais tempo levo para conseguir dar um post no ibdataset Mestre. Eu não faço pesquisas, apenas :
Abro o ibdataset mestre, abro o ibdataset detalhe, dou um append no ibdataset mestre, uma serie de append e post no ibdataset detalhe e um post no ibdataset mestre.

Minha grande dúvida. Qual a melhor formar de trabalha nesse caso? Estou fazendo alguma coisa errada?? Com DBExpress nesse caso eu terei um melhor desempenho?? O que posso fazer para melhor isso?

Lembrando que minha tabela detalhe tem um trigger e o ibdataset detalhe esta com o cachedupdate=true e ao dar um post no ibdataset mestre eu dou um ApplyUpdates na detalhe, isso para controlar o Estoque pelo trigger.

Estou com problemas de lentidão a muito tempo e ainda não consegui resolver

Aguardo uma ajuda.
Segue minhas tabelas.
uso Delphi6+Interbase7


CREATE TABLE "VDAPDV" 
(
 "ID" INTEGER NOT NULL,
 "CODLOJA" NUMERIC(3, 0) NOT NULL,
 "CODCUPOM" VARCHAR(7),
 "CODCLI" NUMERIC(5, 0),
 "CODOPER" NUMERIC(3, 0),
 "CODFORMA" NUMERIC(3, 0),
 "TOTCOMPRA" NUMERIC(12, 2),
 "PDV" NUMERIC(3, 0),
 "DTVDA" DATE,
 "HRVDA" TIME,
 "VLRDESC" NUMERIC(9, 2),
 "VLRACRES" NUMERIC(9, 2),
 "ECF" NUMERIC(3, 0),
 "CODADMCARTAO" NUMERIC(3, 0),
 "CODADMTICKET" NUMERIC(3, 0),
 "BANCO" NUMERIC(3, 0),
 "NRCHEQUE" NUMERIC(6, 0),
 "SITUACAO" NUMERIC(1, 0),
 "VLRPAGODINHEIRO" NUMERIC(12, 2),
 "VLRPAGOCHEQUE" NUMERIC(12, 2),
 "VLRPAGOCARTAO" NUMERIC(12, 2),
 "VLRPAGOTICKET" NUMERIC(12, 2),
 "VLRPAGO" NUMERIC(12, 2),
 "CODCARTAO" INTEGER,
 "VLRPAGOOUTRAS" NUMERIC(12, 2),
 "CODMOVIMENTO" INTEGER,
 "CODVEND" INTEGER,
 "TIPO" CHAR(1),
CONSTRAINT "PK_VDAPDV" PRIMARY KEY ("ID")
);


CREATE TABLE "VDPDVITEM" 
(
 "ID" INTEGER NOT NULL,
 "IDPDV" INTEGER NOT NULL,
 "CODBARRA" VARCHAR(20),
 "DESCRICAO" VARCHAR(40),
 "UNIDADE" VARCHAR(3),
 "QTDE" NUMERIC(6, 3),
 "PRECOVEND" NUMERIC(9, 2),
 "PRECOCUSTO" NUMERIC(9, 2),
 "VLRTOTAL" NUMERIC(9, 2),
 "CODALIQ" NUMERIC(3, 0),
 "DTVDA" DATE,
 "CODGENERO" INTEGER,
 "CODGRUPO" INTEGER,
 "PERCALIQ" NUMERIC(5, 2),
 "SITUACAO" INTEGER,
 "PDV" NUMERIC(3, 0),
 "DESCRALIQ" VARCHAR(3),
 "CODCUPOM" VARCHAR(7),
 "CODVEND" INTEGER,
 "CODREF" INTEGER,
 "CODSUBGRUPO" INTEGER,
 "TIPO" CHAR(1),
CONSTRAINT "PK_VDPDVITEM" PRIMARY KEY ("ID")
);

SET TERM ^;
CREATE TRIGGER "Baixa_estoque" FOR "VDPDVITEM" 
ACTIVE AFTER INSERT POSITION 0
AS
begin
update CDPRODUTOS
   set
       qtde = qtde - new.qtde
   where
       id = new.codbarra;
end
^
COMMIT WORK ^
SET TERM;^ 



Valeu


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar