Inserir, Gravar e Excluir em Uma View
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
Curtidas 0
Respostas
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+
T+
GOSTEI 0
Tap_pedroso
14/10/2004
certomais o que eu colocaria no OnGetTableName do provider?
GOSTEI 0
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+
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
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:
e deu o seguite erro ao compilar:
das maneira que vc me passou qual é a melhor?
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
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.
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
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+
|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
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:
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.
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
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+
Acho q vc tem q depurar direitinho ai seu código... deve ser algum detalhezinho q lhe está escapando.
T+
GOSTEI 0
Tap_pedroso
14/10/2004
eu dei um post e um apply no clientdataset que está ligado com a view
GOSTEI 0
Afarias
14/10/2004
if (CDSITENS.State in [dsEdit, dsInsert]) then
CDSITENS.Post;
CDSITENS.ApplyUpdates(0);
T+
CDSITENS.Post;
CDSITENS.ApplyUpdates(0);
T+
GOSTEI 0