GARANTIR DESCONTO

Fórum dbxpress e transactions #336584

21/01/2007

0

Gostaria de saber como funcionam e como controlar as transações no dbXpress.

Quando eu tento, por exemplo, incluir um item numa venda já salva, recebo a mesnagem de erro: ´record not found or changed by another user´

Talvez o meu problema nem sejam as transações e eu esteja falando besteira, mesmo assim gostaria de consertar isso.

Grato!


Vitor Rubio

Vitor Rubio

Responder

Posts

22/01/2007

Macario

Olá, Vitor


Veja este tópico:[url=http://forum.clubedelphi.net/viewtopic.php?t=58547&highlight=bidirecionalurl]Transações com DbExpress de forma Bidirecional[/url]

Acredito que irá lhe ajudar. 8)


Responder

Gostei + 0

22/01/2007

Adriano Santos

Muito bem lembrado, este tópico indicado está excelente e bem explicado.
Qq dúvida postae.


Responder

Gostei + 0

01/02/2007

Vitor Rubio

porque no exemplo ele usa o número 1 para identificador da transação?

O que aconteceria se tivesse duas transações com o id 1?

Se eu estou trabalhando com mestre-detalhe, a venda e seus itnes, eu tenho que trabalhar com duas transções?

Grato!


Responder

Gostei + 0

01/02/2007

Adriano Santos

E ai véio blz? Faz teeeemmmpo que não apareço...hehehe, tudo certo?

Mano, pelo que entendi não é necessário termos duas ID´s de transação, já que todos os ClientDataSet´s estarão ligados no mesmo SqlConnection. Olha isso:

var
  TudoOK: Boolean;
  Transacao: TTransactionDesc;
begin
  TudoOK:= False;
  Transacao.TransactionID:= 1;
  Transacao.IsolationLevel:=  xilReadCommitted;
  SQLConnection1.StartTransaction(Transacao);
  // Aplicando os updates
  if ClientDataSet1.ApplyUpdates(0) = 0 then
    if ClientDataSet2.ApplyUpdates(0) = 0 then
      if ClientDataSet3.ApplyUpdates(0) = 0 then
        if ClientDataSet4.ApplyUpdates(0) = 0 then
          TudoOK:= True;
  // Note que TudoOK só será true se não houver nenhum erro em nenhum dos Updates
  if TudoOK then
  begin
    SQLConnection1.Commit(Transacao);
    ShowMessage(´Atualizações OK.´);
  end
  else
  begin
    SQLConnection1.Rollback(Transacao);
    ShowMessage(´Ocorreram erros. Alterações descartadas.´);
  end;
end;


Aqui abrimos uma única transação. Quem comita ou dá rollback é o SqlConection:

    SQLConnection1.Commit(Transacao);

    SQLConnection1.Rollback(Transacao);


Ou seja, tudo que estiver envolvido (leia-se conectado) na transção/SqlConnection será comitado.

Alguém me corrija se eu falei besteira.
Fui


Responder

Gostei + 0

02/02/2007

Vitor Rubio

Obrigado.. Mesmo assim o meu problema não era com transações, então isso não resolveu. O meu problema é que numa relação mestre-detalhe, eu não consigo editar e alterar o detalhe. Na hora de salvar o mestre, dá erro de ´record not found or changed by another user...´

Valew!


Responder

Gostei + 0

02/02/2007

Macario

Olá.


Veja que nos exemplos do topico indicado, não é usado as propriedades MasterSource dos Datasets envolvidos.

Você faz mestre/detalhe usando esta propriedade?


[]´s


Responder

Gostei + 0

02/02/2007

Vitor Rubio

não usei mastersource no clientdataset, mas usei datasource no sqlDataset( dbxpress) de onde vem os dados desse clientdataset, sendo assim, o mestre (vendas) tem um campo do tipo ´datasetField´ que é o proprio clientdataset detalhe (itens)


Valew!


Responder

Gostei + 0

02/02/2007

Macario

Olá.

Eu não ´manjo´ deste tipo de ´ligações´, por isso não compreendi o seu metodo.

Na pratica trabalho com Datasets independentes, pois usando o controle de transação, posso ficar tranquilo sobre a integridade dos dados.

:roll:


Responder

Gostei + 0

02/02/2007

Vitor Rubio

cara, eu consegui resolver o problema dando um refresh, ou fechando e reabrindo, o clientdataset depois do applyupdates e commit.

Os dois jeitos funcionam.

Gostaria de saber como seria a sua abordagem, [b:19e7220153]Macario[/b:19e7220153]
como funciona manter o dataset desligado de tudo? como grava no banco depois? um loop que popula outro ou direto via SQL? como você deleta o mestre ou, ao cancelar o mestre, não inclui nenhum dos detalhes?

Grato!


Responder

Gostei + 0

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

Aceitar