IX10-Programacao-Aula004
Transcrição
IX10-Programacao-Aula004
INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza Introdução à Programação em Delphi (versão 0.2) Usando Banco de Dados Texto adaptado da apostila Delphi 7 para Desenvolvimento de Sistemas, desenvolvida por Ronaldo Lavestein – Casa Branca - SP]. Para cada comando a ser executado nesta apostila será utilizada a barra de menu do Delphi, ou, quando existir, ou for mais conveniente, uma combinação de teclas, ou ainda, uma tecla de função. Por exemplo: para visualizar a tela Object Inspector, pode-se utilizar a barra de menus View -> Object Inspector ou simplesmente teclar [F11]. Em alguns casos, quando não for utilizada nem a barra de menus, ou uma tecla de função, ou combinação de teclas, o procedimento será solicitado através de uma linha de texto, como, por exemplo: 9 “Selecione a guia Additional na paleta de componentes do Delphi e insira um componente Image“ Antes de dar prosseguimento, verifique se você já instalou o SGBD PostgreSQL e o Driver ODBC para ele. INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza Roteiro 1. INTRODUÇÃO AO POSTGRESQL.................................................................................. 3 2. CRIANDO UM DATA SOURCE PARA O BANCO DE DADOS ............................................... 5 3. COMO PREPARAR O BANCO DE DADOS PARA SER USADO NO SISTEMA? .......................... 7 4. COMO CRIAR UMA TELA PADRÃO? ............................................................................. 11 5. COMO UTILIZAR UMA TELA PADRÃO DO SISTEMA? ...................................................... 13 6. COMO UTILIZAR UM DBGRID? .................................................................................. 14 7. COMO UTILIZAR UM DBNAVIGATOR? ......................................................................... 16 8. COMO CRIAR CAMPOS LOOKUP? ............................................................................... 18 9. COMO INSERIR CAMPOS DE UMA TABELA NA TELA? .................................................... 20 10. COMO CRIAR UMA TELA DE LOGIN DO SISTEMA? ....................................................... 21 11. COMO CRIAR RELACIONAMENTO MASTER/DETAIL NA APLICAÇÃO? ............................ 23 INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 1. Introdução ao PostgreSQL Este tópico apresenta algumas informações iniciais para o uso do PostgreSQL nas atividades da disciplina. Procedimentos a serem executados: Faça o download e instale a última versão do PostgreSQL (http://www.postgreSQL.org.br). Siga as instruções do instalador; Após a instalação do SGBD, aparecerá o Application Stack Builder. Na tela desse sistema, marque para fazer a instalação do driver ODBC. Siga as instruções do instalador; Figura 1 – Selecionando o driver ODBC no Application Stack Builder Nas aulas, será utilizada apenas a interface texto do terminal do PostgreSQL. Opcionalmente, os alunos poderão utilizar a interface gráfica PGAdmin III que acompanha o SGBD. INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza Procure saber que há uma diferença entre o terminal do Prompt de Comando e do terminal do PostgreSQL. A dica é observar a linha em que está o cursor do mouse para diferenciar. a ) b ) INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 2. Criando um Data Source para o Banco de Dados Este tópico deverá ser realizado uma única vez para preparar a conexão do Banco de Dados a ser utilizada no sistema a ser criado. Procedimentos a serem executados: 9 Vá em Painel de controle -> Ferramentas administrativas -> Fontes de Dados (ODBC) 9 Na tela que abrir, selecione a aba DSN de Sistema (System DSN) Figura 2 – Adicionando um DSN de Sistema 9 Selecione o botão Novo (Add...) 9 Escolha PostgreSQL ODBC Driver (UNICODE). Pressione Fim (Finish) INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza Figura 3 – Configurando um DSN de Sistema 9 Preencha os campos com os dados para conexão com o Banco de Dados: o Data Source – é um nome que vai identificar a conexão; o Database – é o nome do banco de dados; o Server – é o nome do servidor do banco de dados; o User Name - é o nome do usuário do banco de dados; o Port – é 5432 por padrão para o PostgreSQL; o Password – é a senha do usuário do banco de dados; 9 Pressione o botão Teste para verificar se há conexão com o banco de dados. Se não conectar, revise as informações acima 9 Pressione o botão Salvar 9 Pressione o botão OK INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 3. Como preparar o banco de dados para ser usado no sistema? Este tópico tem o propósito de ensinar como preparar o banco de dados e suas tabelas para serem utilizados pelo sistema. Para tanto, utilize o backup do banco para o sistema VideoLocadora, fornecido pelo professor. Procedimentos a serem executados: 9 File -> New -> DataModule (tipo especial de tela para agrupar os objetos de banco de dados). Salve a Unit da tela como U_DM.pas 9 Altere a propriedade Name para dm e salve a Unit 9 Selecione a guia ADO na paleta de componentes do Delphi e insira um componente ADOConnection (conexão com o banco de dados) 9 Insira um componente ADOTable (tabela) para cada tabela do banco de dados (para o nosso exemplo devem ser inseridos 17 ADOTable) 9 Selecione a guia DataAccess na paleta de componentes do Delphi e insira um componente DataSource (origem dos dados) para cada tabela do banco de dados (para o nosso exemplo devem ser inseridos 17 DataSource) Figura 4 - Componentes da tela DataModule (DM) do sistema 9 Altere as propriedades de cada componente conforme as tabelas a seguir: ADOConnection1 Conteúdo LoginPrompt False Name adoConexao Clique em ... e siga as instruções a seguir ConnectionString... Significado Desabilita tela de login (não pede usuário e senha) ao fazer conexão com o banco de dados. Nome do componente AdoConnection String para conexão ao banco de dados INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza Clique em Figura 5 – configurando o ADOConnection (01) Escolha Microsoft OLE DB Provider for ODBC Drivers e clique em Avançar>>. Figura 6 – configurando o ADOConnection (02) Figura 7 – configurando o ADOConnection (02) INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 9 Selecione o banco de dados (VideoLocadora) 9 Remova o Nome do usuário e desmarque Senha em branco 9 Clique no botão Testar Conexão para testar se a conexão foi bem sucedida 9 Clique Ok nesta e nas próximas, até retornar à Unit dm 9 Selecione o primeiro componente ADOTable ADOTable1 Conteúdo Connection adoConexao Name TableName adotPais Escolha paises Significado Conexão ao Banco de dados em que se encontra a tabela desejada Nome do componente ADOTable Nome da tabela no banco de dados 9 Dê duplo-clique no componente adotPais. Tecle [Ctrl] + [F] para inserir os campos da tabela. O resultado deverá ficar como o da figura a seguir: Figura 8 – configurando o ADOTable 9 Selecione cada campo e altere suas propriedades, quando necessário. Por exemplo, altere a propriedade DisplayLabel do campo id_pais para Código do País. Isto fará com que em todas as telas que usarem este campo apareça como Código do Cliente em seu rótulo e não mais id_pais. Outra propriedade é a EditMask, usada com campos do tipo Texto e Data/Hora, que define a máscara do campo (Ex.: cep = 99.999999). Para campos do tipo Moeda, altere a propriedade Currency para True, para que lhe seja aplicado o formato monetário. Quando precisar acessar informações de um campo em uma tabela, use a sintaxe: DataModule.TabelaCampo.Propriedade. Assim, para atribuir o conteúdo do campo pais à variável nomeDoPais, use nomeDoPais := dm.tbPaispais.Value; (não precisa fazer isso agora); INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 9 Selecione o componente DataSource1 e escolha adotPais na propriedade DataSet. Altere a propriedade AutoEdit (edição automática nos dados) para False. Altere a propriedade Name para dsPais. O resultado final deverá ser como o mostrado na tela a seguir: Figura 9 – configurando o DataSource 9 Faça o mesmo para as demais tabelas. INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 4. Como criar uma tela padrão? O uso de uma tela padrão além de deixar as telas do sistema com um layout padronizado, agiliza o processo de criação das mesmas, pois, todos os objetos, propriedades e eventos, comuns a todas as telas, não são criados novamente, e sim, herdados da tela padrão, através do conceito de herança de formulários. Procedimentos a serem executados: 9 Crie um novo form (File -> New -> Form), altere sua propriedade Name para frmCadastroPadrao. Altere as demais propriedades, conforme tabela vista na seção “Como alterar as propriedades da tela” da apostila. Salve a Unit como U_CadastroPadrao 9 Observe o layout da tela na figura a seguir e acrescente os objetos, na ordem em que são citados na lista de objetos abaixo: 1º 2º Close; 3º 4º Figura 10 – Layout da tela padrão Lista de objetos: (Deixe os tamanhos dos GroupBox proporcionais aos da figura) 9 Acrescente 04 GroupBox (guia Standard) com Align = alTop e a propriedade Caption fica em branco 9 1º GroupBox com 01 Label, 01 Edit (Name=edPesquisar), 03 SpeedButton (aba Additional) 9 2º GroupBox com 01 DBGrid (Data Controls) com Align = alClient e a propriedade Name = dbgTabela 9 3º GroupBox com 03 DBNavigator (Data Controls) com Align = alLeft, um ao lado do outro. Use a propriedade +VisibleButtons para exibir/ocultar os botões do DBNavigator, pois o primeiro DBNavigator (Name = INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza dbnNavegador) deverá conter apenas os botões nbFirst, nbPrior, nbNext, nbLast; o segundo (Name = dbnOperacao) deverá conter apenas os botões nbInsert, nbDelete e nbEdit; e o terceiro (Name = dbnConfirmacao) deverá conter apenas os botões nbPost e nbCancel 9 4º GroupBox vazio 9 01 StatusBar (Win32) com 03 paineis com propriedade Name = sbStatus e Width = 150 9 Pronto…. Esse formulário padrão sera usado nas principais telas de cadastro do sistema; INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 5. Como utilizar uma tela padrão do sistema? Utilize este procedimento sempre que for criar uma tela baseada na tela padrão do sistema. Em nosso exemplo será utilizada uma tela padrão para criação das telas do menu de Cadastros. Procedimentos a serem executados: 9 File -> New -> Other 9 Selecione a guia que tenha o nome do sistema atual (VideoLocadora) 9 Selecione o nome da tela padrão (frmCadastroPadrao, em nosso exemplo) 9 Altere a propriedade Caption para Cadastro de Paises 9 Altere a propriedade Name para FrmCadastroPais 9 Salve a tela como U_CadastroPais 9 Ajuste as propriedades e eventos dos objetos que compõe a tela OBS: Os componentes DBGrid e DBNavigator serão explanados no próximo tópico. Figura 11 – Usando a tela padrão 9 No evento OnShow da tela digite: dm.tbPais.Open; // abre a tabela de paises 9 No evento OnClose da tela digite: dm.tbPais.Close; // fecha a tabela de clientes INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 6. Como utilizar um DBGrid? Utilize este procedimento para apresentar os dados de um banco de dados em formato de grade, em linhas e colunas. Procedimentos a serem executados: 9 Abra a tela de Cadastro de Paises 9 No menu, vá em File->Use Unit e escolha a tela em que se encontram as tabelas (dm) 9 Selecione o componente DBGrid e altere a propriedade DataSource (origem dos dados) de acordo com a tabela a ser apresentada na grade. Escolha para este exemplo dsPais 9 Dê um duplo-clique sobre o DBGrid e clique no botão Add all Fields 9 Se for o caso, selecione os campos que não farão parte da grade e clique no botão Delete Selected para removê-los. Caso a grade faça parte de uma tela padrão, só será possível remover o campo através da janela Object Treeview. Para deixar o DBGrid zebrado: 9 No evento OnDrawColumnCell do DBGrid digite os seguintes comandos: if Odd(dm.tab_Clientes.RecNo) and (dm.tab_Clientes.State <> dsInsert) then begin //Lembre-se de colocar a Unit DB na cláusula uses na Unit da tela. // muda a cor do pincel DBGrid1.Canvas.Brush.Color := clMoneyGreen; // Preenche o fundo com a cor especificada DBGrid1.Canvas.FillRect(Rect); // desenha as células da grade DBGrid1.DefaultDrawDataCell(Rect,Column.Field,State); end; INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza Para ordenar os dados da grade ao clicar no título do campo: 9 A ordenação será feita através da propriedade de tabela IndexFieldNames, que define o nome do índice para a classificação, conforme o campo clicado na grade (Column.FieldName) 9 Crie na tela padrão uma variável global chamada ascendente do tipo Boolean para que todas as telas de cadastro passem a utilizá-la 9 No evento OnShow, da tela padrão, digite: Ascendente := False; 9 Em frmCadastroPais, no evento OnTitleClick do DBGrid digite: ascendente:= not ascendente; if (ascendente) then begin dm.tbPais.IndexFieldNames := Column.FieldName + ' end else begin dm.tbPais.IndexFieldNames := Column.FieldName + ' end; ASC' DESC'; OBS: Não digite os comandos na Unit da tela padrão, somente na de cadastro. INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 7. Como utilizar um DBNavigator? Utilize este procedimento para navegar entre os registros da tabela. Procedimentos a serem executados: 9 Selecione os componentes DBNavigator e altere a propriedade DataSource (origem dos dados) de acordo com a tabela a ser utilizada na tela. No exemplo anterior foi usado o datasource dsPais 9 Para exibir / ocultar qualquer botão utilize a propriedade VisibleButtons: Figura 12 – Configurando os botões do DBNavigator 9 VisibleButtons = True exibe o botão. VisibleButton = False oculta. Significado dos botões do DBNavigator e seus comandos equivalentes: 9 Utilize os comandos indicados abaixo, caso queira utilizar botões comuns ao invés do DBNavigator: o = equivale ao comando <Tabela>.First, ou seja, vai para o primeiro registro o = equivale ao comando <Tabela>.Prior, ou seja, vai para o registro anterior o = equivale ao comando <Tabela>.Next, ou seja, vai para o próximo registro o = equivale ao comando <Tabela>.Last, ou seja, vai para o último registro INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza o = equivale ao comando <Tabela>.Insert, ou seja, insere um registro em branco o = equivale ao comando <Tabela>.Delete, ou seja, apaga um registro o = equivale ao comando <Tabela>.Edit, ou seja, edita um registro para alteração o = equivale ao comando <Tabela>.Post, ou seja, grava dados no registro o = equivale ao comando <Tabela>.Cancel, ou seja, cancela alteração no registro o = equivale ao comando <Tabela>.Refresh, ou seja, atualiza dados nos controles <Tabela> deve ser o nome da tabela para a qual se deseja manipular os registros. OBS: Repita a execução dos tópicos das páginas 11 – 15 para criar as demais telas do menu Cadastros (Tipos, Produtoras, ...) e do menu Movimentos (Locação), fazendo as devidas adaptações, de acordo com a tabela utilizada, pois nos exemplos está sendo utilizada apena a tabela de Países. A tela Cópias deverá ser chamada por um botão na tela de Locação. INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 8. Como criar campos Lookup? Este tópico vai ensinar os procedimentos para criar campos lookup, que exibem valores de campos de registros de tabelas primárias de um relacionamento. Aplique este tópico toda vez que desejar associar o campo que é chaveestrangeira à tabela relacionada. Como exemplo, na figura 13, o campo id_uf da tabela Cidades é um bom exemplo para receber um campo LookUp, assim como o campo id_pais, na tabela Estados. Figura 13 – Exemplo de aplicação do campo LookUp na tabela Cidades Procedimentos a serem executados: 9 Visualize a tela de DataModule (dm) do Sistema, ou qualquer tela que possua um objeto ADOTable. Para isto tecle [Shift] + [F12] 9 Dê duplo-clique sobre o objeto ADOTable desejado. Para nosso exemplo, escolha adotEstados 9 Tecle [Ctrl] + [N] para inserir um novo campo o Em Fields Properties digite o nome do campo na caixa de texto Name, escolha o tipo do mesmo em Type e digite o tamanho em Size o Em Field Type marque o tipo do campo como Lookup o Em Lookup Definition escolha em Key Fields a chave estrangeira. Em Dataset escolha o nome da tabela primária. Escolha o nome da chave primária da tabela escolhida anteriormente em Lookup INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza Keys. E, finalmente, escolha o campo que aparecerá como resultado em Result Field. o Para que seja exibido o nome do País na tabela de Estados deixe sua tela conforme o modelo a seguir: Figura 14 – Configurando um campo LookUp 9 Clique sobre o botão [OK] 9 Acrescente o campo criado ao DBGrid da tela de Cadastro de Estados, ou, arraste-o junto aos demais campos na tela, como já foi feito com os outros campos da mesma 9 Crie campos Lookup nas demais tabelas em que for necessário e adicione-os aos respectivos DBGrids e telas INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 9. Como inserir campos de uma tabela na tela? Execute este tópico sempre que for apresentar campos da tabela na tela, utilizando controles Data Controls (DBEdit, DBComboBox etc). Procedimentos a serem executados: (Utilize apenas um dos procedimentos) a) Automático: 9 Selecione o DataModule em que estão os componentes de banco de dados. Logo em seguida dê um duplo-clique sobre o objeto AdoTable correspondente à tabela que deseja pegar os campos. Selecione todos os campos que deseja incluir na tela e arraste-os para dentro da tela em que eles ficarão; 9 Como exemplo, selecione a tela DataModule dm e o objeto AdoTable adotFilmes, selecione os seus campos e arraste-os para a tela frmCadastroFilmes. Neste caso são utilizados controles DBEdit; b) Manual: 9 Selecione o objeto Data Control desejado, um DBEdit, por exemplo, e altere as propriedades DataSource (origem dos dados) e DataField (campo) de acordo com a informação a ser exibida ou editada da tabela; Figura 15 – Exemplo de Tela para Cadastro de Filmes INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 10. Como criar uma tela de login do sistema? Este tópico tem o propósito de ensinar como criar uma tela de login para o seu sistema. Figura 16 – Layout da tela de Login Procedimentos a serem executados: 9 File -> New -> Form (cria uma nova tela); 9 File -> Save All (Salve a Unit como U_Login na pasta Programas); 9 Altere as propriedades da tela frmLogin, conforme tabela a seguir: Name Height Width frmLogin 225 400 BorderStyle Position Caption bsDialog poScreenCenter Login 9 Acrescente um objeto Image e altere suas propriedades: Height Width Stretch 84 113 True Left Top Picture... 4 4 HandShak.bmp 9 Acrescente um objeto GroupBox e altere suas propriedades: Caption Left Height Logando no Sistema Name 4 Top 88 Width GrpBxLogin 96 382 9 Acrescente três Labels (01 à tela e 02 ao GrpBxLogin) e mude as propriedades: Label1 Caption Alignment AutoSize WordWrap Font... Left, Top, Width, Height SISTEMA COMERCIAL Versão 1.0 taCenter False True Comic Sans Ms, 14, Bordô 140, 4, 208, 50 Label2 Usuário taLeftJustify True False 18, 20,-,- Label 3 Senha taLeftJustify True False 18, 54,-,- INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 9 Acrescente ao GroupBox dois objetos Edit e altere suas propriedades: Text Name PassWordChar CharCase Left, Top, Heigth, Width Edit1 (em branco) edApelido #0 ecUpperCase 64, 19, 21, 177 Edit2 (em branco) edSenha * ecLowerCase 64, 53, 21, 177 9 Acrescente ao GroupBox dois objetos BitBtn (Additional) e altere suas propriedades: Kind Caption Name Left, Top, Heigth, Width BitBtn1 bkOk &OK BtnOk 272, 18, 25, 89 BitBtn2 bkCancel &Cancelar BtnCancelar 272, 49, 25, 89 9 No evento OnClick do botão BtnCancelar, digite Application.Terminate; 9 No evento OnClick do botão BtnOk, digite: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dm.tbUsuarios.Open; // abre a tabela tab_Usuarios frmPrincipal.StatusBar1.Panels[2].Text := ' Usuário:' + frmLogin.edApelido.Text + ' - '+ dm.tbUsuariosUsuDepto.AsSTring; if not (dm.tbUsuarios.Locate('UsuApelido', frmLogin.edApelido.Text, [loPartialKey ])) or (dm.tbUsuariosUsuSenha.Value <> frmLogin.edSenha.Text) then begin MessageDlg('Nome ou senha do usuário inválidos.'+#13+#13 + 'Se você esqueceu sua senha, consulte '+ #13 + 'o administrador do sistema', mtError, [mbOK], 0); edSenha.Clear; // limpa o objeto edSenha edSenha.SetFocus; //Ajusta o foco para o objeto edSenha end else begin frmLogin.Hide; //Esconde a tela frmPrincipal.ShowModal; //chama a tela frmPrincipal no modo modal frmLogin.Release; // Remove a tela da memória frmLogin := Nil; // Atribui conteúdo nulo para a variável // de tela frmLogin end; OBS.: Se, ao tentar compilar o programa, for exibido um erro dizendo que loPartialKey não foi declarado, tecle [F1] e peça ajuda sobre loPartialKey. Quando o Delphi exibir a ajuda, anote o nome da Unit à qual pertence este parâmetro e inclua o nome da mesma (no caso, DB) na cláusula Uses do formulário em questão. INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 11. Como criar relacionamento Master/Detail na aplicação? Este tópico vai ensinar os procedimentos para criar um relacionamento Master/Detail na aplicação. Esse tipo de relacionamento se aplica sempre que temos um relacionamento 1:n. Como exemplo utilizaremos as tabelas adotPessoas e adotLocacoes, sendo que, adotPessoas será Master, e adotLocacoes será Detail. Figura 17 – Exemplo de relacionamento Master/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 (adotPessoas.codigo = adotLocacoes.codigo). Procedimentos a serem executados: 9 Selecione a tela dm ([Shift] + [F12]); 9 Selecione a propriedade MasterSource da tabela detail adotLocacoes, e escolha o nome do DataSource da tabela master, dsPessoas; 9 Selecione a propriedade MasterFields (chave primária da tabela master) na tabela adotLocacoes e digite codigo, que é o campo que fará a ligação entre as tabelas (chave-strangeira); INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza 9 Opcional - configuração da tela locações: o Crie o formulário Locações, a partir de um formulário padrão; o No grid inclua apenas as principais informações sobre as locações. Altere a propriedade Options -> dgRowSelect para True; o Inclua uma área com os campos para digitar os dados das locações; o Altere os campos que são chave-estrangeira (codigo e codigo_barra) por campos DBLookUpComboBox. Configure as propriedades DataSource e DataField com os dados da tabela que vai ser salva (Locacao) e as propriedades ListSource, ListField e KeyField com os dados da tabela LookUp (Pessoas e Copias, respectivamente). OBS.: No campo ListField podem ser acrescentados mais de um campo do BD, separados por ponto-e-virgula; o Marque a propriedade ReadOnly do grid como True; o Adicione no primeiro GroupBox um DBLookUpComboBox para pesquisar o nome do cliente. Configure as propriedades DataSource e DataField com os dados da tabela que vai ser salva (Locacao) e as propriedades ListSource, ListField e KeyField com os dados da tabela LookUp (Pessoas); o Para que o nome do cliente apareça no ComboBox de pesquisa na primeira vez que acessar a tela, inclua no evento OnShow o código: dblcbLocacao.KeyValue := dm.adotPessoas.Fields[0].value; o Nos eventos OnShow e OnClose do form insira o código para abrir e fechar as tabelas Locacao, Pessoas e Copias; 9 Execute a aplicação e chame a tela de Locações. A partir de agora, quando um cliente for escolhido, só serão exibidos os registros das locações correspondentes ao cadastro do cliente selecionado; 9 Dê duplo-clique na propriedade MasterField para ver a janela de designer do relacionamento. O relacionamento também poderia ter sido feito selecionando-se as chaves primária e estrangeira e clicando no botão Add. Faça isto apenas se você não se lembrar do nome da chave primária; INSTITUTO FEDERAL CATARINENSE CURSO TÉCNICO EM INFORMÁTICA Disciplina: Programação Prof. Angelo Augusto Frozza Figura 18 – Janela Designer do relacionamento