Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Donizera

Parâmetro em Querry DELPHI [como usar paramentros do tipo string?] [HELP]

Recommended Posts

Tenho tentado criar uma procedimento para busca dentro de um tabela de um banco;
E adotei o seguinte código para o procedimento;

procedure Busca(campo:string);
begin
    DM.qtester.Active :=false ;
    DM.qtester.ParamByName('campo').AsString := campo;// PARAMETRO CAMPO , RECEBE A INFORMAÇÃO DE QUAL COLUNA SERA SELECIONADA
    DM.qtester.ParamByName('valor').Value := frmTabelaFuncionario.Edit1.Text;// PARAMENTRO VALOR, RECEBE A INFORMAÇÃO DO VALOR DE COMPARAÇÃO 
    DM.qtester.Active := true ;
    frmTabelaFuncionario.gridExibeFuncionario.DataSource :=  DM.dsTester;// TABELA RECEBE A NOVA QUERY ADOTADA PARA EXIBIÇÃO

end;

QUERRY MENCIONADA NO METODO BUSCA
 

[code=sql]
select 
codFuncionario, 
nome, 
idade, 
cpf, 
endereco, 
numero,
cep, 
telefone,
codSetor 
from projetoestacionamento.funcionario 

where  
:campo = :valor and
excluido <> 'e' order by (codFuncionario)

 

O problema é que, quando executo o método tudo ocorre certo até o ponto da onde a tabela exibirá as informações da busca; 
Acontece que o teste feito no sql(where) acaba dando falso. (Pelo fato de que eu entendi o paramentro :campo esta vazio)

Testando o codigo percebi que, ao passar somente o valor de comparação (no caso o paramentro :valor), a tabela exibe corretamente a busca,

e pesquisando descobri q parametros podem ser tipados;

 

  • Tenho que estipular algum tipo pra o meu parametro campo ?
  • existe outro método mais eficiente que esse, para busca em tabela ?

Desde ja agracedo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é possível referenciar um campo da tabela utilizando um parâmetro, da forma que você está fazendo a consulta executada está sendo.

SELECT 
  codFuncionario, 
  nome, 
  idade, 
  cpf, 
  endereco, 
  numero,
  cep, 
  telefone,
  codSetor 
FROM
  projetoestacionamento.funcionario 
WHERE  
  /*:campo = :valor */
  'Campo selecionado' = 'Texto do Edit'
  AND excluido <> 'e'
ORDER BY
  (codFuncionario)

Está comparando dois valores do tipo string.

 

A solução que me passa pela cabeça seria ajustar a consulta do qtester dependendo do campo selecionado, algo como:

procedure Busca(campo:string);
const
  cSQL: string = 
    'SELECT ' +
    '  codFuncionario, nome, idade, cpf, endereco, numero,cep, telefone,codSetor ' +
    'FROM ' +
    '  projetoestacionamento.funcionario ' +
    'WHERE ' +
    '  %s = :valor AND excluido <> ''e'' ' +
    'ORDER BY ' +
    '  (codFuncionario)';
begin
  DM.qtester.Active :=false;
  //Dependendo do componente utilizado DM.qtester.SQL.Text pode ser DM.qtester.CommandText
  DM.qtester.SQL.Text := Format(cSQL, [campo]);
  {
    Equivalente a
    DM.qtester.SQL.Text := 'SELECT ' +
    '  codFuncionario, nome, idade, cpf, endereco, numero,cep, telefone,codSetor ' +
    'FROM ' +
    '  projetoestacionamento.funcionario ' +
    'WHERE ' +
    '  ' + campo + ' = :valor AND excluido <> ''e'' ' +
    'ORDER BY ' +
    '  (codFuncionario)';
  }
  DM.qtester.ParamByName('valor').Value := frmTabelaFuncionario.Edit1.Text;// PARAMENTRO VALOR, RECEBE A INFORMAÇÃO DO VALOR DE COMPARAÇÃO 
  DM.qtester.Active := true ;
  frmTabelaFuncionario.gridExibeFuncionario.DataSource :=  DM.dsTester;// TABELA RECEBE A NOVA QUERY ADOTADA PARA EXIBIÇÃO
end;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por xavierramalho
      Estamos com uma vaga para analista devops na TI da Totvs. Se você tem interesse, pode fazer a candidatura no link https://totvs.gupy.io/jobs/1028739 e fazer contato pelo e-mail filipe.ramalho@totvs.com.br
       
      Não precisa ter experiência específica com DevOps, mas precisa ser apaixonado por tecnologia, quanto mais nerd melhor! Temos tudo pra você aprender e profissionais muito experientes pra te ajudar. Só precisamos que você tenha muita vontade e dedicação!
    • Por Fernando30
      Olá pessoal,
       
      Sou gestor na área de tecnologia já faz alguns anos e, como a maioria do pessoal que está na área, sofro muito com a falta de mão de obra. Sofremos muito com qualidade de fornecedores, confiança na prestação de serviços, etc. Na área de desenvolvimento isso se intensifica bastante.
      A demanda cresce vertiginosamente e devido a essa escassez, os projetos de tecnologia acabam tendo atrasos e falta de qualidade.
       
      Atualmente existem algumas plataformas de freelancers no mercado, mas todas com muita burocracia e custos altos para os prestadores.
       
      A ideia surgiu dessa problemática:
      Aliar uma plataforma totalmente gratuita, desburocratizada e democrática em que todos tenham acesso a desenvolvimentos de tecnologia diretamente com os profissionais da área.
        
      http://www.code4seasons.com
       
      Vocês poderiam me dar um feedback do que acharam por favor ?
    • Por Cap
      Tenho uma dúvida, na minha tabelas existe 4 keys estrangeiras que ligam com uma tabela funcionarios onde tem o nome do funcionario, minha dúvida é que quero que retorno o nome de cada usuario, abaixo uma foto da minha tabela com o id de cada funcionário e a outra com o nome do funcionário. Quero que ela retorno uma tabela igual a a com os ids mas em vez deles com os nomes dos funcionarios.
    • Por DanielleN
      Boa tarde pessoal!
      Preciso de uma ajuda urgente.O contexto é o seguinte: Acabo de pegar toda uma estrutura pronta de integração, que se conecta ao repo Azure DevOps, cada commit dispara a execução com parâmetros automatizados em Jenkins.
      Tive um problema em um dos step e gostaria de ver os arquivos que estão gerando. Mas meu job está ligado a um master e não possui a opção de gerar os artefacts. Alguém poderia me dizer o que posso fazer? Como listar os arquivos que estão sendo gerados?
      Obrigada 
    • Por Mozelli
      Olá pessoal.
       
      Estou com o seguinte problema.
      Foi formatado o computador da empresa sem fazer o backup da base de dados do sistema que consiste em dois arquivos, segundo o proprietário do sistema informou: um arquivo .mdf e outro .ldf.
      Através de programas de recuperação de dados, consegui encontrar esses arquivos.
      Preciso recuperar esses dados. Há alguma maneira de eu abrir esses aquivos e tentar recuperar essa base de dados? Algum programa?
       
      Desde já agradeço.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.