Curso de dbExpress e DataSnap

Parte IV – SQLConnection – criando conexões

Nesta parte do curso, vamos conhecer em detalhes o componente SQLConnection e criar nossa primeira conexão dbExpress.

A classe TSQLConnection

A classe TSQLConnection representa uma conexão dbExpress. Um SQLConnection faz uso de um driver para conectar um servidor de banco de dados. Os atuais bancos suportados são:

·         DB2

·         MySQL

·         SQL Server

·         Informix

·         Oracle

·         InterBase

 

O dbExpress não suporta bancos locais, como Paradox e DBase. Isso porque o dbExpress nada mais é que uma “casca fina” sobre a API do banco de dados SQL. Como Paradox e DBase não são servidores SQL (SDBDs), não são suportados pelo dbExpress.

Os driver e conexões são definidos em dois arquivos de configuração. O primeiro, dbxdrivers.ini em Windows ou os dbxdrivers em Linux, lista os drivers instalados e as bibliotecas (DLLs ou shared objects no Linux (so)) requeridos pela conexão.  O segundo, dbxconnections.ini, em Windows ou os dbxconnections em Linux, lista as configurações da conexão.  Cada configuração representa um conjunto de parâmetros de componentes TSQLConnection e descreve uma conexão com um banco de dados.  Para criar uma configuração, basta dar um duplo clique em um componente TSQLConnection e usar editor para criar a conexão. 

SQLConnection - Principais Propriedades

ActiveStatements

 Número de comandos ativos sendo executados no banco de dados

 

AutoClone

 Especifica se o componente automaticamente clona conexões com o banco de dados quando for necessário

 

Connected

 Indica se a conexão está ativa

 

ConnectionName

 Nome da conexão no arquivo de configuração

 

ConnectionState

 Indica o corrente estado da conexão

 

DataSets

 Lista todos os DataSets ativos da conexão

 

DriverName

 Indica o nome do driver associado à conexão

 

GetDriverFunc

 Indica a função exportada na DLL do driver

 

InTransaction

 Se uma transação está em progresso

 

KeepConnection

 Indica se a conexão deve ficar ativa se não existirem DataSets abertos

 

LibraryName

 Nome da DLL do driver dbExpress

 

LoadParamsOnConnect

 Indica se o componente deve ler as configurações dinamicamente a partir do dbxconnections.ini

 

LocaleCode

 Indica se a ordenação em DataSets deve ser com base na localização

 

MaxStmtsPerConn

 Indica o número máximo de comandos ativos por conexão

 

MetaData

 Permite acesso aos metadados do banco de dados

 

MultipleTransactionsSupported

 Indica se o banco de dados suporta múltiplas transações

 

Params

 Lista os parâmetros de conexão

 

ParamsLoaded

 Indica se os parâmetros foram lidos do dbxconnections.ini

 

SQLConnection

 Acesso ao objeto interno do driver dbExpress que representa a conexão

 

SQLHourGlass

 Indica se o cursor de tela (SQL) deve ser usado durante processamentos

 

TableScope

 Indica quais tipos de tabelas devem ser retornadas em operações de metadados

 

TransactionsSupported

 Indica se o banco de dados suporta transações

 

VendorLib

 Indica o nome da biblioteca cliente (DLL) do banco de dados

 SQLConnection - Principais Métodos

CloneConnection

 Retorna uma cópia do objeto de conexão

 

CloseDataSets

 Fecha todos os DataSets associados à conexão

 

Commit

 Efetua um Commit em uma transação

 

Create

 Cria uma instância da classe TSQLConnection

 

Destroy

 Destrói a instância do objeto

 

Execute

 Executa um comando SQL no banco de dados

 

ExecuteDirect

 Executa um comando SQL no banco de dados, que não possua parâmetros

 

GetDefaultSchemaName

 Retorna o default schema do objeto do banco de dados

 

GetFieldNames

 Obtém a lista de campos de uma tabela, em um TStrings

 

GetIndexNames

 Obtém a lista de índices de uma tabela, em um TStrings

 

GetLoginUsername

 Retorna o nome do usuário logado no BD

 

GetPackageNames

 Obtém a lista de packages do BD, em um TStrings

 

GetProcedureNames

 Obtém a lista de stored procedures do BD, em um TStrings

 

GetProcedureParams

 Obtém a lista de parâmetros de stored procedures do BD, em um TStrings

 

GetSchemaNames

 Obtém o nome de todos os objetos do BD, em um TStrings

 

GetTableNames

 Obtém a lista de tabelas do BD, em um TStrings

 

LoadParamsFromIniFile

 Carrega os parâmetros de conexão a partir de um arquivo INI

 

Rollback

 Efetua um RollBack em uma transação

 

SetTraceCallbackEvent

 Define uma função de callback que é chamada para cada comando executado no servidor

 

StartTransaction

 Inicia uma transação

 

Close

 Fecha a conexão

 

Open

 Abre a conexão

SQLConnection - Principais Eventos

OnLogin

 Permite definir parâmetros de login (username e senha).

 

TraceCallbackEvent

 Permite acesso a uma função de callback que é chamada para cada comando executado no servidor

 

AfterConnect

 Disparado após a conexão ser estabelecida

 

BeforeConnect

 Disparado antes da conexão ser estabelecida

 

AfterDisconnect

 Disparado após a conexão ser fechada

 

BeforeDisconnect

Disparado antes da conexão ser fechada

Criando uma conexão

É muito simples criar uma conexão dbExpress. Pressupondo que você já tenha o Interbase rodando e previamente configurando (neste curso vou usar o IB 7.5), basta colocar um SQLConnection no form, dar um duplo clique sobre ele e acessar o editor de conexões:

image001.png 

No editor de conexões do dbExpress, clique no ícone +. Escolha o driver do banco desejado e dê um nome para a conexão:

image003.png 

Informe no parâmetro DataBase o caminho do banco de dados:

image005.png 

Nota: O parâmetro Database é utilizado de diferentes formas, dependendo do driver. Para conexões IB / FB, é preciso especificar o nome do host (servidor) juntamente com o caminho do banco, separados por “:”. É errado tentar acessar o servidor usando algo do tipo “\\servidor\c$\caminho\db.gdb”. Nesse caso, o servidor seria a máquina local, mas acessando um arquivo em outra máquina usando compartilhamento de rede.

 

Para o SQL Server, por exemplo, o nome do servidor e do banco são indicados em parâmetros distintos (HostName e Database). Nesse caso, Database não é o caminho físico do banco no disco, mas o nome registrado no Enterprise Manager. Para o DB2, o Database deve indicar o Alias configurado no DB2 Client, que contém outras informações de acesso, como o endereço do servidor, porta etc. Procedimento semelhante também é feito para o Oracle.

Essa configuração fica salva no arquivo dbxconnections.ini

dbxconnections.ini

O dbExpress e o BDE são bastante semelhantes com relação aos parâmetros utilizados em uma conexão. Como você deve lembrar, o BDE guardava informações sobre os aliases em um arquivo chamado idapi32.cfg, localizado normalmente em c:\Arquivos de Programas\Arquivos Comuns\Borland Shared\BDE.  Esse arquivo não era manipulado diretamente, e sim utilizando-se o BDE Administrator a partir do Painel de Controle.

 

Com isso, ficava muito simples alterar dinamicamente um parâmetro de conexão, como o caminho do banco ou endereço do servidor, pois essas informações ficavam externas à aplicação. Não era preciso recompilar nada caso fosse necessário fazer alguma modificação nos parâmetros de acesso. Também era possível utilizar um componente Database. Em compensação, o BDE é uma “camada pesada” de acesso a servidores SQL. Foi feito para o mundo duas camadas e possui um mecanismo de cache rudimentar. Freqüentemente o desenvolvedor sentia-se obrigado a instalar quase 18 MB de DLLs para acesso a um BD.

 

Ao contrário, o dbExpress é um engine leve de acesso, baseado na implementação de interfaces que acessam diretamente o driver cliente do BD, dispensado a instalação de bibliotecas adicionais. Tudo o que você precisa distribuir é a DLL indicada na propriedade LibraryName do SQLConnection, cujo tamanho varia entre 90 kb e 200 kb, dependendo do driver. Também é necessário distribuir a biblioteca Midas.dll, que na atual versão possui somente cerca de 290 Kb.

 

Semelhante ao BDE, as informações sobre as conexões criadas no dbExpress ficam em um arquivo de configuração, chamado dbxconnections.ini, localizado normalmente em  c:\Arquivos de Programas\Arquivos Comuns\Borland Shared\dbExpress. Abra esse arquivo e veja que ele contém uma sessão chamada “DB_IB”, que define os parâmetros da conexão que criamos no Delphi. Veja um trecho do arquivo a seguir (esses parâmetros são os mesmos que estão atualmente na propriedade Params do SQLConnection):

 

[DB_IB]

DriverName=Interbase

Database=localhost:c:\caminho\db.gdb

User_Name=sysdba

Password=masterkey

SQLDialect=3

...

 

O arquivo dbxconnections.ini é utilizado, até agora, apenas pela IDE do Delphi. Repare que cada conexão tem um parâmetro chamado DriverName. O Delphi utiliza esse valor para configurar algumas propriedades do SQLConnection que são específicas do driver utilizado.

 

Por exemplo, se o DriverName for Interbase, as propriedades GetDriverFunc, LibraryName e VendorLib terão os valores getSQLDriverINTERBASE, dbexpint.dll e gds32.dll, respectivamente. Esses valores mudam para o DB2, Oracle, SQL Server etc. Essas configurações são obtidas através de um segundo arquivo de configuração, chamado dbxdrivers.ini.

 

Dica: Para mais informações sobre os arquivos de inicialização do dbExpress, consulte os tópicos “dbxconnections.ini” e “dbxdrivers.ini” na ajuda do Delphi.

Testando a conexão

Pronto, agora já podemos testar a conexão! Para isso, coloquei um Button no form e digitei:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  try

    try

      SQLConnection1.Open();

      ShowMessage('Conexão feita com sucesso!');

    except

      ShowMessage('Erro ao conectar');

    end;

  finally

    if SQLConnection1.Connected then

      SQLConnection1.Close();

  end;

end;

 

Lembre-se de definir o LoginPrompt como False. Execute e teste a aplicação.

image007.png 

Download

Você pode fazer download de todos os exemplos deste curso a partir do endereço cc.borland.com/cc/ccweb.exe/author?authorid=222668

 

dbExpress, DataSnap e ClientDataSet: técnicas avançadas

Para mais informações sobre acesso a dados no Delphi e técnicas avançadas, sugiro a leitura do meu livro, “Delphi: Programação para Banco de Dados e Web”, como apoio para o aprendizado das tecnologias. Na obra mostro várias técnicas introdutórios e avançadas de desenvolvimento com ClientDataSet, dbExpress e DataSnap (multicamadas, incluindo SOAP e COM+).

Leia todos artigos da série