Fórum Dúvidas com order by #318553

06/04/2006

0

Pessoal!

Estou usando o seguinte comando

select P.NOME AS PROD_NOME, P.EDICAO, P.PRECO, B.REPARTE, B.ENCALHE, B.COD_BANCA from BANCAS B

inner join
PRODUTO P on (B.COD_PRODUTO=P.COD_PRODUTO)

inner join
SAIDAS S on (S.COD_PRODUTO=P.COD_PRODUTO)

where
S.NOTA=:p1 and
B.BANCA=:p2

order by PROD_NOME

ao rodar obtenho a seguinte mensagem ´Column unknown PROD_NOME´. O erro ocorre no order by. Alguém tem uma idéia para resolver este problema sem utilizar P.NOME ? Uso Firebird e delphi 5. Grato...


Luis.wolff

Luis.wolff

Responder

Posts

06/04/2006

Osocram

Amigo...
select P.NOME AS PROD_NOME

Prod_name eh um alias d como o select vai t devolver o nome do campo... mas o nome do campo eh P.Nome enton no order by tem q estar o nome.

Oq vc pode tentar fazer eh colocar numero se referindo a coluna.

Por exemplo P.Nome eh o primeiro campo no seu select enton ele vai ser a primeira coluna da sua consulta.. enton vc pod tentar fazer
Order by 1

non lembro se comeca c 1 ou c 0
eh so testar...

Ou se vc puder explicar o pq d non quer usar o P.Nome no order by... talvez alguem aqui possa t dar uma ideia.


Responder

Gostei + 0

07/04/2006

Luis.wolff

Obrigado pela força... não posso usar P.NOME porque estou fazendo uma rotina genérica através de

oPesqFProd:=TPesqFProd.create(self);
oPesqFProd.sSQL:=´select ´+
´P.RECOLHIDA, ´+
´P.NOME, ´+
´P.EDICAO, ´+
´P.PRECO, ´+
´P.ESTOQUE, ´+
´E.REPARTE, ´+
´E.CUSTO, ´+
´E.NOTA AS NT_ENTRA, ´+
´E.DATA AS DT_ENTRA, ´+
´S.NOTA AS NT_SAI, ´+
´S.DT_DEV AS DT_SAI, ´+
´S.DT_REC AS RECOLHIMENTO, ´+
´G.DESCRICAO ´+
´from PRODUTO P ´+
´inner join ENTRADAS E on (E.COD_PRODUTO=P.COD_PRODUTO) ´+
´left outer join GENERO G on (G.COD_GENERO=P.GENERO) ´+
´left outer join SAIDAS S on (S.COD_PRODUTO=P.COD_PRODUTO)´;

oPesqFProd.show;

lá nessa rotina uso um dualListBox (componente Jedi) para ordenar os dados através da rotina

Search2.text:=´´;
Search1.text:=´´;
sOrdem:=´´;
Dg.list2.Clear;
Dg.List1:=Query1.FieldList;
dg.Sorted:=false;
dg.Execute;
while i<dg.List2.count do
begin
sOrdem:=sOrdem+dg.List2.strings[i];
inc(i);
if i=1 then
Comb1.ItemIndex:=Comb1.Items.IndexOf(dg.List2.strings[0])
else if i=2 then
Comb2.ItemIndex:=Comb2.Items.IndexOf(dg.List2.strings[1])
else if i=3 then
Comb3.ItemIndex:=Comb3.Items.IndexOf(dg.List2.strings[2]);
if i<dg.List2.count then
sOrdem:=sOrdem+´, ´;
end;
Query1.close;
Query1.SelectSQL.clear;
if dg.List2.count>0 then
Query1.SelectSQL.Add(sSQl+´ order by ´+sOrdem)
else
Query1.SelectSQL.Add(sSQl);
Query1.open;

Só que na lista não aparece o ´P.´, somente o campo ´NOTA´, que existe na tabela ENTRADA e na tabela SAIDA. Quando tento ordenar recebo uma mensagem de erro por ter dois campos com mesmo nome. resolví o problema usando ´AS´, mas aí deu problema no ´ORDER BY´. Em tempo: A rotina anterior usando P.NOME usei apenas para exemplificar.


Responder

Gostei + 0

07/04/2006

Osocram

certo.. eu testei o order by c numero e funcou....

vc pod fazer isso usando o Index do Dual List Box

so q o Index do Order by comeca c 1.

Ou vc pod tentar ver o nome do campo lah na query... non estou c o delphi aqui aberto.. mas se non me engano tem uma propriedade q mostra o nome do campo.


Se vc tivesse usando ClienteDataSet poderia apenas setar o campo q vc quer como Index.. dae ele jah ordenaria tbm... sem ter q passar um sql.

Mas acho q a primeira solucao deve resolver o seu prob.


Responder

Gostei + 0

07/04/2006

Luis.wolff

Osocram.. sou meio novo no delphi... estou usando um IBDataSet e não ví na paleta InterBase o ClientDataSet... como que funciona isso? Em que paleta tá esse componente?


Responder

Gostei + 0

07/04/2006

Paullsoftware

Pessoal! Estou usando o seguinte comando select P.NOME AS PROD_NOME, P.EDICAO, P.PRECO, B.REPARTE, B.ENCALHE, B.COD_BANCA from BANCAS B inner join PRODUTO P on (B.COD_PRODUTO=P.COD_PRODUTO) inner join SAIDAS S on (S.COD_PRODUTO=P.COD_PRODUTO) where S.NOTA=:p1 and B.BANCA=:p2 order by PROD_NOME ao rodar obtenho a seguinte mensagem ´Column unknown PROD_NOME´. O erro ocorre no order by. Alguém tem uma idéia para resolver este problema sem utilizar P.NOME ? Uso Firebird e delphi 5. Grato...


se vc colocar
Order By 1
funciona perfeitamente ou então
Order By P.Nome
ou
Order By Produto.Nome


quando a
[quote:98abb7e168]Osocram.. sou meio novo no delphi... estou usando um IBDataSet e não ví na paleta InterBase o ClientDataSet... como que funciona isso? Em que paleta tá esse componente?
[/quote:98abb7e168]
na Paleta DataAccess tem o [b:98abb7e168]ClientDataSet [/b:98abb7e168]e na Paleta Interbase tem o [b:98abb7e168]IbClientDataSet[/b:98abb7e168]


Responder

Gostei + 0

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

Aceitar