Capturar dados de uma consulta sql e mostrar msg na tela

Delphi

20/08/2008

É 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:
select *
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
Descrição da manutenção:


Rlcdo

Rlcdo

Curtidas 0

Respostas

Rlcdo

Rlcdo

20/08/2008

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.


GOSTEI 0
Paulo

Paulo

20/08/2008

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.


GOSTEI 0
Rlcdo

Rlcdo

20/08/2008

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


GOSTEI 0
Rlcdo

Rlcdo

20/08/2008

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?


GOSTEI 0
Marcosrocha

Marcosrocha

20/08/2008

´select *
from sistemas as S, manutenção as M 
where dta_final is null and S.id_sistema=M.id_sitema
and S.id_sistema = ´+DM.CDSSistema.FieldByName(´id_sistema´).AsString;

É isso? Lembre que meu CDS está posicionado no registro apontado pelo DBGrid.


GOSTEI 0
Rlcdo

Rlcdo

20/08/2008

A consulta que eu fiz foi a seguinte:

[b:5a6d607f34] With DM.ADOQ_LT do Begin
SQL.Clear;
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);
Open;
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 ´


GOSTEI 0
Paulo

Paulo

20/08/2008

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.


GOSTEI 0
Rlcdo

Rlcdo

20/08/2008

O campo existe sim. Eu o utilizo em outros sistemasd inclusive.
Sobre o CDS, nesse sistema eu não possuo um CDS.

Alguma outra idéia?


GOSTEI 0
POSTAR