Fórum Como posso selecionar item de uma tabela via SQL ? #255073

19/10/2004

0

Boa tarde a todos do forum, gostaria de saber como posso selecionar os dois primeiros registros de uma tabela Ex:
veja a minha SQL q Montei :

Select First 2 OrdemProducao.CodOrdemProducao from OrdemProducao

Bom Ultilizao delphi 7 e Interbase ( palheta do Delphi ) . IBQuery.

Bom agradeço pela ajuda.....Obrigado !!!


walterfoliveira@hotmail.com


Walter Faria

Walter Faria

Responder

Posts

19/10/2004

Vinicius2k

Colega,

A sintaxe está correta...
select first <quantidade> <campos> from <tabela>


Mas o FIRST depende do Banco de Dados... O IB 6.0 não possui esta funcionalidade, o IB 6.5 e 7.x possui, mas a instrução e sintaxe são diferentes (ROWS), o Firebird 1.0.x *acho* que possui (não me recordo ao certo), o Firebird 1.5.x, com certeza possui...

Qual é o Servidor usado? Ocorre algum erro ?

T+


Responder

Gostei + 0

20/10/2004

Walter Faria

a minha IBQuery1 esta montada da seguinte forma :

Select First 2 CodOrdemProducao from ordemproducao


msg de erro : Dynamic SQL error code = - 104
Tokey Unknown - line 1, char 13
1.


Responder

Gostei + 0

20/10/2004

Vinicius2k

Vc não disse qual o banco de dados que está utilizando... como eu disse, poder ou não usar o FIRST depende do banco...

A coluna CodOrdemProducao realmente existe na tabela ?

T+


Responder

Gostei + 0

22/10/2004

Walter Faria

Bom dia , Vinicius2K . desculpa esquece de postar que o banco que eu uso é firebird 1.5. OBS : tem algum problema eu o banco com o interbase 6 ? A os campos da minha tabela ORDEMPRODUCAO :

´QUANTIDADE´ FLOAT,
´CODORDEMPRODUCAO´INTEGER NOT NULL,
´DATAENTREGA´ TIMESTAMP,
´CODITEMPEDIDOVENDA´INTEGER,
´CODPRODUTO´ INTEGER,
´STATUSATUAL´ SMALLINT,
´CODORDEMPRODUCAOPAI´INTEGER,

Bom obrigado pela atenção ....valeu...


Responder

Gostei + 0

22/10/2004

Vinicius2k

Olá !

Não seria um problema o banco no IB 6, apenas vc não pode usar o FIRST pq esta funcionalidade não está presente nele.

Foi bom vc postar a estrutura da tabela, pq observei as aspas...
Sempre que vc usar aspas na criação dos objetos do banco (tabelas e colunas neste caso), vc precisa utilizá-las na instrução SQL e, dependendo da camada de acesso, as maiúsculas e minúsculas também fazem diferença...

Tente assim :
select first 2 "CODORDEMPRODUCAO" from "ORDEMPRODUCAO"


T+


Responder

Gostei + 0

22/10/2004

Walter Faria

Boa tarde, vinicius2k ....

entao qdo postei a estrtura doi BD , aparece com aspas pq eu copiei da subpasta ( METADA ) do interbase, bom mesmo assim tentei da forma q vc me falou, pois continua o mesmo ERRO.
Bom é o seguinte cara , o quero fazer no meu sistema é selecionar as duas ultimas Ordem de Producao, para incluir o NR dela numa terceira Ordem de Producao do Cliente ( Tipo pra compara com as dus ultimas OPS ) anteriores.....
Entao tava pensando ate fazer WHILE....valeu pela ajuda..se puder me ajudar nesta : veja a SQL antiga que vou ter que adaptar :

Select First 2 OPAnt.CodOrdemProducao from ordemproducao OPAnt Left join
itempedidovenda ipv on IPv.CodItemPedidoVenda = OPant.CodItemPedidoVenda
where Opant.StatusAtual = 6 and ((OPAnt.CodProduto = :CodProd) or
Ipv.CodProduto = :CodProd) Order By OpAnt.Dataentrega Desc



*** este status 6 - indica q Ordem de producao anterior esteja pronta
Bom, muito obrigado....


Responder

Gostei + 0

22/10/2004

Vinicius2k

Colega,

Se esta for a SQL completa que vc está tentando aplicar, vejo duas coisas :
1. Me parece que há uma incoerência no Join (Left) pq vc está deixando à esquerda a coluna da tabela secundária... mas isso não posso garantir, depende do contexto...
2. Falta um parentesis fechando a uma condição do WHERE.
Esta seria a minha instrução :
select first 2 
  OP.CODORDEMPRODUCAO
from 
  ORDEMPRODUCAO OP 
left join
  ITEMPEDIDOVENDA IP on (OP.CODITEMPEDIDOVENDA = IP.CODITEMPEDIDOVENDA)  
where 
  (OP.STATUSATUAL = 6) and
  ((OP.CODPRODUTO = :codprod) or (IP.CODPRODUTO = :codprod))
order by 
  OP.DATAENTREGA desc 


Espero ter ajudado agora...
T+


Responder

Gostei + 0

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

Aceitar