Implementando uma transação no Delphi usando o componente UniDAC.TUniConnecition em um banco de dados SQLite.

Olá a todos

Neste post mostrarei como inserir 1000 registros em uma única transação de banco de dados em uma Aplicação FMX usando SQLite com UniDAC.

Para fazermos uso de transações em Delphi e UniDAC precisamos apenas de um componente de conexão e 3 métodos:

  1. Conexao.StartTransaction; //inicia a transação.
  2. Conexao.Commit; //grava a transação.
  3. Conexao.Rollback; // desfaz a transação.
try
Conexao.StartTransaction;
///faz alguma coisa
//faz outra coisa
Conexao.Commit;
except
on E: Exception do
Conexao.Rollback;
end;

Crie a pasta c:\soprogramando\DemoTransacao.

Baixe e instale a ferramente SQLite Studio

Abra o SQLiteStudio:

  1. Crie um novo banco de dados “dados.db” na pasta c:\soprogramando\DemoTransacao.
  2. Crie a tabela produto:
    CREATE TABLE produto
    (id_produto INTEGER PRIMARY KEY AUTOINCREMENT,
    nome VARCHAR (155)
    );

2018-10-23 (3)

Agora vamos no criar  o App no Delphi eu usei  a versão: RAD Studio CE 10.2

  • Crie um novo projeto, FMX em Menu File->New->Multi Device Application Delphi
  • No TForm1:
    1. Adicione um componente TButton.
    2. Adicione um Componente TLabel .
    3. Adicione um componente TUniConneciton.
    4. Adicione um Componente TSQLiteUniProvider.
    5. Adicione um componente TUniSQL.

Minha tela ficou assim:

Capturar

  • Clique com menu de contexto no componente TUniConneciton e escolha a opção “Connection Editor”
  • Na aba connect:
    1. Em Provider, selecione o protocolo SQLite.
    2. Em Database informe o  caminho completo para o banco de dados: “c:\soprogramando\DemoTransacao\dados.sql”
    3. Desmarque a opção LoginPrompt;
    4. Teste sua conexão clicando em connect(se algum erro ocorrer veja o caminho do banco de dados).
    5. Importante! Desconecte do banco
    6. clique em ok.

2018-10-23 (6)

Seguindo a ideia inicial, implementar esse  código em uma Thread Anonima .

try
UniConnection1.StartTransaction;
///faz alguma coisa
//faz outra coisa
UniConnection1.Commit;
except
on E: Exception do
UniConnection1.Rollback;
raise;//força o Delphi a parar
end;
  • Crie um novo método  na área pública da classe TForm1

Capturar1

Gere a implementação do método usando Ctrl+shift+C.

Observação: Usei uma Thread Anonima, para evitar que meu aplicativos quando executado em Android ou IPhone, fique completamente travado durante processo do for.
O uso de threads é obrigatório quando temos: Código lento, Loops ou interface de usuário sem resposta.

Capturar3

Agora é só chamar a thread no evento clique do botão.

Capturar4

Para Conectar seu aplicativo ao SQLite no Android ou IPhone, lembre-se:

  • O Componente UniConnection1 deve ter sua propriedade Connected=False.
  • O banco de dados deve estar na lista Deployment dos arquivos Delphi,

Capturar6

  • Programe o evento BeforeConnect do componente UniConnection1

Capturar5

Leia aqui como fazer isso

Agora basta compilar sua aplicação executar a sua transação,
2018-10-23 (8)2018-10-23 (9)2018-10-23 (10)

Consulte o banco e verá 1000 novos registros.

2018-10-23 (12)

o código foi testado tanto na plataforma Win32 como na plataforma Android.

Referencias:

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Mobile_Tutorial:_Using_FireDAC_and_SQLite_(iOS_and_Android).
https://www.sqlite.org/lang_transaction.html
http://blog.marcocantu.com/blog/2014_may_background_delphi_android_threads.html
https://www.devart.com/unidac/docs/?work_transaction.htm

Baixe aqui o código deste  exemplo 

Abraços.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

WordPress.com.

Acima ↑

%d blogueiros gostam disto: