Capturar dados de uma consulta sql e mostrar msg na tela - Fórum DevMedia
Capturar dados de uma consulta sql e mostrar msg na tela
É o seguinte, preciso fazer uma consulta sql utilizando 2 tabelas.
Tabela sistemas contendo os campos, dentre outros: id_sistema (int) e dsc_sistema(varchar).
Tabela manutenção contendo os campos, dentre outros: dta_inicial(datetime), dta_final(datetime), id_sistema (int), dsc_manutenção(varchar).
Enfim... preciso realizar uma consulta onde faça a verificação: quando dta_final for nula, ele mostra num panel uma mensagem do tipo:
O sistema # entrou em manutenção na data
Descrição da manutenção:
Enfim, para isso faço uma consulta do tipo:
from sistemas as S, manutenção as M
where dta_final is null and S.id_sistema=M.id_sitema
Beleza... mas eu queria saber como colocar essa consulta numa variável p/ mostrar no panel de acordo com a mensagem:
O sistema entrou em manutenção na data
Niguém sabe fazer isso?
Não deve ser uma coisa difícil de fazer p/ usuários mais avançados... simplificando, eu quero recuperar informações do banco de dados MS SQL e mostrá-las no meu programa em delphi num panel.
Se você usar um Grid, ele vai mostrar o result do seu Select. Como você está dando um SELECT * FROM...., pode vir muitas linhas, logo, para se guardar isso em variável, teria que declarar uma variável TstringList, dar um While na query e ir adicionando as linhas para dentro de uma StringList ou até mesmo um Memo. Não sei se foi isso que você quiz dizer, mas para mostrar o result de uma query, eu usaria um DBGrid.
No caso, é o seguinte... eu já tenho uma DBGrid com os sistemas cadastrados... quando eu for fazer a manutenção de um sistema, eu seleciono a linha do sistema na DBGrid e mando recuperar o sistema de produção p/ desenvolvimento p/ poder fazer a manutenção. Caso, alguém já esteja fazendo a manutenção do mesmo sistema, eu queria que ele informasse num panel qualquer ´já tem um sistema # em manutenção. A manutenção é p/ ´
Por isso que eu especifiquei mais ou menos como são as tabelas no BD, no primeiro post...
Aí, no caso, quando a pessoa selecionar o sistema, e lá na tabela de manutenção já existir o sistema selecionado, em manutenção, ele vai estar com data final nula, pois não foi implantado em produção ainda... e daí ele vai fazer a consulta, verificando se o sistema selecionado p/ manutenção possui data final nula... possuindo, ele vai mostrar na tela a tal mensagem, informando que o sistema já está em manutenção
Bom, consegui fazer quase tudo que eu queria... só que quando eu mostro a consulta na tela (num componente memo), mostra de todos os sistemas... eu queria mostrar só do sistema selecionado no dbgrid... não sei se teria que usar algum filtro... alguem ajuda?
´select *
and S.id_sistema = ´+DM.CDSSistema.FieldByName(´id_sistema´).AsString;
É isso? Lembre que meu CDS está posicionado no registro apontado pelo DBGrid.
A consulta que eu fiz foi a seguinte:
[b:5a6d607f34] With DM.ADOQ_LT do Begin
SQL.Add(´select MS.Codigo, MS.Idt_Sistema, MS.Dta_Inicial, MS.Dta_Final, MS.Dsc_Detalhada, MS.Dsc_Dir, S.Dsc_Sistema, S.Idt_Sistema ´);
SQL.Add(´from caMANUTENCOES_DE_SISTEMAS as MS, caSISTEMAS as S´);
SQL.Add(´where MS.Dta_Final is Null and MS.Idt_Sistema=S.Idt_Sistema and S.Idt_Sistema=´+DM.ADOQ_LT.FieldByName(´Idt_Sistema´).AsString);
end;[/b:5a6d607f34]
Porém, quando eu executo, aparece o seguinte erro: Project sistema.exe raised exception class EDatabaseError with message ´ADOQ_LT: Field ´Idt_Sistema´ not found ´
Isso ocore de várias formas:
1) O Campo não existe na tabela.
2) Você não deve ter adicionado no FieldEditor do CDS e adicionou os demais. Sempre que adicionar no FieldsEditor algum campo, você terá que trabalhar somente com eles na sua query.