 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Dom Dez 18, 2016 10:17 pm Assunto: Pesquisas Personalizadas com IBQuery [Resolvido!] |
|
|
Boa Noite!
Estou desenvolvendo um programa de cadastro de alunos onde uso IBTable e Data Source no FireBird para cadastro dos dados e IBQuery e Data Source para a consulta dos dados cadastrados.
Para minha consulta, tenho três opções de pesquisa: Código, Nome e Matrícula.
Quando efetuo o cadastro, tudo perfeito, consigo visualizar normalmente, etc.
Mas quando vou iniciar uma nova consulta, só consigo efetuá-la em uma das três opções sendo que a outra não aparece nenhum resultado a não ser o que já foi exibido na pesquisa anterior, ou seja dados que estejam vinculados.
Por exemplo: Efetuei uma pesquisa por código e ela me retornou os dados do cadastro de número 10.
Agora preciso fazer uma nova pesquisa na qual eu não sei o número do código, então irei fazer a pesquisa por matrícula ou nome, só que o resultado que aparece é somente as que eu obtive até o resultado por código, mesmo quando o cadastro existe no banco de dados.
Então, o que estou tentando fazer mas sem sucesso é o seguinte. Se ao fazer uma pesquisa e ela não me retornar o resultado, ou efetuar uma nova sendo que utilizarei outra opção, como posso fazer com que consiga fazê-la, utilizando uma das duas outras opções sem ter que fechar o programa e ele me retornar os resultados? Foi a única maneira que consegui limpar a pesquisa anterior para depois efetuar uma nova.
Para ficar mais fácil, o entendimento, meu código é este:
Opção 1 - Consulta por Nome:
Código: | procedure TFrmNome_Aluno.FormCreate(Sender: TObject);
begin
dm_dados.sqlconsaluno.Open;
end;
procedure TFrmNome_Aluno.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
dm_dados.sqlconsaluno.Close;
end;
procedure TFrmNome_Aluno.Button1Click(Sender: TObject);
begin
dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.ParamByName('nome_aluno').AsString:=Edit1.Text+'%';
dm_dados.SqlConsAluno.Open;
end;
end.
Opção 2 - Consulta por Matrícula:
procedure TFrmMatricula_Aluno.FormCreate(Sender: TObject);
begin
dm_dados.sqlconsaluno.Open;
end;
procedure TFrmMatricula_Aluno.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
dm_dados.sqlconsaluno.Close;
end;
procedure TFrmMatricula_Aluno.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
begin
dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.ParamByName('matricula_aluno').AsInteger:=strtoint(Edit1.Text);
dm_dados.SqlConsaluno.Open;
end;
end.
Opção 3 - Consulta por Código:
procedure TFrmCodigo_Aluno.FormCreate(Sender: TObject);
begin
dm_dados.sqlconsaluno.Open;
end;
procedure TFrmCodigo_Aluno.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
dm_dados.sqlconsaluno.Close;
end;
procedure TFrmCodigo_Aluno.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TFrmCodigo_Aluno.Button1Click(Sender: TObject);
begin
dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.ParamByName('codigo_aluno').AsInteger:=strtoint(Edit1.Text);
dm_dados.SqlConsaluno.Open;
end;
end. |
Agradeço a atenção!
Editado pela última vez por fmoura em Ter Jan 10, 2017 10:02 pm, num total de 2 vezes |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Dez 19, 2016 8:33 am Assunto: |
|
|
Bom dia,
Pelo que entendi você está utilizando a mesma IBQuery para fazer as 3 consultas.
Como e onde você preenche a instrução SQL nesse componente?
Qual(is) instrução(ões) você está utlizando?
Editado pela última vez por imex em Ter Out 03, 2023 2:37 pm, num total de 1 vez |
|
Voltar ao Topo |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Seg Dez 19, 2016 2:04 pm Assunto: Boa Tarde! |
|
|
Boa Tarde imex!
Uso um DataModule com os componentes IBDataBase para o cadastro dos dados, um IBTransAction para a ligação da base de dados, IBTable para as tabelas e DataSource para ligação das tabelas.
Para a consulta, neste mesmo DataModule, uso um IBQuery e um DataSource para fazer a ligação.
No Object Inspector, Strings, utilizo os seguintes parâmetros: select * from TBL_ALUNO
where ALUNO_NOME like :nome_ALUNO and ALUNO_MATRICULA>= :matricula_aluno
Na opção Params, passo os seguintes dados: DataType: ftString
Name: nome_aluno
Numeric Scale: 0
ParamType: ptUnknown
Precision: 0
Size: 0
Value: %
Na opção Params, passo os seguintes dados: DataType: ftInteger
Name: matricula_aluno
Numeric Scale: 0
ParamType: ptUnknown
Precision: 0
Size: 0
Value: 1
Só utilizei estes dois exemplos porque para efetuar os testes foram suficientes. Mas vou ter que inserir no total 12 tipos de consultas diferentes contando com estas duas.
Agradeço a atenção! |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Dez 19, 2016 3:04 pm Assunto: |
|
|
A query que você postou tem mais de 1 parâmetro e os códigos que você está utilizando para executar a query estão preenchendo apenas 1 dos parâmetros, então o(s) outro(s) parâmetro(s) ficam com valores incertos e/ou da consulta anterior, por isso acredito que o resultado não é o esperado.
Acho que nesse tipo de situação seria melhor você utilizar código para preencher a query na IBQuery, sendo que nesse caso a query teria apenas o(s) parâmetro(s) necessário(s) para aquele momento. Ex:
Código: | dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.SQL.Clear;
dm_dados.Sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
dm_dados.Sqlconsaluno.SQL.Add('where ALUNO_NOME like :nome_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('nome_aluno').AsString := Edit1.Text + '%';
dm_dados.SqlConsAluno.Open; |
Acho que também é mais comum utilizar apenas um Form para a consulta com um componente (ex: RadioGroup, ComboBox, etc) onde o usuário seleciona qual campo será utilizado no filtro, e o código adiciona o filtro na query de acordo com o que foi selecionado.
Espero que ajude |
|
Voltar ao Topo |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Seg Dez 19, 2016 3:37 pm Assunto: Boa Tarde! |
|
|
imex escreveu: | A query que você postou tem mais de 1 parâmetro e os códigos que você está utilizando para executar a query estão preenchendo apenas 1 dos parâmetros, então o(s) outro(s) parâmetro(s) ficam com valores incertos e/ou da consulta anterior, por isso acredito que o resultado não é o esperado.
Acho que nesse tipo de situação seria melhor você utilizar código para preencher a query na IBQuery, sendo que nesse caso a query teria apenas o(s) parâmetro(s) necessário(s) para aquele momento. Ex:
Código: | dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.SQL.Clear;
dm_dados.Sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
dm_dados.Sqlconsaluno.SQL.Add('where ALUNO_NOME like :nome_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('nome_aluno').AsString := Edit1.Text + '%';
dm_dados.SqlConsAluno.Open; |
Acho que também é mais comum utilizar apenas um Form para a consulta com um componente (ex: RadioGroup, ComboBox, etc) onde o usuário seleciona qual campo será utilizado no filtro, e o código adiciona o filtro na query de acordo com o que foi selecionado.
Espero que ajude |
Boa Tarde mais uma vez imex!
Sua sugestão de código funcionou perfeitamente. Agora consigo fazer as pesquisas de forma independente.
Obrigado.
Quanto sua sugestão de usar um ComboBox ou um RadioGroup, é exatamente isso o que estive tentando fazer, mas sem sucesso.
Criei um form onde coloco as opções e conforme eu seleciono, digito a informação dentro de um edit e ao clicar no botão pesquisar, ele abre a tela com os resultados, mas não obtive êxito nesta tarefa, por este motivo é que acabei criando tela individuais para cada pesquisa.
Poderia me dar algum exemplo de como fazer isso?
Outra coisa, na minha tela de cadastro, no campo Data de Nascimento, ao inserir a data, ele me retorna o resultado em um label com a idade, mas não grava nada no banco de dados. Existe a possibilidade de que na tela de consulta ao fazer as pesquisas ele copie este resultado e apareça a idade nela também ou terei que registrar a idade no banco de dados?
Agradeço mais uma vez sua atenção! |
|
Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Dez 19, 2016 4:20 pm Assunto: |
|
|
Os filtros utilizando uma única tela ficaria assim:
Código: | procedure TForm1.Button1Click(Sender: TObject);
var
whereand: String;
begin
dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.SQL.Clear;
dm_dados.Sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
whereand := 'WHERE ';
if (Trim(edtNome.Text <> EmptyStr)) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_NOME like :NOME_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('NOME_aluno').AsString := QuotedStr(edtNome.Text + '%');
whereand := 'AND ';
end;
if (Trim(edtMatricula.Text <> EmptyStr)) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_MATRICULA like :MATRICULA_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('MATRICULA_ALUNO').AsString := QuotedStr(edtMatricula.Text + '%');
whereand := 'AND ';
end;
if (Trim(edtCodigo.Text <> EmptyStr)) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_CODIGO like :CODIGO_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('CODIGO_ALUNO').AsInteger := StrToInt(edtCodigo.Text);
end;
dm_dados.SqlConsAluno.Open;
end; |
quanto a parte da idade, basta você utilizar a mesma função de cálculo de idade que usou no cadastro |
|
Voltar ao Topo |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Seg Dez 19, 2016 7:02 pm Assunto: |
|
|
leo_cj escreveu: | Os filtros utilizando uma única tela ficaria assim:
Código: | procedure TForm1.Button1Click(Sender: TObject);
var
whereand: String;
begin
dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.SQL.Clear;
dm_dados.Sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
whereand := 'WHERE ';
if (Trim(edtNome.Text <> EmptyStr)) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_NOME like :NOME_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('NOME_aluno').AsString := QuotedStr(edtNome.Text + '%');
whereand := 'AND ';
end;
if (Trim(edtMatricula.Text <> EmptyStr)) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_MATRICULA like :MATRICULA_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('MATRICULA_ALUNO').AsString := QuotedStr(edtMatricula.Text + '%');
whereand := 'AND ';
end;
if (Trim(edtCodigo.Text <> EmptyStr)) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_CODIGO like :CODIGO_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('CODIGO_ALUNO').AsInteger := StrToInt(edtCodigo.Text);
end;
dm_dados.SqlConsAluno.Open;
end; |
quanto a parte da idade, basta você utilizar a mesma função de cálculo de idade que usou no cadastro |
Boa Noite leo_cj!
Fiz os testes aqui e infelizmente não deu certo.
Não consegui colocar os códigos em ordem para serem exibidos e quanto ao resultado da idade, não apareceu nada ao fazer a consulta. Pelo jeito terei que registrar ele no banco de dados para que seja visualizado mesmo.
Agradeço a atenção! |
|
Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Ter Dez 20, 2016 7:42 am Assunto: |
|
|
poste como ficou seu código, tanto da consulta quanto da idade |
|
Voltar ao Topo |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Qua Dez 21, 2016 2:35 pm Assunto: |
|
|
leo_cj escreveu: | poste como ficou seu código, tanto da consulta quanto da idade |
Boa Tarde!
Desculpe a demora para lhe responder.
Segue meu código completo:
Código: | procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
var
whereand: String;
begin
dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.SQL.Clear;
dm_dados.Sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
whereand := 'WHERE ';
if (Trim(EdtNome.Text <> EmptyStr)) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_NOME like :NOME_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('NOME_ALUNO').AsString := QuotedStr(edtNome.Text + '%');
whereand := 'AND ';
end;
if (Trim(edtMatricula.Text <> EmptyStr)) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_MATRICULA like :MATRICULA_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('MATRICULA_ALUNO').AsString := QuotedStr(edtMatricula.Text + '%');
whereand := 'AND ';
end;
dm_dados.SqlConsAluno.Open;
end;
//Calcula Idade
procedure TFrmMatricula_Aluno.DBEdit12Exit(Sender: TObject);
var
ATUAL, NASC: TDateTime;
ANOS: Real;
begin
NASC:= StrToDate(DBEdit12.Text);
ATUAL:= Date;
ANOS:= Int((ATUAL - NASC) / 365.25);
Label17.Caption:= FormatFloat('0', ANOS)+ Label18.Caption
end;
end. |
Os erros que aparecem são os seguintes ao compilar o código:
Código: | [Error] UMatricula_Aluno.pas(166): There is no overloaded version of 'Trim' that can be called with these arguments
[Error] UMatricula_Aluno.pas(172): There is no overloaded version of 'Trim' that can be called with these arguments |
Estes erros são referentes aos campos de pesquisa, sendo que utilizei um EDIT para cada campo, mas todos ligados no mesmo botão e quanto a idade ele não mostra nada ao ser executado, somente na tela de cadastro a idade é apresentada.
Agradeço a atenção! |
|
Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qua Dez 21, 2016 3:38 pm Assunto: |
|
|
erro meu, fechei o parenteses no lugar errado, tenta assim:
Código: | procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
var
whereand: String;
begin
dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.SQL.Clear;
dm_dados.Sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
whereand := 'WHERE ';
if (Trim(EdtNome.Text) <> EmptyStr) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_NOME like :NOME_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('NOME_ALUNO').AsString := QuotedStr(edtNome.Text + '%');
whereand := 'AND ';
end;
if (Trim(edtMatricula.Text) <> EmptyStr) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_MATRICULA like :MATRICULA_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('MATRICULA_ALUNO').AsString := QuotedStr(edtMatricula.Text + '%');
whereand := 'AND ';
end;
dm_dados.SqlConsAluno.Open;
end;
//Calcula Idade
procedure TFrmMatricula_Aluno.DBEdit12Exit(Sender: TObject);
var
ATUAL, NASC: TDateTime;
ANOS: Real;
begin
NASC:= StrToDate(DBEdit12.Text);
ATUAL:= Date;
ANOS:= Int((ATUAL - NASC) / 365.25);
Label17.Caption:= FormatFloat('0', ANOS)+ Label18.Caption
end;
end. |
|
|
Voltar ao Topo |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Qua Dez 21, 2016 4:02 pm Assunto: |
|
|
leo_cj escreveu: | erro meu, fechei o parenteses no lugar errado, tenta assim:
Código: | procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
var
whereand: String;
begin
dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.SQL.Clear;
dm_dados.Sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
whereand := 'WHERE ';
if (Trim(EdtNome.Text) <> EmptyStr) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_NOME like :NOME_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('NOME_ALUNO').AsString := QuotedStr(edtNome.Text + '%');
whereand := 'AND ';
end;
if (Trim(edtMatricula.Text) <> EmptyStr) then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_MATRICULA like :MATRICULA_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('MATRICULA_ALUNO').AsString := QuotedStr(edtMatricula.Text + '%');
whereand := 'AND ';
end;
dm_dados.SqlConsAluno.Open;
end;
//Calcula Idade
procedure TFrmMatricula_Aluno.DBEdit12Exit(Sender: TObject);
var
ATUAL, NASC: TDateTime;
ANOS: Real;
begin
NASC:= StrToDate(DBEdit12.Text);
ATUAL:= Date;
ANOS:= Int((ATUAL - NASC) / 365.25);
Label17.Caption:= FormatFloat('0', ANOS)+ Label18.Caption
end;
end. |
|
Agora compila o código mas na hora de executar as consultas ele não responde nada, rsrsrsr!
O que será que está errado?
Agradeço a atenção! |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Dez 22, 2016 10:48 am Assunto: |
|
|
Experimente remover a função QuotedStr ao passar os valores para os parâmetros, pois com ela os valores digitados nos Edits vão ficar entre aspas.
Código: | procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
var
whereand: String;
begin
dm_dados.Sqlconsaluno.Close;
dm_dados.Sqlconsaluno.SQL.Clear;
dm_dados.Sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
whereand := 'WHERE ';
if Trim(EdtNome.Text) <> EmptyStr then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_NOME like :NOME_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('NOME_ALUNO').AsString := edtNome.Text + '%';
whereand := 'AND ';
end;
if Trim(edtMatricula.Text) <> EmptyStr then
begin
dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_MATRICULA >= :MATRICULA_ALUNO');
dm_dados.Sqlconsaluno.ParamByName('MATRICULA_ALUNO').AsInteger := StrToInt(edtMatricula.Text);
end;
dm_dados.SqlConsAluno.Open;
end; |
obs: o filtro para o campo matricula também foi adaptado para ficar de acordo com a query inicial
Espero que ajude |
|
Voltar ao Topo |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Sex Dez 23, 2016 7:43 pm Assunto: |
|
|
Boa Noite imex!
O código que me passou funcionou perfeitamente, só tive que fazer uma pequena alteração nesta linha:
Código: | dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_MATRICULA >= :MATRICULA_ALUNO'); |
Ficando assim:
Código: | dm_dados.Sqlconsaluno.SQL.Add(whereand + 'ALUNO_MATRICULA = :MATRICULA_ALUNO'); |
Retirei o sinal de >, porque com ele dava erro na hora que ia digitar a pesquisa por nome.
Quanto ao resultado da idade nas consultas consegui que eles aparecessem usando a opção On Change, mas quando efetuo outra pesquisa dá erro. Será que é melhor gravar os dados no banco de dados e assim efetuar a consulta?
Agradeço a atenção! |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sáb Dez 24, 2016 3:21 pm Assunto: |
|
|
Boa tarde,
Não consegui entender o erro que ocorreu com o sinal de maior que deixou de ocorrer sem ele. Qual mensagem de erro era exibida?
Sobre a idade, acho que gravar no banco de dados não é uma boa idéia porque a mesma vai mudando com o passar do tempo. Para esse caso onde são exibidos vários registros em um DBGrid, acho que seria melhor criar um campo do tipo calculado para exibir a idade. Confira o artigo abaixo:
http://www.devmedia.com.br/quick-tips-fields-internalcalc-x-calculated-x-aggregate/16254
Espero que ajude |
|
Voltar ao Topo |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Dom Dez 25, 2016 3:09 pm Assunto: |
|
|
imex escreveu: | Boa tarde,
Não consegui entender o erro que ocorreu com o sinal de maior que deixou de ocorrer sem ele. Qual mensagem de erro era exibida?
Sobre a idade, acho que gravar no banco de dados não é uma boa idéia porque a mesma vai mudando com o passar do tempo. Para esse caso onde são exibidos vários registros em um DBGrid, acho que seria melhor criar um campo do tipo calculado para exibir a idade. Confira o artigo abaixo:
http://www.devmedia.com.br/quick-tips-fields-internalcalc-x-calculated-x-aggregate/16254
Espero que ajude |
Boa Tarde imex!
Sobre o erro que lhe falei quando insere o sinal de > é que ele não exibe os registros cadastrados no números 3 e 5 de um total de sete cadastros que fiz para testes. Nas consultas por nome, funcionam perfeitamente e o mesmo acontece quando deixo apenas o sinal de = nas consultas por matrícula.
Quanto a exibição da idade, o que preciso é que quando o usuário fizer aniversário ela seja automaticamente alterada mesmo, inclusive nas consultas. É importante para o meu projeto aqui. Mas se coloco essa consulta sem registrar no banco de dados e usando a opção OnChange me aparece normalmente, mas quando vou executar outra consulta, seja ela por nome ou por matrícula, ela aparece o erro: Project Curso.exe raised exception class EConvertError with message ''' is not a valid date'. Process stopped. Use Step or Run to continue. Por este motivo que acho melhor efetuar o registro dela no banco de dados mesmo.
Agradeço novamente a atenção! |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|