Regis_JP 0 Denunciar post Postado Agosto 20, 2007 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
Regis_JP 0 Denunciar post Postado Agosto 21, 2007 Este erro estaria relacionado a transações ? Compartilhar este post Link para o post Compartilhar em outros sites
Regis_JP 0 Denunciar post Postado Agosto 22, 2007 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