Como posso selecionar item de uma tabela via SQL ?
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
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
Curtidas 0
Respostas
Vinicius2k
19/10/2004
Colega,
A sintaxe está correta...
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+
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+
GOSTEI 0
Walter Faria
19/10/2004
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.
Select First 2 CodOrdemProducao from ordemproducao
msg de erro : Dynamic SQL error code = - 104
Tokey Unknown - line 1, char 13
1.
GOSTEI 0
Vinicius2k
19/10/2004
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+
A coluna CodOrdemProducao realmente existe na tabela ?
T+
GOSTEI 0
Walter Faria
19/10/2004
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...
´QUANTIDADE´ FLOAT,
´CODORDEMPRODUCAO´INTEGER NOT NULL,
´DATAENTREGA´ TIMESTAMP,
´CODITEMPEDIDOVENDA´INTEGER,
´CODPRODUTO´ INTEGER,
´STATUSATUAL´ SMALLINT,
´CODORDEMPRODUCAOPAI´INTEGER,
Bom obrigado pela atenção ....valeu...
GOSTEI 0
Vinicius2k
19/10/2004
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 :
T+
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+
GOSTEI 0
Walter Faria
19/10/2004
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....
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....
GOSTEI 0
Vinicius2k
19/10/2004
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 :
Espero ter ajudado agora...
T+
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+
GOSTEI 0