|
<< Objecto Connection | Objecto Field >>
|
referências >
ado > objecto recordset |
|
|
. : : . objecto recordset . : : .
|
Os objectos Recordset
oferecem mais funcionalidades do que simplesmente um método de guardar e
navegar pelos dados. O objecto Recordset é uma tabela de valores. Tem linhas
e colunas como uma tabela de uma base de dados, mas um objecto Recordset não
é uma tabela. É mais uma tabela virtual ou uma vista.
Primeiro, os valores
das colunas dos objectos Recordset podem vir de várias tabelas diferentes
através de uma operação JOIN.
Segundo, os valores das colunas podem ser valores calculados - podem não
coincidir com nenhum valor na base de dados.
Finalmente, podes procurar e ordenar os objectos Recordset, guardá-los em
strings ou arrays, e ainda preservá-los e recuperá-los de um disco de
armazenamento como objectos ou como dados XML.
Usar o Método Recordset.Open
Se precisas de um objecto
Recordset com qualquer tipo de cursor para além do cursor forward-only
ou do cursor read-only, tens de abrir o objecto directamente em vez
de chamar o método Execute do objecto Connection. Os objectos Recordset
também têm o método Open, que tem vários argumentos.
| Recordset.Open
ComandoTexto, Connection|ConnectionString, TipoCursor, TipoFechadura,
Opcoes |
O argumento
ComandoTexto contém a query de SQL. O argumento
Connection|ConnectionString contém a referência para um objecto
Connection aberto ou um argumento ConnectionString válido. Se
usares o argumento ConnectionString, o método Open cria-te um objecto
Connection.
Se vais apenas fazer
uma chamada à base de dados na página, então deixar o ADO criar um objecto
Connection é uma opção viável. Mas se fizeres mais do que uma chamada, deves
criar e abrir o teu próprio objecto Connection. Isto porque assim tens mais
controlo sobre o tipo e a duração do objecto Connection, se tu mesmo o
abrires e fechares.
O argumento
TipoCursor é um valor derivado de um ou mais valores de
adCursorTypeEnum. A seguinte lista mostra os valores válidos e a
descrição de cada um deles:
-
adOpenForwardOnly
Retorna um cursor forward-only (só para a frente). Esta é o cursor por
defeito. Se não especificares o tipo do cursor, o ADO retorna sempre um
cursor forward-only. Como o próprio nome indica, apenas podes mover para a
frente, e não para trás, pelo objecto Recordset. Usa este cursor sempre que
precisas apenas de passar uma vez pelo objecto Recordset, porque é o
tipo de cursor mais rápido.
-
adOpenKeySet
Retorna um cursor keyset (chave de valores). Com este cursor podes mover
em qualquer direcção, primeiro, último, seguinte, anterior, saltar registos,
ou mover para uma marca (se o fornecedor suportar marcas). Podes ver
alterações que outros fazem aos registos no objecto Recordset, mas não podes
registos adicionados, uma vez que abriste o objecto Recordset. Não podes
aceder ou alterar registos que outros utilizadores apagaram. Usa este cursor
para grandes conjuntos de registos nos quais tens de poder andar para trás
ou alterar. O servidor cria uma marca única para cada linha quando executas
primeiramente uma query. Essas marcas não se alteram durante o tempo de vida
do objecto Recordset, e é por isso que não podes ver registos novos.
-
adOpenDynamic
Retorna um cursor dinâmico. Este cursor é exactamente igual ao cursor
keyset, excepto que podes ver novos registos que outros adicionaram. Um
cursor dinâmico verifica constantemente actualizações e adições no conjunto
resultante. Não constrói um conjunto de marcas para o conjunto resultante,
por isso um cursor dinâmico abre frequentemente mais depressa que o cursor
ketset. Cursores dinâmicos são os que requerem mais recursos de todos os
tipos de cursores, por isso não o deves usar a não ser que precises de ver
adições no conjunto resultante enquanto o objecto Recordset está aberto.
-
adOpenStatic
Retorna um cursor estático, que é uma cópia fixa de um conjunto de
registos. Não podes ver quaisquer alterações ou adições por outros
utilizadores sem executares novamente a query. Os objectos Recordset com
cursores estáticos podem ser actualizados.
O argumento
TipoFechadura informa o ADO de como tratar as fechaduras da base de
dados. Em geral, evita-se fechar os dados para actualizações ou inserções,
porque fechaduras criadas por um utilizador pode causar problemas a outros
utilizadores na aplicação. Fechaduras Read-Only não causam esses
problemas. A seguinte lista mostra os valores válidos de cada uma delas:
-
adLockReadOnly
Não podes alterar dados.
-
adLockPessimistic
É o mais forte tipo de fechadura.
-
adLockBatchOptimistic
Fecha como a fechadura optimistic, excepto que funciona para updates
batch. Favorece as actualizações de muitos registos ao mesmo tempo em vez de
actualizar cada registo imediatamente. És tu quem decide se ao usar esta
fechadura melhora o funcionamento da aplicação, e em parte, depende do nível
de interactividade que a aplicação exige.
O último argumento são
as Opções. Toma exactamente os mesmos valores que as opções do
argumento Connection.Execute. O argumento Opções não é obrigatório, mas
convém utilizá-lo, pois informa o ADO se a query é uma tabela, vista,
procedimento ou uma declaração SQL dinâmica.
O Método Move
Depois de abrir um objecto
Recordset, podes usar os métodos Move Forward e (dependendo do
cursor) Backward através das linha de registos. O objecto Recordset
fornece a propriedade RecordCount, que retorna o número de registos
no objecto Recordset.
Pensa no objecto
Recordset como uma tabela com uma linha vazia no topo e no fundo, e um
ponteiro para um registo actual. O ponteiro aponta apenas para um registo de
cada vez. Quando usas um dos métodos Move, não andas pelo conjunto de
registos, mas sim moves o ponteiro do registo. Os objectos Recordset têm os
métodos EOF (end of file) e BOF (begining of file) para que
saibas quando o ponteiro do registo se moveu para o último registo ou para o
primeiro. EOF e BOF são propriedades Booleanas.
While Not R.EOF
'Faz Qualquer Coisa
R.MoveNext
Wend |
É importante verificar
sempre se um objecto Recordset está na posição BOF ou EOF antes do pedido de
informação, porque senão é gerado um erro quando o objecto Recordset está em
ambas as posições ao mesmo tempo (ou seja, quando temos um ficheiro vazio).
Métodos de Ordenação e de
Procura
Podes procurar e ordenar
dados com métodos Recordset, aliás é muito mais eficiente obter apenas os
dados que precisas do servidor e obtê-los já ordenados. Para ordenar um
conjunto de registos, define a propriedade Sort com o(s) nome(s) do(s)
campo(s) que queres ordenar. Por exemplo, para ordenar o Recordset:
pelo último nome,
escrevia-se:
Para ordenar por mais
de um campo, separa os nomes dos campos com uma vírgula (,) como se segue:
| R.Sort = "UltimoNome,
PrimeiroNome" |
Por defeito o sentido
da ordenação é ascendente, por isso não precisas escrever um sentido
específico (apesar de ser possível). Para ordenar num sentido específico,
adiciona-se ASC ou DESC no final da string de ordenação:
| R.Sort = "UltimoNome,
PrimeiroNome DESC" |
Podes também pesquisar
registos específicos num conjunto de registos. Para isso usa o método
Recordset.Find. As condições são especificadas tal como numa cláusula
Where em SQL, mas sem a palavra Where.
Depois de executada uma pesquisa, o objecto Recordset é posicionado no
primeiro registo encontrado, ou se não forem encontrados registos, no fim do
objecto Recordset (EOF).
Podes incluir múltiplas
condições, tal como numa cláusula Where. Em adição ao critério de pesquisa,
o método Find aceita três argumentos opcionais:
-
SaltaRegistos
número de registos a saltar antes de iniciar a pesquisa. Este argumento
é particularmente útil quando estás a pesquisar num ciclo ou loop. Dando o
valor 1 a este argumento, podes começar a pesquisar num registo seguinte ao
registo actual. Quando a pesquisa for efectuada para trás, atribui-lhe
valores negativos.
-
DirecçãoPesquisa
especifica a direcção da pesquisa, adSearchForward (para a
frente) ou adSearchBackward (para trás).
-
Inicio
o número da marca do registo por onde a pesquisa deve começar. Deves
especificar ou o SaltaRegistos ou o Inicio, mas nunca ambos.
| R.Find "TextoDePesquisa",
SaltaRegistos, DirecçãoPesquisa, Inicio |
<< Objecto Connection | Objecto Field >>
|