Fórum Ajuda em uma Consulta Sql #260094

26/11/2004

0

eu tenho uma tabela (Paradox) com um campo chamado : [b:a6e74a167d]Status[/b:a6e74a167d]
do Tipo Alfanumetico

Ao Longo do Aplicativo este Campo Varia Muito Pouco e se torna muito [b:a6e74a167d]repetitivo[/b:a6e74a167d] nos registros.. eu gostaria de fazer uma consulta que me retorna-sse os [b:a6e74a167d]Valores [/b:a6e74a167d]Deste [b:a6e74a167d]Campo...[/b:a6e74a167d]

Na verdade eu preciso , em um momento do aplicativo , saber quais são os tipos diferentes do Status Contido No Meu Banco

Por Exemplo , suponha que em [b:a6e74a167d]10.000 [/b:a6e74a167d]Registro esse campo so tem os esses Possíveis Valores :

Status:= ´Origem : Fabricação´ .... 1 Valor
Status:= ´Origem  : Cepem´    .....2 Valor
Status:= ´Origem  : Shopping´ .....3 Valor
Status:= ´Origem:Confecção  Des:Cepem´  ...4 Valor
Status:= ´Origem:Confecção  Des:Shopping´ ... 5 Valor


Se eu voce percorrer os 10.000 Registros Da Tabela Procurando Valores Diferentes Para O Campo Status , Seria Uma Opção.. Mas Esta, [b:a6e74a167d]So em Último ,Caso[/b:a6e74a167d]. Eu pensei em uma [b:a6e74a167d]istrução Sql[/b:a6e74a167d] :lol: :lol: , mas não to sabendo Fazer :cry:

O que importa nesta consulta e o so o valor deste campo, e que ele não seje repetidos :P :P

Beleza...


Marco Salles

Marco Salles

Responder

Posts

26/11/2004

Gandalf.nho

SELECT Status FROM nome_tabela
GROUP BY Status


Responder

Gostei + 0

26/11/2004

Marco Salles

SELECT Status FROM nome_tabela GROUP BY Status


Isto Mesmo :P :P :P ... Mas surgiu um outro incoveniente :cry: :cry: . Esta Query , eu uso tb para um outro tipo de consultas...
E nesta consulta eu uso os outros campos da tabela.. Então eu adicionei estes campos no Fields Editor :arrow: Quando Vou fazer a Consulta usando so o campo Status eu recebo uma mensagem de erro assim:

Project PCadastro.exe raised exception class EDabaseError with message
´Query1:field ´Codigo´ not found´.Process stopped. use Step or Run to continue.


A consulta que eu Fiz Foi esta

  FormRelatorioEntradasSaidas.Query1.Sql.Add(´Select *From TabMovimentoProdutos´);

      FormRelatorioEntradasSaidas.Query1.Sql.Add(´GROUP BY Status_Operacao´);
      FormRelatorioEntradasSaidas.query1.prepare;
      FormRelatorioEntradasSaidas.Query1.open;

Tambem Fiz Assim e deu a Mesma mensagem :cry: :cry: :cry:

      FormRelatorioEntradasSaidas.Query1.Sql.Add(´Select  Status_Operacao From TabMovimentoProdutos´);

      FormRelatorioEntradasSaidas.Query1.Sql.Add(´GROUP BY Status_Operacao´);
      FormRelatorioEntradasSaidas.query1.prepare;
      FormRelatorioEntradasSaidas.Query1.open;


e nas duas consultas eu recebo esta mesma mensagem :cry: :cry:

o que fazer para resolver isto :?: :?: :?:


Responder

Gostei + 0

26/11/2004

Gandalf.nho

Na primeira opção, você está agrupando por só um campo quando deveria agrupar por todos. E na segunda opção você tem na lista do FieldsEditor campos que não existem na consulta base. O problema é que não dá para misturar as 2 coisas que você quer. Se incluir os outros campos, status iguais vão aparecer se os outros campos forem diferentes...


Responder

Gostei + 0

26/11/2004

Marco Salles

Na primeira opção, você está agrupando por só um campo quando deveria agrupar por todos.


Mas como eu vou agrupar para todos se so me interresa o Agrupamento Do Campo Status :cry: :cry:

E na segunda opção você tem na lista do FieldsEditor campos que não existem na consulta base


Isto e verdade. Pois Tenho Outra Consultas Que Usam estes Campos

problema é que não dá para misturar as 2 coisas que você quer.


Isto e Fato :?: :?: :?: :?:

Então , voce ta me dizendo que , tenho que colocar neste Formulário mais Um Componente TQuery :?: :?: ...

[b:274ba68ae8]Desse modo eu ja tinha feito antes e dá.[/b:274ba68ae8]

So achei Estranho o Delphi Nã o ter mais recurso neste sentido :cry: :cry:

Então , antes de colocar no formulário um [b:274ba68ae8]outro componenente Query[/b:274ba68ae8], so para fazer esta consulta de agrupamento, queria saber a opinião de voces , se é isto mesmo... :?: :?: :?: :?:


Responder

Gostei + 0

26/11/2004

Gandalf.nho

O problema não é o Delphi, isso é uma característica do SQL.


Responder

Gostei + 0

26/11/2004

Marco Salles

O problema não é o Delphi, isso é uma característica do SQL.


Ou eu nao to te entendendo, ou voce nao esta me entendendo...

eu quero fazer dois tipos de pesquisa..[size=18:d5bfaaa901]Esta pesquisa não e simultanea[/size:d5bfaaa901]
Eu nao posso usar o mesmo componente para isto.. Um So TQuery :?: :?:

o erro acontece porque , eu criei , a nivel de projeto os meus TFields.
Se Não tive-sse feito isto, acho que Poderia Usar o Mesmo Componente Query Para estas Duas consultas..... naõ sei se voce esta me entendendo,
Mas eu não vejo como pode [b:d5bfaaa901]ser caracteristica do Sql [/b:d5bfaaa901], o Porque de não se poder usar o mesmo Query Para Estas Duas Pesquisas se elas não sao [b:d5bfaaa901]SIMULTANEAS.. [/b:d5bfaaa901]..


Responder

Gostei + 0

28/11/2004

Carlosrm

Marco Salles,

veja se eu entendi sua pergunta:

Vc não precisa instanciar uma segunda query no formulário ou datamodule. Que me ocorre agora, você pode criar uma query temporária OU usar a mesma query que você já tem.
Usando a mesma query, vc pode executar o primeiro select e manipular os dados obtidos. Se esses dados forem necessários por mais tempo, vc pode passá-los para variáveis ou campos de uma tabela.
Em seguida, troque o conteúdo sql dessa mesma query, fazendo agora a segunda consulta. (use o .clear para limpar a sql anterior)
Só não se esqueça de fechar a query, andes de trocar o conteúdo sql.
Resumindo

...
query1.close;
query1.sql.clear;
query1.sql.add(suaprimeirasql);
query1.open;

// manipule os dados retornados, se for o caso.

query1.close;
query1.sql.clear;
query1.sql.add(suasegundasql);
query1.open;

// manipule os dados retornados, se também for o caso.

Note que essas duas queries não são executadas simultaneamente, mas em seguida.
Ainda como outra opção, vc pode ter dois botões, ambos ativando a mesma instância de TQuery, mas com sql diferentes. (A rigor, poderia ser um botão apenas, utilizando parâmetros...).

Há outras possibilidades... espero que isso possa ajudar...

carlosrm


Responder

Gostei + 0

28/11/2004

Gandalf.nho

O problema com a sua idéia é que você pode usar o mesmo objeto Query, mas como as 2 querys tem campos diferentes, você não pode criar em design-time os campos usando o FieldEditor, entendeu? Você terá que se referir dinamicamente, usando FieldByName.


Responder

Gostei + 0

29/11/2004

Marco Salles

carlosrm
Ainda como outra opção, vc pode ter dois botões, ambos ativando a mesma instância de TQuery, mas com sql diferentes. (A rigor, poderia ser um botão apenas, utilizando parâmetros...).


Não da amigo... Pode ter certeza... O problema e exatamente este:

O problema com a sua idéia é que você pode usar o mesmo objeto Query, mas como as 2 querys tem campos diferentes, você não pode criar em design-time os campos usando o FieldEditor


Eu Tenho que me referir dinamicamente usando o FieldByName. e não em tempo de projeto , usando o nome dos campo...

Isto eu ja tinha notado, mas eu so questionei , porque o delphi , não permite ter este recurso... :cry: :cry: :cry: :cry:

Então , eu nao crio o Campos a nivel de projeto e se eu precisar de acessar um campo eu o faço a nivel de execução (Com a instruçaõ : FieldByName.)

... Ai sim carlosrm, o que voce disse funcionará...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar