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 

[Resolvido]Fazer para ñ aparecer registro duplicado FireBird

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
lokasso
Aprendiz
Aprendiz


Registrado: Terça-Feira, 11 de Abril de 2017
Mensagens: 174

MensagemEnviada: Sex Dez 01, 2017 3:14 pm    Assunto: [Resolvido]Fazer para ñ aparecer registro duplicado FireBird Responder com Citação

Galera, eu ja procurei em todo o google e realmente não encontrei uma solução para registro duplicado, pois a maioria dos resultados é sobre deletar o registro, porém eu não quero deletar, apenas quero que apareça apenas um na consulta, irei mandar um print para "tentar" explicar



É o SQL que estou utilizando para trazer a concatenação entre as tabelas

São as chaves PK e UNIQ respectivamente e seria por aqui que gostaria de filtrar os registros, pois pelo nome não poderá porque com toda certeza terá mais de um livro com o mesmo nome

São tabelas detalhes e por isso que está aparecendo mais de um registro, pois em um livro tem vários assuntos e tem livros que tem mais de um autor, portanto eu não poderia excluir o registro

Acho que consegui explicar.

Já tentei count, distint e group by porém não resolveu

Gostaria de uma luz para fazer esse filtro

Abraços

Grato


Editado pela última vez por lokasso em Ter Dez 05, 2017 2:12 am, num total de 1 vez
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: Sex Dez 01, 2017 3:56 pm    Assunto: Responder com Citação

Boa tarde,

Qual versão do Firebird você está utilizando?
Você pode postar a sua query em modo texto para facilitar a edição?

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!pres_dutra-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lokasso
Aprendiz
Aprendiz


Registrado: Terça-Feira, 11 de Abril de 2017
Mensagens: 174

MensagemEnviada: Sex Dez 01, 2017 4:32 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Qual versão do Firebird você está utilizando?
Você pode postar a sua query em modo texto para facilitar a edição?

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!pres_dutra-residencial-casa


imex, desculpe por não mencionar, FireBird 3.0.2

Código:
SELECT bl.ID_BIBLIOLIVRO,
       BL.TITULO_DESC,
       BL.SUBT_DESC,
       BL.VOLUME,
       BL.EDITORA,
       BL.GENERO,
       BL.REF,
       BL.STATUS,
       BL.BAIXA,
       ASL.DESC_ASSUNTO,
       AU.NOME_AUTOR,
       ED.NOME_EDITORA,
       G.NOME_GENERO

FROM TB_AUTOR AU left join TB_AUTORLIVRO AL on al.id_autor = au.id_autor

join TB_BIBLIOLIVRO BL on al.id_bibliolivro = bl.id_bibliolivro

join TB_ASSUNTO ASL on bl.id_bibliolivro = asl.id_bibliolivro

join TB_EDITORA ED on bl.editora = ed.id_editora

join TB_GENERO G on bl.genero = g.id_genero

WHERE 1 = 1


Abraços
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: Sex Dez 01, 2017 4:55 pm    Assunto: Responder com Citação

Experimente fazer uns testes dessa forma:

Código:
SELECT bl.ID_BIBLIOLIVRO,
       BL.TITULO_DESC,
       BL.SUBT_DESC,
       BL.VOLUME,
       BL.EDITORA,
       BL.GENERO,
       BL.REF,
       BL.STATUS,
       BL.BAIXA,
       (SELECT LIST(ASL.DESC_ASSUNTO, ' - ')
        FROM TB_ASSUNTO ASL
        WHERE asl.id_bibliolivro = bl.id_bibliolivro) AS DESC_ASSUNTO, 
       (SELECT LIST(AU.NOME_AUTOR, ' - ')
        FROM TB_AUTORLIVRO AL
        INNER JOIN TB_AUTOR AU on au.id_autor = al.id_autor
        WHERE al.id_bibliolivro = bl.id_bibliolivro) AS NOME_AUTOR,
       ED.NOME_EDITORA,
       G.NOME_GENERO
FROM TB_BIBLIOLIVRO BL
inner join TB_EDITORA ED on bl.editora = ed.id_editora
inner join TB_GENERO G on bl.genero = g.id_genero


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lokasso
Aprendiz
Aprendiz


Registrado: Terça-Feira, 11 de Abril de 2017
Mensagens: 174

MensagemEnviada: Sex Dez 01, 2017 11:36 pm    Assunto: Responder com Citação

imex escreveu:
Experimente fazer uns testes dessa forma:

Código:
SELECT bl.ID_BIBLIOLIVRO,
       BL.TITULO_DESC,
       BL.SUBT_DESC,
       BL.VOLUME,
       BL.EDITORA,
       BL.GENERO,
       BL.REF,
       BL.STATUS,
       BL.BAIXA,
       (SELECT LIST(ASL.DESC_ASSUNTO, ' - ')
        FROM TB_ASSUNTO ASL
        WHERE asl.id_bibliolivro = bl.id_bibliolivro) AS DESC_ASSUNTO, 
       (SELECT LIST(AU.NOME_AUTOR, ' - ')
        FROM TB_AUTORLIVRO AL
        INNER JOIN TB_AUTOR AU on au.id_autor = al.id_autor
        WHERE al.id_bibliolivro = bl.id_bibliolivro) AS NOME_AUTOR,
       ED.NOME_EDITORA,
       G.NOME_GENERO
FROM TB_BIBLIOLIVRO BL
inner join TB_EDITORA ED on bl.editora = ed.id_editora
inner join TB_GENERO G on bl.genero = g.id_genero


Espero que ajude


imex valeu brother, funcionou perfeito, nem conhecia esse comando "LIST" no SQL, acabei de copiar e colar no IBExpert e não aparece mais os registros duplicados, amanhã vou testar no Delphi e te mando o Feedback mais detalhado

Abraços brother
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lokasso
Aprendiz
Aprendiz


Registrado: Terça-Feira, 11 de Abril de 2017
Mensagens: 174

MensagemEnviada: Ter Dez 05, 2017 2:11 am    Assunto: Responder com Citação

imex, brother desculpe por demorar em dar feedback sobre o seu select, pois bem, como eu disse no post acima, tinha dado certo a consulta pelo ibexpert, ai fui tentar pelo delphi e dava alguns erros, sempre depois desse comando: "(' - ')", eu não tava conseguindo passar esse select via código, então optei por criar mais duas FDQuery's e deixar os comandos fixos e apenas atribui um parametro diferentes para cada query.

Teria como deixar essa query dinamica ou não? Senão tiver como eu deixo as duas Query's e não tem problema, pois ja está solucionado esse problema e já irei dar "RESOLVIDO" no tópico.

Enfim imex valeu pela ajuda brother

Abraços
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: Ter Dez 05, 2017 9:23 am    Assunto: Responder com Citação

Acredito que seja possível deixar a query dinâmica.
Teria que ver a mensagem de erro que está sendo exibida, mas se o problema for por causa das aspas experimente utilizar a função QuotedStr. Ex:

Código:
Query1.SQL.Add( '(SELECT LIST(ASL.DESC_ASSUNTO, ' + QuotedStr(' - ') + ')' );


Ou então coloque duas aspas simples seguidas para obter uma aspas simples entro da string:

Código:
Query1.SQL.Add( '(SELECT LIST(ASL.DESC_ASSUNTO, '' - '')' );


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lokasso
Aprendiz
Aprendiz


Registrado: Terça-Feira, 11 de Abril de 2017
Mensagens: 174

MensagemEnviada: Ter Dez 05, 2017 10:01 am    Assunto: Responder com Citação

imex bom dia, tentei de ambos os jeitos e simplesmente fica vermelho no segundo '(' e não vai de jeito nenhum, uma alternativa foi colocar fixo nas querys e só passar os parametros no case.

imex, não querendo abusar, mas ja abusando, estou tento um probleminha que não to conseguindo resolver, tipo estou usando o mesmo select que você me passou para "juntar" o historico de empréstimos do leitor, porém ele não está juntando, você poderia me ajudar nisso?

Estou usando o código dessa maneira:

Código:
SELECT E.ID_EMPRESTIMO,

        (SELECT LIST(L.NOME_LEITOR, ' - ')
        FROM TB_LEITOR L
        WHERE L.ID_LEITOR = E.ID_LEITOR) AS LEITOR,

///////
       (SELECT LIST(BL.REF||' - '||BL.TITULO_DESC||' - '||
       E.DATA_EMPRESTIMO||' - '||E.DATA_DEVOLUCAO, ASCII_CHAR(13)||ASCII_CHAR(10))
/////aqui eu consegui concatenar os campos que quero, mas não junta-los
        FROM TB_ITEMEMPRESTIMO IE
        INNER JOIN TB_BIBLIOLIVRO BL ON BL.REF = IE.REF_LIVRO
        WHERE IE.ID_EMPRESTIMO = E.id_emprestimo) AS LIVRO

FROM TB_EMPRESTIMO E

WHERE 1=1


Vou tentar explicar melhor:

O leitor 1 tem dois emprestimos do mesmo livro e 1 diferente, porém em datas diferente e conseguintemente na tabela itememprestimo os ids dos itens são diferentes e os ids dos emprestimos tambem

Teria como fazer essa listagem?


Desde ja agradeço


Abraços
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: Ter Dez 05, 2017 1:09 pm    Assunto: Responder com Citação

Boa tarde,

Sobre montar a query com código, acho melhor você postar o seu código e a mensagem de erro exibida.

Sobre essa outra query, não sei se entendi corretamente a estrutura das tabelas mas desconfio que você vai ter que tirar o campo ID_Emprestimo que está logo depois do Select para permitir o agrupamento dos registros, e se você adicionar algum outro campo naquele local vai ser necessário adicionar o Group By.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lokasso
Aprendiz
Aprendiz


Registrado: Terça-Feira, 11 de Abril de 2017
Mensagens: 174

MensagemEnviada: Ter Dez 05, 2017 5:57 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Sobre montar a query com código, acho melhor você postar o seu código e a mensagem de erro exibida.

Sobre essa outra query, não sei se entendi corretamente a estrutura das tabelas mas desconfio que você vai ter que tirar o campo ID_Emprestimo que está logo depois do Select para permitir o agrupamento dos registros, e se você adicionar algum outro campo naquele local vai ser necessário adicionar o Group By.

Espero que ajude


imex, desculpe a demora pra lhe dar feedback, enfim, sobre a primeira query vou deixa-la como esta mesmo fixa nas querys, ta funcionando, isso é o mais importante e sobre a segunda query esta até agora quebrando a cabeça aqui, mas ai fui ver no cronograma e o usuário não pediu relatório de histórico de livros emprestados por cliente, então estou optando por nem fazer esse relatório.

Só vou te explicar qual era a minha ideia, iria ser como se fosse o histórico de todos os livros emprestados por cada leitor, ou seja, se o leitor 1 emprestou o livro "a biblia do delphi" por 100x, la estaria as 100x que o leitor emprestou esse livro, porém iria chegar uma hora que esse relatório nem iria abrir mais, por tão cheio de informações, então mais um motivo que irei tirar do projeto, caso o cliente deseje um historico, implemento um histórico com os 3 ultimos emprestimos.

Enfim, post realmente encerado.

Valeu por tudo imex, valeu mesmo, tu me ajudou muito

Abraços
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
Página 1 de 1

 
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