Capturar dados de uma consulta sql e mostrar msg na tela

20/08/2008

1

É 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:


Responder

Posts

21/08/2008

Rlcdo

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.


Responder

21/08/2008

Paulo

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.


Responder

22/08/2008

Rlcdo

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


Responder

26/08/2008

Rlcdo

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?


Responder

27/08/2008

Marcosrocha

´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.


Responder

27/08/2008

Rlcdo

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 ´


Responder

27/08/2008

Paulo

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.


Responder

27/08/2008

Rlcdo

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?


Responder