ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO DELPHI FORMULÁRIO COM ABAS E BUSCAS DE REGISTROS FORMULÁRIOS COM ABAS Trabalhar com abas (ou guias) é um recurso utilizado quando se tem diversas operações similares, em formulários similares e se deseja economizar em telas, diminuindo sensivelmente o número de formulários e, por conseqüência, de arquivos (units) gerados. Outro benefício é a redução de menus criados na aplicação. Por exemplo, você fará uma aplicação para consultar diversos tipos de registros de clientes, produtos, funcionários, entre outros. Como estamos falando em consultas, podemos criar uma única tela de consulta, com as categorias separadas por abas. Para criar esta tela, com um formulário vazio, clique na paleta win 32, e adicione um objeto PageControl. Inicialmente será desenhado apenas um grande retângulo sem as abas (podemos nomeá-lo como PCGCONSULTAS). Para adicionar as abas, deve-se clicar com o botão direito no PageControl desenhado e clicar na opção New Page. Após este comando, aparecerá uma aba (TabSheet1). 1
Adicionamos quantas abas quanto forem necessárias e alteramos o Caption de ambas, de acordo com o conteúdo de cada uma. OBS: Talvez você não encontre a opção Caption para fazer as alterações. Isto ocorre porque devemos clicar primeiro na aba (TabSheet) e depois no meio do objeto PageControl desenhado. 1 - Clique na aba para selecionar... 2 - Clique no centro do PageControl para alterar o Caption... Após desenhado e devidamente nomeado, basta construir o conteúdo de cada página. OBS: Quando você for desenhar o conteúdo, se o fizer fora do PageControl e arrastar para dentro do componente, este objeto aparecerá em todas as abas. Se o desenho do objeto for feito diretamente em cada aba, este será mostrado apenas na aba correspondente. BUSCAS DE REGISTROS Para a criação de formulários de buscas, é necessária a criação de um Banco de Dados, com as tabelas a serem utilizadas na consulta. Devemos também fazer a conexão via ODBC e configurar o DataModule com as Querys (consultas) e Data Sources necessários. Tomaremos mais uma vez como exemplo nosso projeto das bandas. 2
Adicionaremos ao nosso DataModule (DM_BANDAS) uma query e vamos configurá-la da seguinte forma: Name: QRY_BANDA DatabaseName: O ODBC da conexão, neste exemplo BANDAS SQL (string): select * from TB_BANDAS Active: True Agora adicionaremos um DataSource e faremos a seguinte configuração: Name: DS_QRYBANDA DataSet: QRY_BANDA Após estas configurações, basta definir o tipo de consulta a ser feita, como mostraremos na seqüência. CONSULTA DINÂMICA É uma consulta feita diretamente em uma Edit, portanto sua codificação deve ser feita no evento OnChange da Edit de consulta. Desenhe um formulário como mostrado a seguir: Nomeie as edits como EDTCOD e EDTNOME. Para o botão Consultar código, dê o nome BTNBCOD e o botão Nova Busca, nomeie como BTNNB, deixando sua propriedade Enabled como False. Faça com que este formulário reconheça o DataModule, clicando em File, Use Unit e conecte o DBGrid ao DM_BANDAS.DS_QRYBANDA (propriedade DataSource). OBS: Neste exemplo faremos dois tipos de consultas diferentes para o mesmo BD e mesma tabela. Como é interessante aproveitar o mesmo DBGrid, desenhamos o objeto fora do 3
PageControls e arrastamos para este último, assim, quando mudarmos de Aba, o mesmo objeto será exibido. Já as edits e botões, são exclusivas de cada aba, portanto desenhadas dentro do PageControls. Selecione a EDTNOME e programe o evento OnChange com o código a seguir: procedure TFRM_CONSULTAS.EDTNOMEChange(Sender: TObject); SQL.Add('where NOME Like ' + QuotedStr(EDTNOME.Text + '%') ); OBS: Como nosso código utiliza constantemente DM_BANDAS.QRY_BANDA, utilizamos o comando with XXXXXX do. Este comando nos poupa o trabalho de repetir nomes de objetos e/ou propriedades no código, além de deixar o código mais limpo. Sem este recurso, nosso código ficaria assim: procedure TFRM_CONSULTAS.EDTNOMEChange(Sender: TObject); DM_BANDAS.QRY_BANDA. DM_BANDAS.QRY_BANDA. DM_BANDAS.QRY_BANDA. DM_BANDAS.QRY_BANDA.SQL.Add('where NOME Like ' + QuotedStr(EDTNOME.Text + '%') ); DM_BANDAS.QRY_BANDA. O comando DM_BANDAS.QRY_BANDA.SQL.Add('where NOME Like ' + QuotedStr(EDTNOME.Text + '%') ); busca no campo NOME da tabela algo que tenha uma letra qualquer, considerando seu início, sem se importar com o fim. Por exemplo, supondo que seja digitado na EDTNOME a letra a. A busca será feita como a%, entendida pela linguagem como aqualquercoisa'. A cada nova letra digitada, a busca é refinada automaticamente. Codifique agora o botão Consultar código com: procedure TFRM_CONSULTAS.BTNBCODClick(Sender: TObject); 4
SQL.Add('where codigo = ' + QuotedStr(EDTCOD.Text) ); BTNBCOD.Enabled:=FALSE; BTNNB.Enabled:=TRUE; Repare que não usamos os comandos Like e %, pois estes só funcionam com dados do tipo string (texto). Para o botão Nova Busca o código será: 5
procedure TFRM_CONSULTAS.BTNNBClick(Sender: TObject); EDTCOD.Clear; EDTNOME.Clear; EDTBUSCA.Clear; BTNBCOD.Enabled:=TRUE; BTNCONSULTAR.Enabled:=TRUE; BTNNB.Enabled:=FALSE; BTNNBC.Enabled:=FALSE; Temos agora uma aplicação com busca dinâmica pelo nome ou diretamente pelo código. CONSULTA POR CAMPO Neste tipo de consulta, o usuário digita uma palavra ou trecho da palavra e seleciona qual é o campo de busca, diferente do anterior, que filtrava apenas o nome e código. Nomeie a edit como EDTBUSCA, a combobox como CBOCAMPO altere o text para Selecione e para Items coloque os valores abaixo: codigo nome vocalista site pais 6
Para o botão Consultar, dê o nome BTNCONSULTAR e o botão Nova Busca, nomeie como BTNNBC, deixando sua propriedade Enabled como False. Codifique o botão Consultar com: procedure TFRM_CONSULTAS.BTNCONSULTARClick(Sender: TObject); var escolha,busca:string; escolha:=cbocampo.text; //pegamos o campo da combobox busca:=edtbusca.text; //pegamos o texto da edit if escolha='codigo' then //se estiver escrito codigo executo o código a seguir SQL.Add(' where '+ escolha +' = ' + QuotedStr(busca) ); end else //senão executo este trecho SQL.Add(' where '+ escolha +' LIKE ' + QuotedStr(busca+'%') ); BTNCONSULTAR.Enabled:=FALSE; BTNNBC.Enabled:=TRUE; Repare que fizemos exatamente os mesmos códigos do exemplo de busca anterior, mas agora, com o auxílio da combobox podemos definir qual é o campo a ser pesquisado e ainda verificamos se é código (sem o like) ou qualquer outro campo com string (usando o like). Para finalizar, codifique o botão BTNNBC com: procedure TFRM_CONSULTAS.BTNNBClick(Sender: TObject); EDTCOD.Clear; EDTNOME.Clear; 7
EDTBUSCA.Clear; BTNBCOD.Enabled:=TRUE; BTNCONSULTAR.Enabled:=TRUE; BTNNB.Enabled:=FALSE; BTNNBC.Enabled:=FALSE; CONSIDERAÇÕES FINAIS Aproveite o que foi passado aqui e crie telas de cadastro também separadas por abas, ou ainda, separe por classes, como por exemplo, um formulário só de clientes, que terá Cadastro, Alteração e Consultas, uma só de produtos, e assim por diante. Pesquise novas formas de consulta e coloque melhore este projeto. 8