Laboratório de
Programação I
Carlos Oberdan Rolim
Ciência da Computação
Sistemas de Informação
Aplicação com
Bancos de dados
Parte III
Componentes Data Control
Componentes Data Control são responsáveis por apresentar
os dados do banco de dados ao usuário
Relembrando alguns componentes apresentados
anteriormente
DBGrid
Este componente permite mostrar/editar os registros de um
arquivo na forma de tabela.
A vantagem deste tipo de saída de dados é que é possivel
ver vários registros ao mesmo tempo.
Pode-se clicar duas vezes e invocar o Column Editor para
editar as colunas do grid
DBEdit
É de longe o componente mais usado para mostrar campos.
Oferece uma caixa de edição conectada a um campo no
arquivo. Para usá-lo, basta preencher as propriedades
DataSource e DataField (nessa ordem)
DBLabel
Permite exibir um campo de um registro atualmente ativo
DBComboBox e DBListBox
DBComboBox permite exibir ou editar valores de uma coluna
de uma tabela
DBListBox funciona da mesma maneira, só que tem um
“visual” diferente.
DBMemo
Permite exibir ou editar blobs de um registro ativo
DBNavigator
Permite navegar pelos registros de uma tabela
Pode-se mover o ponteiro de registro da tabela para frente
ou para trás
Iniciar o modo Insert ou Edit
Efetuar inserção de novos registros ou modificados (post)
DBNavigator e comandos equivalentes
Exercício
Objetivos:
Criar um form apresentando os campos da tabela agenda usando
componentes DBEdit
Demonstrar como ações que o DBNavigator executa podem ser
efetuadas através de botões
Form que será construido terá mais ou menos essa aparência
(depende dos campos da tabela)
Componentes usados
1 Data Source
1 Ttable
1 dbNavigator
5 Tbuttons
1 DBGrid
Os DBEdit e Label do form serão inseridor através do field
editor
Field Editor
Clicando duas vezes sobre o Ttable abre-se o form Editor
Usar o botão direito para inserir campos de forma individual,
inserir todos os campos ou então inserir campos novos que
não existem na tabela (New Field)
Campo lookup pode ser utilizado para obter um campo de outra tabela
Pode “arrastar” os campos para dentro do form
Eventos
Cada um dos botões vai efetuar a ação do DBNavigator
No evento onClick de cada botão inserir o seguinte:
Anterior
Table1->Prior();
Novo
Table1->Post();
Delete
Table1->Delete();
Add
Table1->Insert();
Seguinte
Table1->Next();
Update
Table1->Post();
Exercício
Vamos criar um relacionamento Master / Detail
Como exemplo utilizaremos as tabelas Funcionário e
Ocorrencias, onde Funcionário será a tabela Master e
Ocorrencias será a Detail
Em um relacionamento Master/Detail, para cada registro da
tabela Master, são relacionados apenas os registros da
tabela Detail que tiverem os mesmos valores de chaves
primária e estrangeira, respectivamente (no nosso exemplo
codigo da tabela funcionario = codigo_funcionario da tabela
ocorrencias)
Visão do formulário
Criação da entrada no BDE
Crie um alias no BDE chamado funcionarios apontando
para o diretorio c:\funcionarios
Criação das tabelas
Crie as seguintes tabelas
Funcionário:
Codigo – inteiro – chave primaria
Nome - alfa – tamanho 200
Endereco – alfa – tamanho 200
Defina um indice secundario chamado idxNome para o campo nome
Ocorrencias
Codigo – inteiro – chave primaria
Codigo_funcionario – inteiro
Ocorrencia – alfa – tamanho 200
Defina um indice secundario chamado idxCodigoFuncionario para o campo codigo_funcionario
Componentes
TTable:
Database: funcionarios
TableName: funcionario.db
Name: tblFuncionario
TTable:
Database: funcionarios
TableName: ocorrencias.db
Name: tblOcorrencias
Componentes
DataSource:
Name: dsFuncionario
DataSet: tblFuncionario
DataSource:
Name: dsOcorrencia
DataSet: tblOcorrencia
Componentes
DbGrid
Name: gdFuncionario
DataSource: dsFuncionario
DbGrid
Name: gdOcorrencia
DataSource: dsOcorrencia
DbNavigator
DataSource: dsFuncionario
DbNavigator
DataSource: dsOcorrencia
Relacionamentos
Selecione a propriedade
MasterSource da tabela detail
tblOrcorrencias, e escolha o
nome do DataSource da tabela
master, no caso
dsFuncionario.
Dê duplo-clique na propriedade
MasterField (chave primária da
tabela master) na tabela
tbOcorrencias para ver a
janela de designer do
relacionamento. Selecione
idxCodFuncionario em
Available Indexes e então
defina o relacionamento.O
relacionamento pode ser feito
selecionando-se as chaves
primária e estrangeira das duas
tabelas e clicando no botão Add.
Finalizando as propriedades
tblFuncionario
Active: true
tblOrcamento
Active: true
Execute a aplicação para ver os resultados
Localizar registros
Coloque um componente TButton e um Tedit
Assumindo que tbEmpregados é o nome da tabela que você quer
pesquisar e Nome é o campo faça o seguinte
Altere a propriedade IndexFieldName de tbEmpregados para Nome
No evento OnClick do botao colocar o seguinte codigo
tbEmpregados->SetKey();
tbEmpregados->FieldByName(“Nome")->AsString = editBusca->Text;
tbEmpregados->GotoKey();
Para procurar por semelhança usar o seguinte código
tbEmpregados->SetKey();
tbEmpregados->FieldByName(“Nome")->AsString = editBusca->Text;
tbEmpregados->GotoNearest();
Como usar um DBLookupComboBox ou
DBLookupListBox
Considere a situação: a tabela Ocorrencias possui o campo
codigo_funcionario que é chave estrangeira e relaciona-se
com a tabela Funcionario através da chave primária codigo.
Como o campo codigo_funcionario armazena apenas o valor
do código do funcionario fica difícil para o usuário saber qual
o nome do funcionario que está sendo utilizado.
A solução é utilizar um DBLookupComboBox ou
DBLookupListBox
Propriedades DBLookupComboBox
Altere as seguintes propriedadas
DataSource = DataSource da tabela onde há chave estrangeira no
relacionamento um-para-muitos. (No caso dsOcorrencias)
ƒDataField = nome do campo que é chave estrangeira num
relacionamento um-para-muitos. (no caso
Codigo_funcionario)
LookupSource = Data source que possui a chave primaria
(no caso dsFuncionario)
LookupField = ƒ
Nome do campo que é chave primaria na
tabela Master
(no caso Codigo)
LookupDisplay = Nome do campo que será exibido na lista
do componente DBLookup.
(no caso Nome)
Exercicio
Criar uma forma alternativa de cadastrar uma ocorrencia usando nova
janela, DBLookupComboBox e DBEdit
Componentes
Acresca um TButton no formulario e mude o Caption dele
para “Cadastrar nova ocorrencia”
Crie um novo Form (Form2)
Faca Form1 usar o Form2 e o Form2 usar o Form1 (ALT +
F11)
No Form2 acresca um DBLookupComboBox, DBEdit e um
TButton
Altere Caption do TButton para “Cadastrar”
Altere as propriedades do DBLookupComboBox conforme
slide anterior
Altere propriedades do DBEdit para o seguinte:
DataSource: Form1.dsOcorrencias
DataField: Ocorrencia
Eventos
Acresca o seguinte codigo no evento onClick do botao
“Cadastrar nova ocorrencia” no form1
Form1->tblOcorrencias->Insert();
Form2->ShowModal();
Acresca o seguinte codigo no evento onClick do botao
“Cadastrar” no form2
Form1->tblOcorrencias->Append();
Download

database_parte3