Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Regis_JP

Rule X View

Recommended Posts

Ola Pessoal tudo beleza !

 

Estou com o seguinte problema: tenho uma view que traz dados de duas tabelas

e um rules que insere, deleta e altera dados nas duas tabelas tragas por esta view;

Na Inserção e deleção funciona perfeitamente, porém, na alteração é exibido o segunte erro:

Recorde Not Founf or Changed by another user, "O registro não fora encontrado ou modificado por outro usuario", haja vista que esta view é manipulada por um dataset detalhe

de um mestre_ detalhe(dataSet aninhados).

 

Obs: este erro somente surge qdo a alteração e feita na tabela que os campos primarios refere a tabela mestre, na tabela que não há referência os dados são alterados normalmente.

 

CREATE OR REPLACE VIEW Viw_compraitens AS SELECT cm.nro_nota, cm.ser_nota, cm.cod_fornec, cm.cod_produto, cm.cod_sittrib, cm.quantidade, cm.vl_unitario, cm.perc_icms, cm.redu_icms, cm.vl_icms, cm.perc_desc, cm.vl_desc, cm.perc_ipi, cm.vl_ipi, cm.vl_total, cm.dt_nota, cm.perc_mar, p.nome AS nomeproduto, p.preco_cust, p.perclliqui, p.preco_vendFROM compitem cmLEFT JOIN acadprod p ON p.codigo = cm.cod_produto;ALTER TABLE Viw_compraitens OWNER TO itasolution;CREATE OR REPLACE RULE Rul_compraitens_atu ASON UPDATE TO Viw_compraitens DO INSTEAD(UPDATE acadprod SET preco_cust = new.preco_cust, 					 perclliqui = new.perclliqui, 					 preco_vend = ((new.vl_unitario * new.perclliqui)/100)+new.vl_unitariowhere codigo = old.cod_produto;UPDATE compitem  SET  nro_nota = new.nro_nota, 					 ser_nota = new.ser_nota,					 cod_fornec = new.cod_fornec, 					 cod_produto = new.cod_produto,					 quantidade = new.quantidade, 					 vl_unitario = new.vl_unitario, 					 perc_icms = new.perc_icms, 					 redu_icms = new.redu_icms, 					 vl_icms = new.vl_icms, 					 perc_desc = new.perc_desc, 					 vl_desc = new.vl_desc, 					 perc_ipi = new.perc_ipi, 					 vl_ipi = new.vl_ipi, 					 vl_total = new.vl_total, 					 dt_nota = new.dt_nota, 					 perc_mar = new.perc_marWHERE nro_nota = old.nro_nota AND ser_nota = old.ser_notaAND cod_fornec = old.cod_fornec AND cod_produto = old.cod_produto;);

se alguem tiver uma ideia melhor, por favor ! me envie.

 

Desde já grato pela atenção !

 

Regis

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoal !

 

Embora creio que não seja a mais adequada, mas vou postar aqui a solução que encontrei p/ o meu preblema com o update citado acima.

 

OBS: Criei uma sql de atualização no BeforeUpdateRecord do DataSetProvider, e apliquei as atualizações atraves desta sentença.

 

var  Sql1, StrLiga : String;  i : Integer;begin  try	case UpdateKind of	 ukModify : Begin	  StrLiga := 'Set ';	  if SourceDS = dtCmpI then begin // monta a sql com os dados a ser salvo	   Sql1 := 'update Viw_compraitens ';	   for i := 0 to DeltaDS.FieldCount -1 do	   with DeltaDS.Fields[i] do	   if not isNull then begin		if DeltaDS.Fields[i].ProviderFlags = DeltaDS.Fields[i].ProviderFlags + [pfInUpdate] then begin		 if DeltaDS.Fields[i].DataType = ftBCD then		 Sql1 := Sql1 + StrLiga + FieldName +' = '+ ''''+ BuscaTroca(DeltaDS.Fields[i].AsString,',','.')+''''		 else Sql1 := Sql1 + StrLiga + FieldName +' = '+ ''''+DeltaDS.Fields[i].AsString+'''';		 StrLiga := ',';		end;	   end;	   Sql1 := Sql1 +' where '+ DeltaDS.Fields[0].FieldName +' = '+''+String(DeltaDS.Fields[0].oldvalue)+'';	   Sql1 := Sql1 +' and '+ DeltaDS.Fields[1].FieldName +' = '+''+String(DeltaDS.Fields[1].oldvalue)+'';	   Sql1 := Sql1 +' and '+ DeltaDS.Fields[2].FieldName +' = '+''+String(DeltaDS.Fields[2].oldvalue)+'';	   Sql1 := Sql1 +' and '+ DeltaDS.Fields[3].FieldName +' = '+''+String(DeltaDS.Fields[3].oldvalue)+'';	   //se ouver alteração executa o sql e grava os dads	   if StrLiga = ',' then	   DMConexao.GravReg(Sql1);	   //nao permite que	   Applied := true;	  end; 	 end;//ukmodifi	end;//case  except   ;  end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.