|
<< Get vs. Post | Inserir Registos >>
|
tratar dados >
bases de dados > listar registos |
|
|
. : : . listar registos . : : .
|
Aqui vamos ver um exemplo prático de como usar ASP e
ADO para criar um site navegável com base de dados. Vamos primeiro ver
exemplos simples, e depois passamos aos mais complexos.
Considera uma base de dados para uma turma de alunos.
O esquema da base de dados é o seguinte:
| Tabela:
Aluno |
| ID |
Número ID do aluno; também chave primária
da tabela. |
| PrimeiroNome |
Primeiro nome do aluno. |
| UltimoNome |
Último nome do aluno. |
| DataNascimento |
Data de nascimento do aluno. |
| Email |
Endereço de e-mail do aluno. |
Obter os Dados
Precisas de usar a declaração Select do SQL para ler os dados
de uma tabela (podes consultar mais informações sobre SQL mais à frente na
Referência SQL).
Digamos que queres visualizar uma lista completa de todos os alunos da
turma. Aqui está uma página que lista os registos de todos os alunos numa
Tabela:
|
<HTML>
<HEAD>
<TITLE>Registos de Alunos</TITLE>
</HEAD>
<BODY>
<%
Dim Conn
Dim DsnAccess
Set Conn = Server.CreateObject("ADODB.Connection")
DsnAccess = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\BasesDados\Alunos.mdb"
Conn.Open DsnAccess
Dim RS
Set RS = Server.CreateObject ("ADODB.Recordset")
Dim SqlString
SqlString = "Select * From Aluno"
Set RS = Conn.Execute(SqlString)
If RS.EOF And RS.BOF Then
Response.Write "Existem 0 registos."
Else
RS.MoveFirst
While Not RS.EOF
Response.Write RS("PrimeiroNome")
Response.Write RS("UltimoNome")
Response.Write "<HR>"
RS.MoveNext
Wend
End If
%>
</BODY>
</HTML> |
Vamos agora ver o exemplo linha a linha.
As primeiras linhas são de abertura das etiquetas de HTML para qualquer
página. Não têm qualquer código ASP. O bloco de ASP começa com a declaração,
que é a declaração de duas variáveis que vamos usar mais tarde.
A segunda linha,
| Set RS =
Server.CreateObject ("ADODB.Connection") |
faz as seguintes duas coisas:
Primeiramente, o lado direito da declaração, Server.CreateObject()
é usado para criar uma instância de um objecto COM que tem o ProgID
ADODB.Connection.
Depois a declaração Set atribui esta referência
à nossa variável RS. Agora usamos o objecto criado para ligarmos à
base de dados usando uma Connection String (string de ligação).
A string,
| "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BasesDados\Alunos.mdb" |
é uma string de expressão que
diz ao objecto onde procurar a base de dados, e acima de tudo, que tipo de
base de dados é (quer seja uma base de dados Access, Sybase, Oracle, ou
outras).
Atenção, esta string de ligação é específica para bases de dados
Access 2000. Este exemplo não usa ODBC.
Se a declaração
Conn.Open for executada sem erros, temos uma ligação válida para a nossa
base de dados em consideração. Só após este passo podemos começar a usar a
base de dados.
As linhas seguintes,
Dim RS
Set RS = Server.CreateObject ("ADODB.Recordset") |
têm a mesma finalidade que as linhas para criar o objecto
ADODB.Connection, a diferença é que aqui estamos a criar o objecto
ADODB.Recordset!
Agora,
Dim SqlString
SqlString = "Select * From Aluno"
Set RS = Conn.Execute(SqlString) |
estas são talvez as linhas mais importantes deste exemplo.
Dada uma declaração SQL, a última destas três linhas executa o pedido (query),
e atribui os registos retornados ao nosso objecto Recordset.
Agora, assumindo que todos os registos que queremos
estão no nosso objecto Recordset, vamos proceder à sua visualização.
|
If RS.EOF And RS.BOF Then
Response.Write "Existem 0 registos." |
Em qualquer situação em que é esperado que não
existam registos, esta é uma importante verificação de erro a ser testada.
Caso o teu pedido não retorne qualquer resultado, o Recordset.BOF
(inicio do ficheiro) e o Recordset.EOF (fim do ficheiro) têm ambos o
valor True (verdadeiro) ao mesmo tempo. Então podes facilmente
escrever uma declaração If para efectuar uma verificação muito básica
de um erro (se não o fizeres nesta altura vais encontrar erros em partes de
script mais à frente. É sempre mais sábio prevenir do que remediar os
erros!).
Vamos ver as próximas linhas do código como um bloco
completo, sem separar as linhas de código.
Else
RS.MoveFirst
While Not RS.EOF
Response.Write RS("PrimeiroNome")
Response.Write RS("UltimoNome")
Response.Write "<HR>"
RS.MoveNext
Wend
End If |
RS.MoveFirst é o método que move o ponteiro do registo (por
agora, considera que é uma estrutura imaginária que aponta sempre para o
registo actual no Recordset) para o primeiro registo. Por defeito, pode ou
não estar correctamente posicionado, por isso é imperativo posicioná-lo
antes fazeres alguma operação.
Depois temos o ciclo While que faz a iteração por todos os
registos contidos no Recordset. A condição que verificamos é que RS.EOF
deve ser ter o valor False. No momento em que toma o valor True,
significa que não existem mais registos a serem procurados.
O RS("PrimeiroNome") recupera o valor do campo "PrimeiroNome"
do registo actual. Usamos a declaração Response.Write para escrever o
primeiro nome do aluno na página. Escrevemos igualmente o RS("UltimoNome")
depois do primeiro nome. Depois escrevemos a etiqueta HTML <HR> que
coloca uma linha horizontal a separar os dados de cada aluno.
Quando acabas esta operação, deves mover o ponteiro para o próximo
registo, então executas um RS.MoveNext. E é tudo o que queres fazer
dentro do ciclo, por isso agora fechas o ciclo escrevendo Wend, e o
ciclo acaba, assim como este exemplo!
Avançando para Queries (pedidos) Complexos
O que fica mais complexo são
as queries, e não o método de aceder aos dados! Por isso quaisquer que sejam
os dados que queres, usas sempre exactamente a mesma sintaxe no teu código.
A única coisa que muda é a declaração SQL e, talvez, os campos que realmente
queres mostrar numa página.
<< Get vs. Post | Inserir Registos >>
|