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:
No editor de conexões do dbExpress, clique no ícone +. Escolha o driver do banco desejado e dê um nome para a conexão:
Informe no parâmetro DataBase o caminho do banco de dados:
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.
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
- Curso de dbExpress e DataSnap
- Curso de dbExpress e DataSnap - Parte II
- Curso de dbExpress e DataSnap - Parte III
- Curso de dbExpress e DataSnap - Parte IV
- Curso de dbExpress e DataSnap - Parte V
- Curso de dbExpress e DataSnap - Parte VI
- Curso de dbExpress e DataSnap - Parte VII
- Curso de dbExpress e DataSnap - Parte VIII
- Curso de dbExpress e DataSnap - Parte IX
- Curso de dbExpress e DataSnap - Parte X
- Curso de dbExpress e DataSnap - Parte XI
- Curso de dbExpress e DataSnap - Parte XII
- Curso de dbExpress e DataSnap - Parte XIII
- Curso de dbExpress e DataSnap - Parte XIV
- Curso de dbExpress e DataSnap - Parte XV
- Curso de dbExpress e DataSnap - Parte XVI
- Curso de dbExpress e DataSnap - Parte XVII
- Curso de dbExpress e DataSnap - Parte XVIII
- Curso de dbExpress e DataSnap - Parte XIX
- Curso de dbExpress e DataSnap - Parte XX
- Curso de dbExpress e DataSnap - Parte XXI
- Curso de dbExpress e DataSnap - Parte XXII
- Curso de dbExpress e DataSnap - Parte XXIII
- Curso de dbExpress e DataSnap - Parte XXIV
- Curso de dbExpress e DataSnap - Parte XXV
- Curso de dbExpress e DataSnap - Parte XXVI
- Curso de dbExpress e DataSnap - Parte XXVII
- Curso de dbExpress e DataSnap - Parte XXVIII
- Curso de dbExpress e DataSnap - Parte XXIX
- Curso de dbExpress e DataSnap - Parte XXX