|
<< Introdução ADO | Objecto Recordset >>
|
referências >
ado > objecto connection |
|
|
. : : . objecto connection . : : .
|
Antes de retirares
dados de uma base de dados, tens de criar e activar uma ligação a essa
base de dados. Em ADO (ActiveX Data Objects), usas o objecto Connection para ligar e quebrar
ligações de bases de dados. O objecto Connection é um objecto de alto nível
que funciona através de um fornecedor (entenda-se driver) que na realidade
faz os pedidos de dados.
Abrir uma Ligação à Base de
Dados
Um simples projecto chamado
ActiveX Data Objects Database (ADODB) contém todos os objectos ADO. O
objecto Connection cria-se da mesma maneira que qualquer outro objecto ASP -
com o método Server.CreateObject.
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection") |
Por defeito todas as
ligações são apenas de leitura, mas podes criar ligações de escrita/leitura
ou apenas escrita alterando as definições da propriedade Mode do
objecto Connection.
Existem várias constantes da propriedade Mode, aliás o ADO é abundante em
constantes. O melhor que se tem a fazer é incluir o ficheiro
adovbs.inc
na página ASP.
Para usar as constantes ADO, inclui a seguinte linha em cada página ASP
que uses o ADO, alterando o endereço para o teu caso:
| <!-- #Include File="adovbs.inc"
--> |
Se abrires este
ficheiro com o Notepad ou outro editor de texto, vais ver uma lista com
grupos de constantes. Convém não alterar nada no ficheiro.
As Constantes
ConnectModeEnum
Normalmente apenas tens de
seleccionar um dos primeiros três valores. Se apenas precisas de ler
informações da base de dados (a acção mais comum) usa a constante
adModeRead. Se apenas precisas de escrever na base de dados, usa a
constante adModeWrite. Há quem use sempre a constante
adModeReadWrite, mas torna o acesso à base de dados mais lento quando
precisas apenas de ler ou escrever na base de dados, e não ambos ao mesmo
tempo.
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = adModeReadWrite |
As últimas cinco
constantes são de menos utilidade numa aplicação Web onde podes não saber
quantas pessoas estão simultaneamente ligadas. A constante
adModeShareDenyRead previne todas as outras ligações de ler da base de
dados. Semelhantemente, a constante adModeShareDenyWrite permite que
outras ligações possam ler da base de dados, mas não lhes permite escrever.
A constante adModeShareExclusive evita que todas as outras ligações
abram a base de dados. A constante adModeShareDenyNone permite que
todas as outras ligações tenham acesso à base de dados com qualquer tipo de
permissão. A constante adModeRecursive trabalha em concernência com
todas as constantes do tipo Share, excepto com a constante
adModeShareDenyNone para propagar a definição para sub-registos do
registo actual. Por exemplo, podes usar adShareDenyRead + adModeRecursive
para negar permissões de escrita para os sub-registos.
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = adShareDenyRead + adModeRecursive |
A ConnectionString
Após o modo estar definido,
tens de definir a propriedade ConnectionString do objecto
Connection. Apesar de teres que definir esta propriedade sempre que
abres um novo objecto Connection, deves definir a(s) ConnectionString(s) no
ficheiro global.asa da aplicação como uma aplicação de nível ou uma variável
de sessão de nível. Existem pelo menos três razões para definir a
ConnectionString no ficheiro global.asa: ficas com apenas um sítio para
verificar problemas na ligação; podes modificar a ligação de uma base de
dados para outra com uma mínima alteração de código; e podes copiar ou mover
a tua aplicação de um servidor para outro de forma muito rápida.
A propriedade
ConnectionString é tão simples como complicada. É dividida em várias
partes, que são todas opcionais, dependendo do tipo de ligação que estás a
usar. Mas normalmente, especifica-se o seguinte:
- Nome do Fornecedor
- Nome do servidor de base de dados
- Nome da base de dados que queres usar
- ID do utilizador (UID) com o qual se vai ligar
- Password (PWD) desse utilizador
As partes da
ConnectionString são separadas com ponto e vírgula (;). Por exemplo, no
nível mais simples, podes usar uma Open Database Connectivity (ODBC)
Data Source Name (DSN), um ID de utilizador, e uma password para ligar à tua
base de dados.
A DSN já contém o nome de fornecedor, o servidor de base de dados, e o
nome da base de dados, por isso não precisas de os especificar novamente.
Por exemplo:
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = adModeReadWrite
Conn.ConnectionString = "DSN=ligacaoDSN;UID=safemode;PWD=safemode;" |
Infelizmente, este não
é o melhor método. Por defeito as ODBC DSN's usam o fornecedor MSDASQL, mas
o fornecedor JET OLEDB é mais rápido e oferece mais funcionalidades. Usa sim
este tipo de string de ligação:
Dim Conn, ConnStr
ConnStr = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" &
Server.MapPath(caminho_da_base_dados)
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = adModeReadWrite
Conn.ConnectionString = ConnStr |
O que está a negrito
é a string de ligação à base de dados, e deve ser escrita numa só linha.
Esta string de ligação contém o nome do fornecedor, o nome do servidor
(neste caso), e o caminho para a base de dados. Aqui foi usada a função
Server.MapPath para traduzir o caminho virtual para o caminho actual no
disco do servidor. Por exemplo, uma base de dados na caminho virtual
| http://www.safemode.web.pt/utilizadores.mdb |
pode ter o seguinte
caminho actual no disco do servidor:
| D:\Web\Users\Safemode\BaseDados\utilizadores.mdb |
A função Server.MapPath
traduz o primeiro endereço para o segundo (que é o que o objecto
ADODB.Connection precisa).
Antes de abrires a
ligação tens de definir as propriedades do objecto Connection. Se mais tarde
quiseres alterar alguma(s) propriedade(s), fecha a ligação, altera o valor
da(s) propriedade(s), e reabre a ligação.
Para abrir uma ligação,
usa o método Open do objecto Connection.
Se o método Open for
executado sem erros, já tens uma ligação à base de dados a funcionar.
Todos os procedimentos
até este ponto podem ser simplificados com uma sintaxe alternativa. O método
Open aceita até quatro argumentos opcionais:
- ConnectionString
- UserID
- Password
- Opções (consistem nas constantes de ConnectOptionEnum)
| Conn.Open ConnStr, "safemode",
"safemode", adModeShareDenyWrite |
Podes especificar mais
valores para as opções, acrescentando constantes em conjunto (adModeShareDenyWrite
+ adModeRecursive).
O Método Connection.Execute
Existem três maneiras de
obter dados da base de dados usando ADO. Todos eles requerem uma ligação. A
maneira mais simples é usar o método Execute do objecto Connection.
O método Execute aceita três argumentos:
- Uma declaração SQL ou
query, tabela, vista, ou o nome de um procedimento gravado chamado o
argumento CommadText.
- Uma variável chamada RecordsAffected que irá conter o número de registos
afectados pela declaração ou query, após concluído o método Execute.
- Uma constante CommandTypeEnum chamada Options que informa a base
de dados do tipo de declaração ou query que queres executar, e se retorna ou
não o objecto RecordSet.
Os objectos Connection
podem abrir tabelas directamente, e podem executar SQL tanto na forma
pré-compilada (chamados procedimentos guardados) como dinamicamente
interpretando e executando a declaração SQL em runtime (momento em que é
executado). Todos estes tipos de pedidos retornam registos. Os registos
retornados chamam-se grupo de resultados, e o ADO agrupa as linhas
resultantes num objecto RecordSet.
O valor de retorno do
método Execute é, por defeoto, um objecto RecordSet que contém o resultado
da declaração ou query. Podes controlar se o método Execute retorna ou não
um objecto RecordSet ao adicionares a constante adExecuteNoRecords às
constantes das Opções. Se estás a executar uma declaração SELECT,
normalmente precisas do objecto RecordSet resultante, mas quando estás a
executar uma query INSERT ou UPDATE, não precisas que sejam retornados
quaisquer registos.
Gerir Transacções Com o
Objecto Connection
Quando accionas um comando
que altera dados no Servidor SQL, como uma query UPDATE, INSERT ou DELETE,
este trata sempre a declaração como uma transacção. Se a declaração falhar,
todas as operações na declaração falham.
Contudo, por vezes é necessário executar uma ou mais declarações como uma
transacção. Para isso tens de agrupar as declarações numa transacção de alto
nível.
Estas transacções são geridas com os métodos BeginTrans,
CommitTrans e RollbackTrans do objecto Connection.
<< Introdução ADO | Objecto Recordset >>
|