Ir para conteúdo
andreluis78

Query em tempo de execução

Recommended Posts

Olá a todos.
Criei um procedimento para verificar se um usuário está cadastrado no banco de dados.
Utilizo Firebird como BD e componentes Zeos para acessar o banco.
Resolvi criar uma query em tempo de execução para fazer a verificação. Não dá nenhum erro, porém, quando digito o nome do usuário no Edit e clico
no botão que executa o procedimento, ele dá ''usuário inexistente'', mesmo se o nome do usuário estiver cadastrado no banco.

 

Segue o código:

 

procedure Tfrm_login.SpeedButton1Click(Sender: TObject);
var Qry : TZQuery;
begin
  Qry:=TZQuery.Create(nil);
  Qry.Connection := dm_dados.ZConnection1;  //componente de conexão
  Qry.SQL.Add('select codigo, nome, acessar, user, pass from clientes');
  Qry.Open;
  if Qry.Locate('USER',Edit1.Text,[]) then
  begin
    ShowMessage('usuário cadastrado');
  end
  else
  begin
    ShowMessage('usuário inexistente');
    Edit1.SetFocus;
  end;
  FreeAndNil(Qry);
end;

 

Se alguém puder ajudar agradeço desde já.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Refatorando seu código:

 

procedure Tfrm_login.SpeedButton1Click(Sender: TObject);
var Qry : TZQuery;
begin
  try
    Qry            := TZQuery.Create(nil);
    Qry.Connection := dm_dados.ZConnection1;  //componente de conexão
    Qry.Close;
    Qry.SQL.Clear;
    Qry.Params.Clear;
    Qry.SQL.Add('select codigo, nome, acessar, user, pass from clientes where Lower( user ) = :user');
    Qry.Params[0].AsString := LowerCase( Edit1.Text )
    Qry.Open;
    //
    if Qry.RecordCount > 0 then
    begin
      ShowMessage('usuário cadastrado');
    end
    else
    begin
      ShowMessage('usuário inexistente');
      Edit1.SetFocus;
    end;
  finally    
    FreeAndNil(Qry);
  end;  
end;

O método locate não seria o mais recomendado para essa finalidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • Por FabianoSouza
      Tenho uma function que precisa receber 02 argumentos.
      Ela funciona se eu aplicar num select qualquer. Mas se eu aplicar num select dinâmico, ocorre erro.
      Veja trecho do meu select.
      ... SET @sql = @sql +', dbo.retornaIco_ItemBloq((SELECT COUNT(*) FROM dbo.tab AS TT2 WHERE TT2.codCategTreina = CTT.id),'+@title+') AS ''resp''' ... No caso, o primeiro argumento da function dbo.retornaIco_ItemBloq é um SELECT COUNT.
      O segundo argumento é uma variável (que está devidamente declarada e definida).
       
      O erro ocorre porque ao executar (chamando EXEC(@sql) ), o SQL entende que o segundo argumento é uma coluna da consulta principal, pois existe uma vírgula antes da variável @title (que é o segundo argumento da function).
      Repito. Se eu aplicar essa function num select normal, funciona normalmente. Porém, preciso que funcione num SQL dinâmico porque é esse é o padrão que estou adotando para o sistema todo.
       
      A function dbo.retornaIco_ItemBloq faz o seguinte:
      1) Recebe o valor do COUNT e da variável @title
      2) Se o COUNT for maior que  Zero, cria uma tag HTML (uma SPAN), define sua title com o valor da variável @title e passa para uma variável
      3) Retorna o HTML que será exibido no resultado da consulta principal
      É super simples.
       
      Há outra forma de chamar a function?
    • Por mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • Por Daniel Jose Sobrinho
      Olá, eu tenho um memo em Delphi com as seguintes linhas
       
      CALDO DE GALINHA
      LEMON PEPPER
       
      Preciso que fique com 10 ponto e virgula, já contando os que vão estar no espaço em branco assim:
       
      CALDO;DE;GALINHA;;;;;;;;
      LEMON;PEPPER;;;;;;;;;
       
      Pra substituir os espaços em branco já usei o stringreplace e funcionou corretamente:
       
      memo1.text := StringReplace(memo1.text,',',';',[rfReplaceAll]);
    • Por Sapinn
      Olá a todos existe alguma maneira de trazer todos os dados de uma tabela menos o maior valor?
×

Informação importante

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