Fórum transações do dbexpress usando mysql #343745

26/07/2007

0

E ae pessoal td bem?

Estou com um problema com relação a transação do dbexpress. Vamos lá. Eu quero deixar 2 ou mais transações ativas (sem ter dado o commit ainda), pq disso. ex: tenho um cadastro de clientes e dentro de clientes tem a possibilidade dele cadastrar varios endereco. Qndo eu dou um applyupdates na query do ENDERECO ele fica gravado numa transacao.
Agora qndo eu abro um outro FORM com uma OUTRA transacao e commito, ela grava a outra transacao.
meu código esta assim. eu percebi ondi esta o problema porem nao consigo ativar 2 transacoes ao mesmo tempo.

transcao.TransactionID := 1 // e a outra transacao com outro nome id 2
transacao.isolationlevel := xiREADCOMMITED

if not DM.conexao.InTransaction then
DM.conexao.StartTransaction(transacao)
//como minha transacao 1 esta ativa ele nao ativa a transacao 2 q eh a transacao q eu preciso alterar.

obrigado pela ajuda e desde já agradeco!


Tulio_am

Tulio_am

Responder

Posts

14/03/2011

Roberto Novakosky

O teu código está correto, porém existe uma característica que é própria do MySQL : Em uma mesma conexão o MySQL não suporta transações concorrentes, isto é, vc não consegue abrir 2 transações ao mesmo tempo no MySQL usando somente uma conexão:   Solução: Sempre que vc precisar de uma transação adicional (No MySQL), crie dinamicamente uma nova conexão, uma idéia é vc copiar os parâmetros da conexão que vc já tem ativa para um novo objeto SQLConnection. Aí as tuas queries que precisarem de transação independente vc liga na tua nova conexão independente. Para cada transação concorrente adicional que vc precisar vc terá que criar uma nova conexão.     Roberto Novakosky
Responder

Gostei + 0

14/03/2011

Roberto Novakosky

Veja também se as tabelas que precisarão da transação são InnoDB, pois se for ISAM elas não suportarão transação.   Roberto Novakosky
Responder

Gostei + 0

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

Aceitar