Fórum DBEXPRESS - NÚMERO DAS TRANSAÇÕES #374372
31/08/2009
0
Tenho a seguinte dúvida a respeito do emprego de Transações.
Se meu programa (do lado cliente) está sendo executado em 3 máquinas...
E imaginando que 3 usuários estão a Alterar ao mesmo tempo...
Digamos... um Cliente cadastrado no BD.
No meu programa estou Iniciando a transação desta forma:
procedure TForm1.BtAlterarClick(Sender: TObject);
var
Transacao: TTransactionDesc;
begin
try
Transacao.TransactionID := 2001;
Transacao.IsolationLevel := xilREPEATABLEREAD;
SQLConnection1.StartTransaction(Transacao);
SQLDataSet1.Close;
SQLDataSet1.CommandType := ctQuery;
SQLDataSet1.CommandText := ´update Clientes set Nome = :pNome where Codigo = :pCodigo´;
SQLDataSet1.ParamByName(´pNome´).AsString := EdNome.Text;
SQLDataSet1.ParamByName(´pCodigo´).AsInteger := StrToInt(EdCodigo.Text);
SQLDataSet1.ExecSQL;
SQLConnection1.Commit(Transacao);
except
on Exc:Exception do
begin
ShowMessage(´Ocorreu um erro na tentativa de alteração do registro: ´ + Exc.Message);
SQLConnection1.Rollback(Transacao);
end;
end;
Então...
No caso a Transação é iniciada com o número ´2001´ nas 3 máquinas Clientes quando se vai Alterar um Determinado Cliente.
Isto é o correto?
Ou eu deveria gerar um numero único (criando uma função para gerar este numero único de Transação) para cada máquina Cliente poder Incluir, Alterar, Excluir os registros cadastrados?
Ex:
Transacao.TransactionID := 35458; (número gerado para alterar um Cliente apartir da a máquina 1)
Transacao.TransactionID := 46932; (número gerado para alterar um Cliente apartir da a máquina 2)
Transacao.TransactionID := 14324; (número gerado para alterar um Cliente apartir da a máquina 3)
E o mesmo eu teria que fazer para as Inclusões e Exclusões (gerar numeros únicos para cada transação)?
Ou devo apenas diferenciar os numeros das Transações (como estou fazendo atualmente) de acordo com o tipo das operações realizadas (independente da máquina cliente que inicia)...
Exemplo:
Inclusões de Clientes (transação = 1001), Inclusões de Cidades transação = = 1002), ... etc...
para as Alteração de Clientes (transação = 2001), Alteração de Cidades (transação = 2002) ... etc...
para as Exclusões de Clientes (transação = 3001), Exclusões de Cidades (transação = 3002)... etc...
Desculpem as redundâncias.
Grato desde já.
Userba
Curtir tópico
+ 0Posts
31/08/2009
P.rodrigo
Gostei + 0
31/08/2009
Userba
...
Valeu pela dica amigão.
...
Então...
Se cada transação, independente da Operação a ser realizada (Inclusão, Consulta, Exclusão), etc... deve ter um número único, seria uma boa ideia, gerar tais numeros de transações, tomando-se com base por exemplo: o IP da máquina onde o programa cliente está sendo executado (isto para programas que rodam apenas em redes locais)?
...
ou... se criar uma tabela de controle, com o fim de armazenar o numero da ultima transação (a que está sendo executada) de forma que se... por exemplo (uma inclusão, alteração, exclusão, etc... de um cliente), foi iniciada em outra máquina, antes se leria a transação atual na tabela de controle de transações, dai se geraria uma outra diferente, para só então se prosseguir com a tal operação?
...
grato se puder complementar a idéia.
Gostei + 0
01/09/2009
P.rodrigo
Falowz!
Gostei + 0
01/09/2009
Userba
Valeu pela atenção.
Andei dando uma pesquisada na net.
Deu para ficar por dentro a respeito do uso de transações.
A solução que vou empregar é mesmo de gerar números aleatórios.
Vi soluções utilizando GUIDs... Handle da aplicação... Random... etc.
De qualquer forma vou ver se dou uma olhada na video-aula que citou.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)