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();