eu dnovo 2
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!
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
Curtidas 0
Melhor post
Paulo Silva
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é
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é
GOSTEI 1
Mais Respostas
Wesley Yamazack
06/10/2009
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
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
GOSTEI 0
Paulo Silva
06/10/2009
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?
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?
GOSTEI 0
Paulo Silva
06/10/2009
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
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
GOSTEI 0
Wesley Yamazack
06/10/2009
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
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
GOSTEI 0
Wesley Yamazack
06/10/2009
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
Um abraço
Wesley Y
GOSTEI 0
Wesley Yamazack
06/10/2009
Olá meu caro, estou aguardo para resolvermos o chamado, ok ? Estou a disposição.
Att,
Wesley Y
Att,
Wesley Y
GOSTEI 0
Paulo Silva
06/10/2009
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!
GOSTEI 0
Wesley Yamazack
06/10/2009
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
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
GOSTEI 0
Paulo Silva
06/10/2009
Estou aguardando o exemplo!
GOSTEI 0
Paulo Silva
06/10/2009
Estou aguardando o exemplo!
GOSTEI 0
Paulo Silva
06/10/2009
Estou aguardando o exemplo!
GOSTEI 0
Paulo Silva
06/10/2009
Estou aguardando o exemplo!
Att
Paulo Rogerio
GOSTEI 0
Paulo Silva
06/10/2009
Oxe que isso que aconteceu mandei uma mensagem, apareceu 4 O.o q bug escroto
^^
Att
Paulo Rogerio
GOSTEI 0
Wesley Yamazack
06/10/2009
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
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
GOSTEI 0
Paulo Silva
06/10/2009
Fiz sim, mas nao obtive sucesso!
GOSTEI 0
Wesley Yamazack
06/10/2009
Olá meu caro, peço que me mande seus fontes para poder analisar melhor. Pois o que você esta fazendo não esta errado, você deve estar com algum outro problema. Eu faço os meus updates desta forma também e funciona.
Fico no aguardo.
Att,
Wesley Y
Fico no aguardo.
Att,
Wesley Y
GOSTEI 0
Paulo Silva
06/10/2009
Consegui fazer da seguinte maneira
procedure TForm1.BtnExecuteClick(Sender: TObject);
var Transacao: TTransactionDesc;
begin
Transacao.TransactionID:= 10;
Transacao.IsolationLevel:= xilReadCommitted;
// Iniciando a transacao SqlConexao.StartTransaction(transacao); try
cdsup.Execute;
sqlconexao.commit(transacao);
except
sqlconexao.rollback(transacao);
end;
end; eu criei uma nova aplicacao somente com os componentes sqldataset, clientdataset, datasetprovider, sqlconnection para fazer um teste nao obtive sucesso colocando o applyupdate no before post uso o driver do thiago borges e firebird 2.1 tem como voce fazer uma mini aplicacao para exemplificar pq realmente usando o applyupdates eu nao consegui, deu os mesmos erros que estavam ocorrendo na minha aplicacao! Att Paulo,
var Transacao: TTransactionDesc;
begin
Transacao.TransactionID:= 10;
Transacao.IsolationLevel:= xilReadCommitted;
// Iniciando a transacao SqlConexao.StartTransaction(transacao); try
cdsup.Execute;
sqlconexao.commit(transacao);
except
sqlconexao.rollback(transacao);
end;
end; eu criei uma nova aplicacao somente com os componentes sqldataset, clientdataset, datasetprovider, sqlconnection para fazer um teste nao obtive sucesso colocando o applyupdate no before post uso o driver do thiago borges e firebird 2.1 tem como voce fazer uma mini aplicacao para exemplificar pq realmente usando o applyupdates eu nao consegui, deu os mesmos erros que estavam ocorrendo na minha aplicacao! Att Paulo,
GOSTEI 0
Wesley Yamazack
06/10/2009
Ola meu camarada, bom se você consegui show de bola.
Com relação ao ClientDataSet, eu uso o seguinte.. quero editar um registro. eu faço cds.edit, e altero o registro, depois eu vou e gravo, com cds.post. no final eu vou e dou um cds.applyupdates(-1), e tudo funciona sem problema nenhum. Eu não monto meus updates na mão como você esta fazendo.
Um abraço
Wesley Y
Com relação ao ClientDataSet, eu uso o seguinte.. quero editar um registro. eu faço cds.edit, e altero o registro, depois eu vou e gravo, com cds.post. no final eu vou e dou um cds.applyupdates(-1), e tudo funciona sem problema nenhum. Eu não monto meus updates na mão como você esta fazendo.
Um abraço
Wesley Y
GOSTEI 0
Paulo Silva
06/10/2009
tem como vc me enviar um exemplo de como vc faz?
GOSTEI 0
Wesley Yamazack
06/10/2009
Olá meu caro,
Vou te mandar um link com um dos projetos que dou em aula, para você dar uma olhada.
Forte abraço
Wesley Y
Vou te mandar um link com um dos projetos que dou em aula, para você dar uma olhada.
Forte abraço
Wesley Y
GOSTEI 0
Paulo Silva
06/10/2009
Estou aguardando o link!
Att
Paulo
GOSTEI 0
Wesley Yamazack
06/10/2009
Olá meu amigo,
segue um rádido exemplo, porém funcional.
www.rwsolution.com.br/Chamado_CDS.rar
Att,
Wesley Y
segue um rádido exemplo, porém funcional.
www.rwsolution.com.br/Chamado_CDS.rar
Att,
Wesley Y
GOSTEI 0
Paulo Silva
06/10/2009
Boa tarde,
bom eu nao sei se eu nao expressei - me corretamente mais acho q ate agora vc nao conseguiu entender qual é o meu problema a minha duvida e simples porem minha duvida nao e relacionada ao conteudo por vc enviado vou ser direto aki tentar ser preciso
tenho um sqlconnection + sqldataset + datasetprovider(allow command text = True)+clientdataset
tenho um botao que tem a seguinte instrução no meu formulario
procedure teste
var
Instrucao:string;
begin
Instrucao:='Update produto'+
Set Produto varlor = 10'
cdsTeste.close;
CdsTeste.commandtext:=Instrucao;
Cdsteste.execute;
end
so isso quero atualizar um estoque só isso mais nada
quando executo essa instrução para que o estoque seja atualizado conforme a sentença acima eu tenho que fechar a aplicacao para que o estoque seja atualizado no banco, gostaria de saber se tem como fazer sem ter que fechar a aplicacao ou sem ter que fazer na mao conforme post anterior onde eu fiz o mesmo codigo acima (só que abrindo uma transacao e comitando a mesma), ou se tem uma forma mais eficiente de atualizar o estoque pela aplicação
lembrando nao quero ter que usar trigger quero fazer pela aplicacao
essa é minha duvida!
Att
Paulo
GOSTEI 0
Wesley Yamazack
06/10/2009
Olá amigo, desculpe então.
Faça o seguinte ao inves de usar o teu ClientDataSet, faça da seguinte forma.
procedure TForm1.Button1Click(Sender: TObject);
var
Instrucao:string;
begin
Instrucao := 'Update CHEQUE Set idsub_cliente = 3 where idsub_cliente = 1';
DM.Conexao.ExecuteDirect(Instrucao);
DM.CDSCheque.Refresh; //Aqui seu clientDataSet é atualizado.
end;
Um abraço
Wesley Y
Faça o seguinte ao inves de usar o teu ClientDataSet, faça da seguinte forma.
procedure TForm1.Button1Click(Sender: TObject);
var
Instrucao:string;
begin
Instrucao := 'Update CHEQUE Set idsub_cliente = 3 where idsub_cliente = 1';
DM.Conexao.ExecuteDirect(Instrucao);
DM.CDSCheque.Refresh; //Aqui seu clientDataSet é atualizado.
end;
Um abraço
Wesley Y
GOSTEI 0
Wesley Yamazack
06/10/2009
Olá meu camarada, consegui ver o exemplo ? Seria isso ?
Forte abraço,
Wesley Y
Forte abraço,
Wesley Y
GOSTEI 0
Paulo Silva
06/10/2009
resolvido
resolvi assim criei uma classe e controlo por ela ^^
fikou ate mais style assim!!
procedure TUser.EnableUser(maquina: String);
var
Comm : TDBXCommand;
begin
if (maquina = '') then raise Exception.Create('Máquina é requerida!');
abrecon;
FDbxConnection := servercontainer.ConexaoLog.DBXConnection;
Comm := FDbxConnection.CreateCommand; Comm.Text := 'Update User_server Set ativo = True Where maquina = ' + QuotedStr(maquina);
Comm.ExecuteQuery;
fechacon;
FreeAndNil(Comm); end;
var
Comm : TDBXCommand;
begin
if (maquina = '') then raise Exception.Create('Máquina é requerida!');
abrecon;
FDbxConnection := servercontainer.ConexaoLog.DBXConnection;
Comm := FDbxConnection.CreateCommand; Comm.Text := 'Update User_server Set ativo = True Where maquina = ' + QuotedStr(maquina);
Comm.ExecuteQuery;
fechacon;
FreeAndNil(Comm); end;
GOSTEI 0
Wesley Yamazack
06/10/2009
Olá meu camarada,
Que bom que resolvemos.
Att,
Wesley Y
Que bom que resolvemos.
Att,
Wesley Y
GOSTEI 0