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.?
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
Curtir tópico
+ 0
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):
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).
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
Clique aqui para fazer login e interagir na Comunidade :)