Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Laboratório de Programação I
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
2
Aplicação com Bancos de dados usando dbExpress Parte II
3
Componentes Data Control
Componentes Data Control são responsáveis por apresentar os dados do banco de dados ao usuário Vamos ver mais alguns componentes relacionados à manipulação do banco de dados
4
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)
5
DBLabel (ou DBText em versões mais novas)
Permite exibir um campo de um registro atualmente ativo. Seleciona-se o DataSource e o DataField (nessa ordem)
6
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. Em ambos seleciona-se o DataSource e o DataField (nessa ordem)
7
DBMemo Permite exibir ou editar blobs de um registro ativo.
Seleciona-se o DataSource e o DataField (nessa ordem)
8
Exercício Objetivos: Demonstrar como efetuar alterações em uma tabela usando um ClientDataSet (se for usado somente um sqlTable isso não é possivel) 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
9
Form que será construido terá mais ou menos essa aparência
10
Componentes usados Criar um Data Module e inserir os seguintes componentes SQLConnection DataSource ClientDataSet DataSetProvider 2 x SqlTable
11
Ajuste das propriedades
SQLConnection Conforme visto anteriormente SQLTable1 SQLConnection: SQLConnection1 TableName: usuarios SQLTable2 TableName: cidade DataSetProvider Dataset: SQLTable1 Datasource Dataset: ClientDataSet 1 ClientDataSet ProviderName: DataSetProvider1 Active: True
12
Field Editor Clicando duas vezes sobre o ClientDataSet 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
13
Eventos Cada um dos botões do form vai efetuar a ação do DBNavigator
No evento onClick de cada botão inserir o seguinte: Anterior DataModule1->ClientDataSet1->Prior(); Delete DataModule1->ClientDataSet1->Delete(); Update DataModule1->ClientDataSet1->Post(); Acrescer DataModule1->ClientDataSet1->Insert(); Seguinte DataModule1->ClientDataSet1->Next(); Não esqueça de fazer o Form usar o Data Module (Alt + f11)
14
Ajuste os eventos Ajuste os seguintes eventos do ClientDataSet acrescendo as seguintes linhas de código senão os dados não serão atualizados AfterPost disparado após operação de edit ou insert ClientDataSet1->ApplyUpdates(0); // Esse metodo envia comando para efetivar as alteracoes efetuadas na tabela no banco de dados AfterDelete disparado após uma deleção ClientDataSet1->ApplyUpdates(0);
15
Execute a aplicação Note que se você possui um cadastro de clientes bastante simples porém funcional
16
Usando comandos SQL Vamos criar um novo Form e usá-lo para acrescer dados na tabela cidade usando comando SQL Acrescer um TSQLQuery no Data Module e alterar a propriedade SQLConnection para SQLConnection1
17
Usando comandos SQL No evento onClick do botão acrescer o seguinte código DataModule1->SQLQuery1->Active = false; DataModule1->SQLQuery1->SQL->Clear(); DataModule1->SQLQuery1->SQL->Add("INSERT INTO cidade(id, nome) values (NULL, '"+ Edit1->Text +"') "); DataModule1->SQLQuery1->ExecSQL(); ShowMessage("Cidade cadastrada com sucesso!"); Não esqueça de fazer o Form usar o Data Module (Alt + f11) Execute a aplicação e veja que você consegue cadastrar uma cidade na base de dados usando SQL
18
Master / Detail Inicie uma nova aplicação
Vamos criar um relacionamento Master / Detail. Como exemplo utilizaremos as tabelas usuarios e ocorrencias, onde usuarios 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 id da tabela usuarios = id_usuario da tabela ocorrencias)
19
Acrescer tabela de ocorrências no mysql
Vamos usar a mesma base de dados cadastro criada anteriormente e criar uma tabela para armazenar as ocorrências associadas a um usuário. Um usuário pode conter N ocorrências # mysql –u root -p mysql> USE cadastro; CREATE TABLE `ocorrencias` ( `id` int(4) NOT NULL AUTO_INCREMENT, `ocorrencia` varchar(255) DEFAULT NULL, `id_usuario` int(4) DEFAULT NULL, PRIMARY KEY (`id`) );
20
Visão do formulário
21
Acrescer mais os seguinte componentes ao Data Module
SQLTable3 SQLConnection: SQLConnection1 TableName: ocorrencias DataSetProvider2 Dataset: SQLTable3 Datasource2 Dataset: ClientDataSet 2 ClientDataSet2 ProviderName: DataSetProvider2 Active: True
22
Relacionamentos Selecione a propriedade MasterSource da tabela detail SQLTable3, e escolha o nome do DataSource da tabela master, no caso DataSource1 (que foi vinculado a usuarios). Dê duplo-clique na propriedade MasterField (chave primária da tabela master) na tabela SQLTable3 para ver a janela de designer do relacionamento. Selecione id_usuario (da tabela ocorrencias) em Detail Fields e id (da tabela usuarios) em Master Fields.O relacionamento pode ser feito selecionando-se as chaves primária e estrangeira das duas tabelas e clicando no botão Add.
23
Relacionamentos Faça a mesma coisa com o ClientDataSet 2. Selecione a propriedade MasterSource desse componente e escolha o nome do DataSource da tabela master, no caso DataSource1 (que foi vinculado a usuarios). Dê duplo-clique na propriedade MasterField (chave primária da tabela master) para ver a janela de designer do relacionamento. Selecione id_usuario (da tabela ocorrencias) em Detail Fields e id (da tabela usuarios) em Master Fields.O relacionamento pode ser feito selecionando-se as chaves primária e estrangeira das duas tabelas e clicando no botão Add.
24
Removendo obrigatoriedade do campo do banco de dados
Como o campo “id” no banco de dados foi definido como auto_increment deve-se passar o seu valor com NULL. Entretanto se ele for deixado em branco no DBGrid dará um erro (da figura ao lado) Pare resolver isso vá no Data Module e clique duas vezes sobre a SQLTable3. Abrirá o editor de campos, clique com o botão direito e acresça todos os campos (Add all fields). Clique sobre o campo “id” e mude a propriedade Required para false
25
Removendo um campo do DBGrid
Pode-se remover um campo do DBGrid Clicar duas vezes no DBGrid e no editor de campo clicar com o botão direito e selecionar Acrescer todos os campos (Add All Fields). Clicar no campo que se quer remover e pressionar a tecla Delete
26
Acresca mais os seguintes componentes no Form
DBGrid DataSource: DataModule1.DataSource2 DBNavigator2 Execute a aplicação para ver os resultados
27
Localizar registros via SQL
Vamos utilizar um comando SQL para fazer uma query no banco procurando pelo nome de um usuário (campo nome do banco de dados) Crie o seguinte form com um Edit, um Button e um DBGrid No exemplo está se usando um DBGrid, mas pode-se usar outros componentes para mostrar o resultado
28
Localizar registros via SQL
Acresça os seguintes componentes no Data Module SQLQuery1 SQLConnection: SQLConnection1 DataSetProvider3 Dataset: SQLQuery1 Datasource3 Dataset: ClientDataSet 3 ClientDataSet3 ProviderName: DataSetProvider3
29
Localizar registros via SQL
No evento onClick do Button acresça o seguinte código: DataModule1->SQLQuery1->Active = false; DataModule1->SQLQuery1->SQL->Clear(); DataModule1->SQLQuery1->SQL->Add("SELECT * FROM usuarios WHERE nome like '%"+ Edit1->Text +"%' "); DataModule1->SQLQuery1->Open(); DataModule1->ClientDataSet3->Open(); if (DataModule1->ClientDataSet3->IsEmpty()) ShowMessage("Nada foi encontrado"); else{ DBGrid1->DataSource = DataModule1->DataSource3; }
30
Acessando um campo da consulta SQL
Pode-se atribuir o resultado da consulta SQL a um componente qualquer, como por exemplo, um label DataModule1->SQLQuery1->Active = false; DataModule1->SQLQuery1->SQL->Clear(); DataModule1->SQLQuery1->SQL->Add("SELECT * FROM usuarios WHERE nome like '%"+ Edit1->Text +"%' "); DataModule1->SQLQuery1->Open(); DataModule1->ClientDataSet3->Open(); if (DataModule1->ClientDataSet3->IsEmpty()) ShowMessage("Nada foi encontrado"); else{ Label2->Caption= DataModule1->SQLQuery1->FieldByName("nome")->AsString; Isso é o label com o valor de retorno do campo nome
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.