|
Trabalhando com DataSets
Um DataSet é um conjunto de dados
organizado em forma de tabela (em linhas e colunas). As colunas são os campos
e as linhas são os registros. Todo o acesso a bancos de dados no Delphi
é feito através de DataSets. Os componentes Table e Query são
os tipos principais de DataSets. Neste capítulo, veremos as propriedades,
eventos e métodos dos DataSets. Tudo que veremos aqui vale para os componentes Table
e Query.
Abrindo e fechando DataSets
Para alterar ou ler os dados em uma DataSet, você deve
primeiro abrir o DataSet.
- Para abrir um DataSet, realize uma das seguintes operações:
- Altere a propriedade Active do DataSet para True.
Isso pode ser feito em tempo de desenvolvimento no Object
Inspector, ou em tempo de execução. O seguinte comando abre o componente
chamado "Table1":
Table1.Active := True;
- Use o método Open no DataSet, como abaixo:
Query1.Open;
Quando um DataSet é aberto os dados conectados a ele são
lidos e exibidos automaticamente (se houver componentes onde os dados possam ser
exibidos, é claro). No exemplo do capítulo anterior, abrimos um componente Table
em um formulário para que os dados fossem exibidos imediatamente em um
componente DBGrid.
Você deve sempre fechar um DataSet depois de usá-lo,
para liberar recursos do sistema.
- Para fechar um DataSet, realize uma das seguintes operações:
- Altere a propriedade Active do DataSet para False.
- Use o método Close no DataSet, como em
Table1.Close
Estados de um DataSet
Um DataSet pode estar em vários estados diferentes. O
estado de um DataSet determina o que pode ser feito (ou está sendo feito) com o
DataSet. O valor da propriedade State de um DataSet determina o seu
estado atual. Veja a seguir uma descrição breve dos estados mais importantes
em que pode estar um DataSet.
Estado
(valor de State)
|
Significado
|
dsInactive
|
O Dataset está fechado. Seus dados não estão
disponíveis (não podem ser lidos nem alterados).
|
dsBrowse
|
O Dataset está aberto. Seus dados podem ser
visualizados, mas não podem ser alterados. Este é o estado padrão de
um DataSet.
|
dsEdit
|
O DataSet está aberto. O registro atual pode ser
modificado.
|
dsInsert
|
O DataSet está aberto. Um novo registro acaba de ser
inserido.
|
O estado dsBrowse é o estado padrão. Quando um
DataSet é aberto, ele é colocado automaticamente neste estado. Vários métodos
de um DataSet podem ser usados para alterar o seu estado. Na ilustração a
seguir, são mostrados os quatro estados mais importantes e os métodos que
podem ser usados para passar de um estado para outro.
Estados de um DataSet
Para usar um dos métodos da ilustração, simplesmente use o
nome do DataSet seguido pelo nome do método. O trecho de código abaixo, por
exemplo, altera cinco vezes o estado de um componente Table.
procedure TForm1.Button1Click(Sender:
TObject);
begin
Table1.Open; // O estado muda para dsBrowse ...
Table1.Edit; //... muda para dsEdit...
Table1.Insert; //... muda novamente para dsInsert
...
Table1.Close; //... e finalmente muda para dsInactive
end;
Navegando em um DataSet
Os DataSets teriam pouca utilidade se não
fosse possível percorrer e consultar (navegar) os seus registros. Há vários métodos
e propriedades úteis para a navegação de DataSets.
Para permitir a navegação de seus
registros, todo DataSet contém um cursor que indica o registro atual
(ou linha atual) do DataSet. É no registro atual que são feitas alterações,
ou onde são inseridos (ou removidos) registros. Todos os métodos de navegação
alteram a posição do cursor. Veja uma descrição breve desses métodos
na tabela a seguir:
Método
|
Descrição
|
First
|
Move o cursor para o primeiro
registro do DataSet.
|
Last
|
Move o cursor para o último
registro do DataSet.
|
Next
|
Move o cursor para o próximo
registro do DataSet (imediatamente depois do registro atual). Se
o cursor já estiver no último registro, nada acontece.
|
Prior
|
Move o cursor para o registro anterior
do DataSet (imediatamente antes do registro atual). Se o cursor já
estiver no primeiro registro, nada acontece.
|
MoveBy(num)
|
Move o cursor o número
de registros especificado em num. Um valor positivo move o
cursor para frente; um valor negativo move-o para trás. Por exemplo,
Table1.moveBy(-10) move o cursor 10 registros para trás na tabela Table1.
Se o número de registros
especificado for maior do que o número que se pode mover, o cursor é
movido para o primeiro ou o último registro, dependendo da direção do
movimento.
|
Além dos métodos descritos acima, há
duas propriedades que indicam se o cursor chegou ao final ou ao início de um
DataSet: BOF e EOF.
Propriedade
|
Descrição
|
BOF
|
BOF é alterado para True
quando o cursor está no primeiro registro do DataSet. BOF
é a abreviação de Begin of File – "Início do
Arquivo".
Quando o cursor estiver em
qualquer registro que não seja o primeiro do DataSet, o valor de BOF é
False.
|
EOF
|
EOF é alterado para True
quando o cursor está no último registro do DataSet. EOF
é a abreviação de End of File – "Final do
Arquivo".
Quando o cursor estiver em
qualquer registro que não seja o último do DataSet, o valor de EOF é False.
|
Modificando Datasets
Pode-se alterar um DataSet diretamente,
modificando valores campo a campo, ou adicionando e removendo registros
inteiros. Os seguintes métodos permitem fazer essas alterações:
Método
|
Descrição
|
Edit
|
Coloca o DataSet no estado dsEdit.
Isto permite a alteração dos valores do registro atual. Muitos
componentes chamam esse método implicitamente para permitir a alteração
direta dos valores de um DataSet. O componente DBGrid, por
exemplo, entra no estado dsEdit usando o método Edit,
quando se dá um duplo clique em um dos registros.
|
Append
|
Adiciona um registro vazio ao
final do DataSet. O estado do DataSet muda para dsInsert.
|
Insert
|
Adiciona um registro vazio na posição
atual do cursor. O estado do DataSet muda para dsInsert (como
para o método Append).
|
Post
|
Tenta enviar o novo registro ou o
registro alterado para o banco de dados. Se tudo correr bem, o DataSet
é colocado no estado dsBrowse. Caso contrário, o estado do
DataSet não é alterado. O comando Post é um tipo de confirmação
da última entrada.
Muitos componentes chamam Post
automaticamente (quando se passa de um registro para outro em um DBGrid,
por exemplo).
|
Cancel
|
Cancela a última operação (uma
alteração em um registro, por exemplo) e coloca o DataSet no estado dsBrowse.
|
Delete
|
Apaga o registro atual e coloca o DataSet no estado dsBrowse.
|
|
|