Olá galera, nesta Quick Tips, irei mostra como podemos trabalhar com transações no Delphi usando a classe TTransactionDesc, localizada na unit SqlExpr. Já adianto que para este exemplo não vamos esquecer de dar uses em SqlExpr.
Vamos adicionar um SQLConnection configurado para o seu banco de dados: não importa qual seja. Logo em seguida vamos adicionar um Button(BtnIncluir), como mostra o exemplo:
Inicialmente vamos criar dois records para ilustrarmos o exemplo. Veja a declaração dos dois records:
type
RCliente = Record
IDCliente, Descricao: String;
End;
RTelefone = Record
IDTelefone, IDCliente, Descricao: String;
End;
A estrutura das duas tabelas que irei implementar é:
- Cliente
IDCliente
Descricao - Telefone
IDTelefone
IDCliente
Descricao
Na seção private, vamos incluir duas procedures IncluirCliente e IncluirTelefone:
private
{ Private declarations }
procedure IncluirCliente;
procedure IncluirTelefone;
Agora vamos implementar cada uma das procedures:
#IncluirCliente
procedure TFrmTransacao.IncluirCliente;
Var
C : RCliente;
xQry : TSQLQuery;
begin
C.IDCliente := '1';
C.Descricao := 'Wesley Yamazack';
xQry := TSQLQuery.Create(Self);
xQry.SQLConnection := SqlConnectionDevMedia;
xQry.SQL.Add(' INSERT INTO CLIENTE(IDCLIENTE, DESCRICAO )' );
xQry.SQL.Add(' VALUES ( '+ C.IDCliente + ' , ' + QuotedStr(C.Descricao) + ' ) ' );
xQry.ExecSQL;
ShowMessage('Cliente incluído com sucesso');
end;
#IncluirTelefone
procedure TFrmTransacao.IncluirTelefone;
Var
T : RTelefone;
xQry : TSQLQuery;
begin
T.IDTelefone := '1';
T.IDCliente := '1';
T.Descricao := '3333-3333';
xQry := TSQLQuery.Create(Self);
xQry.SQLConnection := SqlConnectionDevMedia;
xQry.SQL.Add(' INSERT INTO TELEFONE(IDTELEFONE, IDCLIENTE, DESCRICAO ) ' );
xQry.SQL.Add(' VALUES ( '+ T.IDTelefone + ' , ' + T.IDCliente + ' , ' +
QuotedStr(T.Descricao) + ' ) ' );
xQry.ExecSQL;
ShowMessage('Telefone incluído com sucesso');
end;
end.
E por último vamos a implementação do BtnIncluir:
procedure TFrmTransacao.BtnIncluirClick(Sender: TObject);
Var
Trans : TTransactionDesc;
ID : Integer;
begin
SqlConnectionDevMedia.StartTransaction(Trans);
Trans.TransactionID := Random(ID);
IncluirCliente;
IncluirTelefone;
SqlConnectionDevMedia.Commit(Trans);
end;
Por que usar transação?
Imagine que você só possa incluir um cliente, se ele tiver um telefone, e por um acaso, deu erro ao incluir um telefone, o seu cliente não poderá ficar sem um telefone. Com a transação o processo só é concluído, ou seja, os dois registros só são criados se ambos estiverem corretos, do contrário nenhum dos dois será incluído.
Fico por aqui ate à próxima Quick Tips. Baixe o exemplo completo neste post.