Fórum eu dnovo 2 #9896

06/10/2009

0

olá, a minha duvida é a seguinte quando eu executo o seguinte codigo na minha aplicacao       update.Add('update produto set margen=:Pmargem, ');
    update.Add('preco_venda=:Pvenda, ');
    update.Add('quantidade_embalagem=:Pembalagem, ');
    update.Add('peso=:Ppeso, ');
    update.Add('estoque=estoque+:Pquantidade ');
    update.Add('where produtoid=:Pprodutoid');   quando eu dou um execute no clientdataset pra alterar a tabela de produtos funciona normalmente mais nao altera o saldo só altera quando eu fecho a aplicacao se estiver 10 em estoque e eu adicionar 5 fica la os 10 mais quando eu fecho o sistema e volto dnovo tem 15 como se nao tivesse atualizando nao saquei o que acontece!
Paulo Silva

Paulo Silva

Responder

Post mais votado

09/10/2009

    tclientdataset(ds4.dataset).Close();
      tclientdataset(ds4.dataset).CommandText:=update.Text;
     tclientdataset(ds4.dataset).open; fiz assim mais deu deadlock algo assim usei o applyupdates(-1) no after insert essa onça nao funciona ja ta me deixando de cabelo em pé

Paulo Silva

Paulo Silva
Responder

Gostei + 1

Mais Posts

07/10/2009

Wesley Yamazack

Olá meu caro.
   Este Update que você usa seria uma query ? Certo ? E dai você passa os parametros pelo teu ClientDataSet, Certo ? No momento que você manda executar, você esta dando um applyupdates no teu ClientDataset ?
  Se estiver , faça um pequeno exemplo e me mande para poder analisar melhor o teu problema.

Um abraço
Wesley Y
Responder

Gostei + 0

07/10/2009

Paulo Silva

        update:=TStringList.Create;
    update.Add('update produto set margen=:Pmargem, ');
    update.Add('preco_venda=:Pvenda, ');
    update.Add('quantidade_embalagem=:Pembalagem, ');
    update.Add('peso=:Ppeso, ');
    update.Add('estoque=estoque+:Pquantidade ');
    update.Add('where produtoid=:Pprodutoid');       tclientdataset(ds4.dataset).Close;
    tclientdataset(ds4.dataset).CommandText:=update.Text;
    tclientdataset(ds4.dataset).Params.ParamByName('pmargem').AsCurrency:=30;
    tclientdataset(ds4.dataset).Params.ParamByName('pvenda').AsCurrency:=50;
    tclientdataset(ds4.dataset).Params.ParamByName('Pembalagem').AsCurrency:=1;
    tclientdataset(ds4.dataset).Params.ParamByName('Ppeso').AsCurrency:=500;
    tclientdataset(ds4.dataset).Params.ParamByName('Pquantidade').AsCurrency:=10;
    tclientdataset(ds4.dataset).Params.ParamByName('Pprodutoid').asinteger:=2;
    tclientdataset(ds4.dataset).Execute;   Eu fiz da forma que esta acima citado tem alguma coisa errada ae?
Responder

Gostei + 0

07/10/2009

Paulo Silva

        update:=TStringList.Create;
    update.Add('update produto set margen=:Pmargem, ');
    update.Add('preco_venda=:Pvenda, ');
    update.Add('quantidade_embalagem=:Pembalagem, ');
    update.Add('peso=:Ppeso, ');
    update.Add('estoque=estoque+:Pquantidade ');
    update.Add('where produtoid=:Pprodutoid');       tclientdataset(ds4.dataset).Close;
    tclientdataset(ds4.dataset).CommandText:=update.Text;
    tclientdataset(ds4.dataset).Params.ParamByName('pmargem').AsCurrency:=30;
    tclientdataset(ds4.dataset).Params.ParamByName('pvenda').AsCurrency:=50;
    tclientdataset(ds4.dataset).Params.ParamByName('Pembalagem').AsCurrency:=1;
    tclientdataset(ds4.dataset).Params.ParamByName('Ppeso').AsCurrency:=500;
    tclientdataset(ds4.dataset).Params.ParamByName('Pquantidade').AsCurrency:=10;
    tclientdataset(ds4.dataset).Params.ParamByName('Pprodutoid').asinteger:=2;
    tclientdataset(ds4.dataset).Execute;   Eu fiz da forma que esta acima citado tem alguma coisa errada ae? estou usando um clientdataset + Sqldataset+datasetprovider
Responder

Gostei + 0

08/10/2009

Wesley Yamazack

Olá,
  Você esta atualizando os dados do produto "2", o que esta fazendo esta correto, porém falta um cds.ApplyUpdates(-1); Para que ele possa confirmar a alteração. Pois quando você trabalha com CDS, ele trabalha todos os regristros em memória, para confirmar as alterações usamos o cds.ApplyUpdates(-1), geralmente no evento afterInsert, e afterDelete, veja o exemplo.

procedure TFrmCliente.cdsClienteAfterInsert(DataSet: TDataSet);
begin
  cdsCliente.ApplyUpdates(-1);
end;

   Veja se isso irá resolver teu problema.


Um abraço

Wesley Y
Responder

Gostei + 0

09/10/2009

Wesley Yamazack

Olá meu camarada, Dedlock é quando os registros ficam travados no teu banco de dados(Senaõ me engano), pq você ta usando close depois open ? em que evento ?faz o seguinte criar um pequeno exemplo, e me manda para poder dar uma olhada. Pois isso ta muito estranho.


Um abraço

Wesley Y
Responder

Gostei + 0

13/10/2009

Wesley Yamazack

Olá meu caro, estou aguardo para resolvermos o chamado, ok ? Estou a disposição.

Att,

Wesley Y
Responder

Gostei + 0

14/10/2009

Paulo Silva

Segui os passos aqui informado e nao consegui quando executo o apply retorna um erro dizendo que essa operacao nao pode ser solicitada com o clientdataset closed tem como vc fazer um exemplo ou um video atualizando os dados pelo um clientdataset? usei o apply no after insert fiz de tudo quando executo o metodo execute ele para o banco nao deixa eu fazer atualização dizendo que tem uma translação em aberto! O.o           Aguardo Retorno!
Responder

Gostei + 0

14/10/2009

Wesley Yamazack

Olá meu caro,
   Coloque o apply updates no afterpost, e não no afterinsert, como eu havia lhe falado. E veja se resolve. Eu vou fazer o exemplo para você.

Att,

Wesley Y
Responder

Gostei + 0

16/10/2009

Paulo Silva

Estou aguardando o exemplo!
Responder

Gostei + 0

16/10/2009

Paulo Silva

Estou aguardando o exemplo!
Responder

Gostei + 0

16/10/2009

Paulo Silva

Estou aguardando o exemplo!
Responder

Gostei + 0

16/10/2009

Paulo Silva

Estou aguardando o exemplo!         Att  Paulo Rogerio
Responder

Gostei + 0

16/10/2009

Paulo Silva

Oxe que isso que aconteceu mandei uma mensagem, apareceu 4 O.o q bug escroto ^^     Att  Paulo Rogerio
Responder

Gostei + 0

16/10/2009

Wesley Yamazack

Olá meu caro,


  Você fez o que tinha te falado no post anterior ??
"Coloque o apply updates no afterpost, e não no afterinsert, como eu havia lhe falado. E veja se resolve. Eu vou fazer o exemplo para você. "


Att,

Wesley Y
Responder

Gostei + 0

17/10/2009

Paulo Silva

Fiz sim, mas nao obtive sucesso!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar