transações do dbexpress usando mysql
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!
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
Curtidas 0
Respostas
Roberto Novakosky
26/07/2007
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
GOSTEI 0
Roberto Novakosky
26/07/2007
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
GOSTEI 0