Pesquisa de Despesas
Este formulário fará a pesquisa das despesas do cliente. Na tabela de despesas é armazenado o código e não o nome do cliente. O delphi possui um recurso chamado Campo Virtual. Ele cria o campo apenas para ser visualizado. Se você abrir a tabela ele não será mostrado.
Criando o Campo Virtual (Calculado)
Pressione Shift + F12 e selecione a unit dmDespesa (módulo). Clique com botão direito no tbDespesa e selecione New Field. Ver figura abaixo:
Deixe como a figura abaixo:
Name: Nome do campo.
Componente: É onde o campo virtual ficará
armazenado (o delphi já coloca o nome acima como padrão).
Type: String - será armazenado texto.
Size: Tamanho.
Field Type: Lookup - fará a busca de
uma tabela com a outra.
Key Fields: Campo que foi relacionado da tabela
de despesa (chave-estrangeira).
Dataset: Qual a tabela onde o nome do cliente
é armazenado.
Lookup Keys: Qual o campo que tem a chave primária
na tabela de cliente e que foi utilizado para relacionar com a tabela de despesa.
Result Field: Qual campo será exibido,
neste caso Nome.
Crie um formulário novo e altere as propriedades:
Name: frmPDespesa
Caption: Pesquisa de Despesas
Position: poScreenCenter
Salve como: PDespesa
Na Guia Standard selecione o componente RadioGroup
e coloque
no formulário alterando as propriedades:
Name: rgDespesa
Caption: Opções de Pesquisa:
Items: Lançamento, Nome, Data (um abaixo
do outro).
Na Guia Additional selecione o componente BitBtn
e altere as propriedades:
Name: btnPesquisa
Caption: &Pesquisa
Glyph: Zoomin
Na Guia Additional selecione outro componente
BitBtn e altere as propriedades:
Name: btnSair
Caption: Sai&r
Glyph: Dooropen
Na Guia Data Control selecione o componente
DbGrid e altere as propriedades:
Name: grdDespesa
Vá até o Menu File / Use Unit e selecione Modulo para vincular as tabelas que estão no módulo no formulário atual.
Ainda no dbGrid selecione a propriedade DataSource e deixe como: dmDespesa.dsDespesa
Codificando os botões:
Sair: Close
Pesquisa:
//Se for selecionada primeira opção
if rgDespesa.ItemIndex = 0 then
begin
dmDespesa.tbDespesa.IndexFieldNames:=''; //Índice
pela chave primária
//Filter seleciona na tabela os registros de acordo
com o parâmetro especificado
dmDespesa.tbDespesa.Filter :='Lancamento=' + '''' + txtLancamento.Text + '''';
//Ativa (realiza) o filtro
dmDespesa.tbDespesa.Filtered := True;
end;
if rgDespesa.ItemIndex = 1 then
begin
dmDespesa.tbDespesa.IndexFieldNames:=('Data'); //Índice
pela chave secundária
with dmDespesa.tbDespesa do
begin
SetRangeStart; //Pega o intervalo inicial
FieldByName('Data').AsDateTime :=
strTodate(mskDataInicial.Text);
SetRangeEnd; //Pega o intervalo final
FieldByName('Data').AsDateTime :=
strTodate(mskDataFinal.Text);
ApplyRange; //Aplica o filtro
end;
end;
//Normalmente é necessário desativar
o filtro, coloque no evento
//close do formulário: dmDespesa.tbDespesa.Filtered
:= False;
Observação: A instrução with fará com que não haja a repetição do objeto, ou seja: Se você não utilizasse ficaria por exemplo: dmDespesa.tbDespesa.SetRangeStart. A instrução FieldByName (nome do campo) especifica qual é o campo da tabela.
Será necessário criar o índice secundário pelo campo Data. Clique aqui para saber como cria.
No evento onShow do formulário: dmDespesa.tbDespesa.Open;
No evento onClose do formulário: dmDespesa.tbDespesa.Close;