Ajuda em uma Consulta Sql
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 :
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...
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
Curtidas 0
Respostas
Gandalf.nho
26/11/2004
SELECT Status FROM nome_tabela
GROUP BY Status
GROUP BY Status
GOSTEI 0
Marco Salles
26/11/2004
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 :?: :?: :?:
GOSTEI 0
Gandalf.nho
26/11/2004
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...
GOSTEI 0
Marco Salles
26/11/2004
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... :?: :?: :?: :?:
GOSTEI 0
Gandalf.nho
26/11/2004
O problema não é o Delphi, isso é uma característica do SQL.
GOSTEI 0
Marco Salles
26/11/2004
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]..
GOSTEI 0
Carlosrm
26/11/2004
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
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
GOSTEI 0
Gandalf.nho
26/11/2004
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.
GOSTEI 0
Marco Salles
26/11/2004
carlosrm
Não da amigo... Pode ter certeza... O problema e exatamente este:
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á...
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á...
GOSTEI 0