Inserir, Gravar e Excluir em Uma View

Firebird

14/10/2004

tenho uma tabela de vendas (master) e uma view (detail = tabitens c/ tabprodutos p/ trazer nome do produto) estou em master/detail dessa tabela de venda com a view de itens só q ná view não dá para fazer nenhuma alteração tem alguma rotina para fazer isso via clientdataset?


Tap_pedroso

Tap_pedroso

Curtidas 0

Respostas

Afarias

Afarias

14/10/2004

Crie triggers de before insert, before update e before delete na VIEW para realizar as operações desejadas. --ou-- Utilize o evento OnGetTableName do Provider para indicar a tabela q deve ser alterada. --ou-- utilize o evento BeforeUpdateRecords do Provider para realizar manipulações mais complexas se desejar


T+


GOSTEI 0
Tap_pedroso

Tap_pedroso

14/10/2004

certomais o que eu colocaria no OnGetTableName do provider?


GOSTEI 0
Afarias

Afarias

14/10/2004

o nome da tabela q deve ser atualizada (a tabela ´principal´ da view)

Se vai por esta opção, vc deve lembrar de configurar as ProviderFlags dos TFields que não pertencem a esta tabela retirando a opção inUpdate


T+


GOSTEI 0
Tap_pedroso

Tap_pedroso

14/10/2004

certo eu tirei o inupdate do campo descprod que é o campo que eu preciso que apareça para o usuaro o resto é databela de itens a principal mas lá no evento ongettablename de que forma eu coloco o nome da tabela principal :?:

eu tentei tambem o seguite trigger na view:

SET TERM # ;
CREATE TRIGGER INSERTPROD FOR VSITENSPEDIDO
AFTER INSERT AS
 BEGIN
  INSERT INTO TABITEMPEDIDO(NRPEDIDO,NRITEM,CDPRODUTO,QTPRODUTO,DESCITEM,
  VLUNIT,VLITEM)VALUES(NEW.NRPEDIDO,NEW.NRITEM,NEW.CDPRODUTO,NEW.QTPRODUTO,
  NEW.DESCITEM,NEW.VLUNIT,NEW.VLITEM);
 END 
SET TERM ; 


e deu o seguite erro ao compilar:

ISC ERROR MESSAGE:
attempted update of read-only column


das maneira que vc me passou qual é a melhor?


GOSTEI 0
Tap_pedroso

Tap_pedroso

14/10/2004

esquece o erro da trigger o campo VLITEM é computed by eu já arrumei mas a trigger não deu certo.

olha eu uso campos lookup porque eu só preciso mostrar o nome do produto eu estou querendo com a view ver se com ela eu ganho + performance neste tipo de relacionamento.


GOSTEI 0
Afarias

Afarias

14/10/2004

|mas lá no evento ongettablename de que forma eu coloco o nome da
|tabela principal

TableName := ´NomeDaTabela´;


|eu tentei tambem o seguite trigger na view e deu o seguite erro ao
|compilar:

Hummm... esse insert não está certo! Alguma coluna dessas não deveria estar ai declarada.


|das maneira que vc me passou qual é a melhor?

Depende ;)


T+


GOSTEI 0
Tap_pedroso

Tap_pedroso

14/10/2004

blz eu coloque o nome da tabela no ongettablename e quando fui salvar no botão da aplicação eu dei um .post e um .applyupdates(0) no clientdataset que esta ligado a view e deu o seguite erro:

CDSITENS:dataset not in edit or insert mode


se eu não der um post e um applyupdates(0) no clientdataset ele grava so o cabecalho da venda mas os item não.


GOSTEI 0
Afarias

Afarias

14/10/2004

Vc está usando tabelas aninhadas?? Deu um post e apply em quem??

Acho q vc tem q depurar direitinho ai seu código... deve ser algum detalhezinho q lhe está escapando.


T+


GOSTEI 0
Tap_pedroso

Tap_pedroso

14/10/2004

eu dei um post e um apply no clientdataset que está ligado com a view


GOSTEI 0
Afarias

Afarias

14/10/2004

if (CDSITENS.State in [dsEdit, dsInsert]) then
CDSITENS.Post;
CDSITENS.ApplyUpdates(0);



T+


GOSTEI 0
POSTAR