Ajuda com ApplyUpdate(0)

Delphi

19/01/2012

Olá...

Tenha um Grid onde mostro os dados do select seguinte:
zqPedItens.SQL.Add(select ei.produto, pf.prodforn, pd.descricao, tq.estq_atual, ei.qtd_sug, ei.qtd_ped);
zqPedItens.SQL.Add(, ei.entradacab, ei.prcfabrica from entradaitens01 ei );
zqPedItens.SQL.Add(left join codprodforn pf on ei.produto = pf.produto and pf.fornecedor = :forn);
zqPedItens.SQL.Add(inner join produto pd on ei.produto = pd.codigo);
zqPedItens.SQL.Add(inner join estoque01 tq on ei.produto = tq.produto);
zqPedItens.SQL.Add(where ei.entradacab = :codcab order by descricao);
zqPedItens.ParamByName(codcab).AsInteger := NroPedido;
zqPedItens.ParamByName(forn).AsInteger := CodFornecedor;
zqPedItens.Open;

Estou utilizando conectados Query, DataSetProvider, ClientDataSet e DataSource -> DBGrid.
É um Grid de pedido de compra com as seguintes colunas:
Cód.Prod | Cód.Prod no Fron. | Descrição | Qtd_Estq | Qtd_Sug. | Qtd_Ped.

Só quem sofre alterações é a coluna Qtd_Ped.
No Evento AfterPost do ClientDataSet eu coloquei o seguinte código:

procedure Tfrm_pedidodecompra.AtualizarPedido(DataSet: TDataSet);
begin
with Dataset as TClientDataSet do
ApplyUpdates(0);
end;

Quando eu coloco uma quantidade na Qtd_Ped. que dou enter para ira para a próxima linha ele aplica o Post e consequentemente o ApplyUpdate(0), mas toda vez que é executado o ApplyUpdate(0) é apresentado um erro:

Project EasyPharma.exe raised exception class EZSQLException with message Connot update a complex query with more then one table.

Sei que é por causa da consulta que eu fiz, utilizando mais de uma tabela. Gostaria de saber se alguém poderia me ajudar, se haveria a possibilidade de atualizar a tabela entradaitens01, que é o objetivo, com a query utilizada.

Alguém poderia me ajudar?

Vagner Almeida

Vagner Almeida

Curtidas 0

Respostas

Rafael Ribeiro

Rafael Ribeiro

19/01/2012

Boa tarde!

Ao invés de chamar essa função que vc criou para applyupdate tente o seguinte: no Evento AfterPost do ClientDataSet digite o seguinte código:

TClientDataSet(DataSet).ApplyUpdates(0);


Depois direcione também, o evento AfterDelete para o evento acima.

Espero ter ajudado.

Rafael
GOSTEI 0
Rafael Ribeiro

Rafael Ribeiro

19/01/2012

Vale lembrar também.... que através desse select... vc não conseguirá atualizar nada! Com esse select você consegue apenas visualizar a relação entre as tabelas!
GOSTEI 0
Marco Salles

Marco Salles

19/01/2012

Eu não tenho ocerteza , mas tente colocar todos os campos que não serão modificados com a propridade
providerfalg VAzio com exceção do campo chave que deve ter [pfInKey] e o campo que sofrera modificação
com a propriedade [pfInUpdate,pfInWhere,pfInKey]
Não esqueça que talves tem que alterar a propriedade UpdateMode do TdataSetProvider para upWhereKeyOnly

È que eu estou sem o Delphi aqui e sem as Revistas, mas tem um Excelente artigo do Guinther
publicado em uma dessas Ediçoes que ele mostra passo apasso a modificar valores em
consultas resultante de Inner Join , se eu entendi bem o seu problema
GOSTEI 0
POSTAR