Consulta sql no Delphi

17/01/2024

0

Caros,
Preciso da ajuda de vocês, tenho duas tabelas:

tbl ENTRADA
ID
NOME
DATA
HR_ENTRADA

tbl SAIDA
ID
NOME
DATA
HR_SAIDA

Criei uma query para junção dessas duas tabelas e deu certo. Segue o comando sql na query:

SELECT a.id as aid, a.nome, a.data, a.hr_entrada, b.id as bid, b.nome, b.data, b.hr_saida
FROM entrada as a, saida as b
WHERE a.id = b.id


Só que preciso é em cima dessa query, realizar consultas no banco pelo nome, e outra consulta pelas datas. Isso dentro do próprio delphi 10.3.

Alguém poderia meu ajudar.?
Vinicius

Vinicius

Responder

Posts

17/01/2024

Arthur Heinrich

ID é um nome genérico para colunas, geralmente associado à PK (Primary Key) da tabela. Que garantia você tem que um registro de saída será registrado com o mesmo ID da entrada correspondente, armazenado na outra tabela.

Outra coisa que atrapalha, no seu modelo, é que você gravou a data e hora em colunas separadas. Quando você pretende filtrar dados em períodos, é mais simples se o filtro for feito em uma coluna que contenha a data e hora, juntos.

Podem haver falhas no registro de entrada/saída, registrando múltiplas vezes uma entrada ou saída, ou mesmo não registrando e isso faz com que o ID, geralmente sequencial e gerado automaticamente se torne dessincronizado entre as tabelas.

Tirando este fato, para cada funcionalidade, você precisa de uma query distinta.

Para pesquisar por nome (por exemplo):

SELECT a.id as aid, a.nome, a.data, a.hr_entrada, b.id as bid, b.nome, b.data, b.hr_saida
FROM entrada as a, saida as b
WHERE
  a.nome = :nome and
  a.id = b.id


Ao utilizar ":nome", um nome de parâmetro prefixado pelo caractere ':', sua query terá um parâmetro para informar o nome a ser pesquisado, antes de executar a query.

Você pode adicionar quantos parâmetros desejar.

Para mim, pesquisar os registros de um usuário em determinado período é algo bastante corriqueiro. Por exemplo, pesquisar os acessos do usuário na semana passada.

Se a pesquisa vai utilizar um período fixo, como últimos 7 dias, não é necessário utilizar um parâmetro. Você pode adicionar um filtro utilizando funções do banco que retornam o dia e horário do sistema e utilizando funções para somar ou subtrair um período, de forma a gerar dinamicamente o filtro.

Para utilizar um período arbitrário, pode utilizar parâmetros. Um exemplo seria utilizar o nome (:nome) e os horários de início (:dtinicio) e fim (:dtfim).

Pode também precisar de um relatório de acessos em geral, onde o nome não é filtrado, retornando todos os acessos do período.

Para tornar estas consultas eficientes, além das PKs (colunas ID), que são normalmente indexadas, é importante que hajam índices adequados para os filtros acima.

Você precisa de pelo menos dois índices adicionais. Um pelas colunas (nome, data) e outro por (data).
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar