ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Pesquisas Personalizadas com IBQuery [Resolvido!]
Ir à página 1, 2, 3  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Dom Dez 18, 2016 10:17 pm    Assunto: Pesquisas Personalizadas com IBQuery [Resolvido!] Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Dez 19, 2016 8:33 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Seg Dez 19, 2016 2:04 pm    Assunto: Boa Tarde! Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Dez 19, 2016 3:04 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Seg Dez 19, 2016 3:37 pm    Assunto: Boa Tarde! Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Seg Dez 19, 2016 4:20 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Seg Dez 19, 2016 7:02 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Ter Dez 20, 2016 7:42 am    Assunto: Responder com Citação

poste como ficou seu código, tanto da consulta quanto da idade
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Qua Dez 21, 2016 2:35 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Dez 21, 2016 3:38 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Qua Dez 21, 2016 4:02 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Dez 22, 2016 10:48 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Sex Dez 23, 2016 7:43 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sáb Dez 24, 2016 3:21 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Dom Dez 25, 2016 3:09 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Ir à página 1, 2, 3  Próximo
Página 1 de 3

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB