Olá galera, nesta Quick Tips, irei falar um pouco sobre a nova infra estrutura do DBExpress. A principal Unit que temos no DBExpress é a DBXCommon, vamos criar uma classe para ficar mais prático e organizado, criemos então uma Unit e vamos salvar como uDBExpressTeste.pas
Inicialmente precisamos dar uses em DBXCommon. Vou utilizar o banco de dados Firebird, então automaticamente precisamos dar uses também em DbxFirebird, se formos utilizar o MySQL, daremos uses em DbxMySQL, para o Oracle DbxOracle, SQL Server usamos DbxMSSQL, estes são os principais SGBD`s que temos.
- DBXFirebird - Versão do Delphi 2010
- DBXCommon - Versão do Delphi 2007 em diante
Agora vamos adicionar uma classe e algumas propriedades.
unit uDBExpressTest;
interface
uses
DBXCommon, DBXFirebird, Dialogs, SysUtils;
Type
TDBExpressTest = Class
private
public
property DBXConn : TDBXConnection;
property Cmnd : TDBXCommand;
property Reader : TDBXReader;
property ConnectionName: String;
property UserName: String;
property Password: String;
procedure ExecuteComand;
End;
Implementation
end.
Descrição das propriedades:
DBXConn | Conexão do DBExpress |
Cmnd | Comando a ser executado do DBExpress |
Reader | Resulta em uma coleção de dados unidirecional |
ConnectionName | Informar a conexão do criada no DataExplorer |
UserName | Informar o usuário do Banco de Dados |
Password | Informar a senha do Banco de Dados |
Vamos implementar a procedure para executar um script simples
procedure TDBExpressTest.ExecuteComand;
Var
S : String;
begin
//Instanciando a conexão
FDBXConn := TDBXConnectionFactory.GetConnectionFactory.GetConnection(
FConnectionName,FUserName, FPassword);
if FDBXConn <> nil then
begin
//Criando o comando para ser executado
FCmnd := FDBXConn.CreateCommand;
//Definindo o comando a ser executado
FCmnd.Text := 'SELECT * FROM CLIENTE';
//Preparamos o comando para ser executado
FCmnd.Prepare;
//Executamos o script anterior
FReader := FCmnd.ExecuteQuery;
//Fazemos um Loop para poder pegar os dados resultantes
while FReader.Next do
begin
//Concatenamos os valores da coluna Descricão apenas uma
//forma de mostrar como pegar o conteúdo armazenado
S := S +(FReader.Value['DESCRICAO'].GetAnsiString) +#13;
end;
//Exibimos os dados resultantes
S := S + '============================';
//Retorna a Versão do Servidor de Banco de Dados
S := S + FDBXConn.ProductVersion;
//Exibimos os dados resultantes
ShowMessage(S);
end;
end;
Veja a função GetAnsiString, temos diversas outras função para diferentes tipos de dados.
Utilizando o exemplo:
procedure TForm1.BitBtn2Click(Sender: TObject);
Var
DBExpressTest : TDBExpressTest;
begin
DBExpressTest := TDBExpressTest.Create;
with DBExpressTest do
begin
ConnectionName := 'BDTDS';
UserName := 'sysdba';
Password := 'masterkey';
ExecuteComand;
end;
end;
Quando executamos a procedure ExecteComand, veremos que irá aparecer um ShowMessage com todos os dados do Field Descricao.
Olá galera, nesta Quick Tips, irei continuar falando sobre o novo DBExpress que temos no Delphi.
Veremos como criar comandos de Inclusão, Deleção e Alteração. Utilizando aquela mesma classe, desenvolvida na parte anterior
unit uDBExpressTest;
interface
uses
DBXCommon, DBXFirebird, Dialogs, SysUtils;
Type
TDBExpressTest = Class
private
public
property DBXConn : TDBXConnection;
property Cmnd : TDBXCommand;
property Reader : TDBXReader;
property ConnectionName: String;
property UserName: String;
property Password: String;
procedure ExecuteComand;
{Novos comandos}
procedure InsertComand;
procedure UpdateComand;
procedure DeleteComand;
End;
Implementation
end.
Vamos agora as implementações de cada Procedure.
InsertComand
procedure TDBExpressTest.InsertComand;
begin
FDBXConn :=
TDBXConnectionFactory.GetConnectionFactory.GetConnection(
FConnectionName,FUserName, FPassword);
if FDBXConn <> nil then
begin
FCmnd := FDBXConn.CreateCommand;
FCmnd.Text := 'INSERT INTO CLIENTE (IDCLIENTE, DESCRICAO,
SEXO)' +
'VALUES (11, ' + QuotedStr('WESLEY YAMAZACK') + ', ' +
QuotedStr('M') + ') ';
FCmnd.Prepare;
FCmnd.ExecuteQuery;
FCmnd.Close;
end;
end;
<br clear="all"> UpdateComand
procedure TDBExpressTest.UpdateComand;
begin
FDBXConn :=
TDBXConnectionFactory.GetConnectionFactory.GetConnection(
FConnectionName,FUserName, FPassword);
if FDBXConn <> nil then
begin
FCmnd := FDBXConn.CreateCommand;
FCmnd.Text := ' UPDATE CLIENTE '+
' SET DESCRICAO = ' +QuotedStr('WESLEY Y.') +
' WHERE IDCLIENTE = 11';
FCmnd.Prepare;
FCmnd.ExecuteQuery;
FCmnd.Close;
end;
end;
DeleteComand
procedure TDBExpressTest.DeleteComand;
begin
FDBXConn :=
TDBXConnectionFactory.GetConnectionFactory.GetConnection(
FConnectionName,FUserName, FPassword);
if FDBXConn <> nil then
begin
FCmnd := FDBXConn.CreateCommand;
FCmnd.Text := 'DELETE FROM CLIENTE ' +
' WHERE IDCLIENTE = 11';
FCmnd.Prepare;
FCmnd.ExecuteQuery;
FCmnd.Close;
end;
end;
Com isso encerro esta segunda parte das dicas do novo DBExpress, porém tem muito mais coisas além destas duas partes que mostrei a vocês, podem notar que na pasta de instalação do Delphi 2010, por exemplo, tem uma pasta com o código fonte das units, veja o caminho, C:\Program Files\Embarcadero\RAD Studio\7.0\source\, para pesquisar mais units, analise nesta pasta.
Olá galera, nesta Quick Tips, irei continuar falando sobre o novo DBExpress que temos no Delphi, vamos ver agora a parte de Transações com o novo DBExpress, veja como é simples trabalhar com transações.
Temos um Objeto do tipo TDBXTransaction, este por sua vez controla as transações que temos. Veja o exemplo com duas tabelas envolvidas, Cliente e TipoCliente observe a imagem abaixo
Na procedure DeleteComand, estou executando 3 comandos :
- Deletar o IDCliente = 11 , sem problemas
- Deletar o IDTipoCliente = 4 , temos problemas pois existe um IDCliente que utiliza este valor 4, ao executarmos irá gerar um erro de restrição de Chave Estrangeira.
- Deletar o IDCliente = 12 , sem problemas porém este comando não será executado, devido ao segundo passo ter apresentado um erro.
procedure TDBExpressTest.DeleteComand
Var
DBXTrans: TDBXTransaction;
begin
FDBXConn :=
TDBXConnectionFactory.GetConnectionFactory.GetConnection(
FConnectionName,FUserName, FPassword);
if FDBXConn <> nil then
begin
Try
{“Startamos” a transação}
DBXTrans := DBXConn.BeginTransaction(TDBXIsolations.ReadCommitted);
FCmnd := FDBXConn.CreateCommand;
{Primeiro Comando}
FCmnd.Text := 'DELETE FROM CLIENTE ' +
' WHERE IDCLIENTE = 11';
FCmnd.Prepare;
FCmnd.ExecuteUpdate;
FCmnd.Close;
{Segundo Comando}
FCmnd.Text := 'DELETE FROM TIPOCLIENTE ' +
' WHERE IDTIPOCLIENTE = 4’;
FCmnd.Prepare;
FCmnd.ExecuteUpdate;
FCmnd.Close;
{Terceiro Comando}
FCmnd.Text := 'DELETE FROM CLIENTE ' +
' WHERE IDCLIENTE = 12';
FCmnd.Prepare;
FCmnd.ExecuteUpdate;
FCmnd.Close;
{“Comitamos” a transação}
DBXConn.CommitFreeAndNil(DBXTrans);
Except
{Roolback na transação quando encontramos um erro}
DBXConn.RollbackFreeAndNil(DBXTrans);
ShowMessage('Um Erro ocorreu!!!!');
End;
end;
end;