Array
(
)

Consulta Intervalos Inteiro com Query

Tornadofuracao
   - 20 set 2004

Caros Amigos

Tenho uma tabela DBF, nesta tabela tenho os campos (Nome, CodINI e CodFIM)do tipo Inteiro.

Ex:

cadastro o CodINI = 1 e CodFim = 10

Nome CodINI CodFIM
Joao 1 10
mario 11 16
fernando 33 47

como posso fazer em uma query uma consulta que :

* se eu digitar no edit o valor 3 ele me moste no DBGrid o registro que contem o CodINI = 1 e codFIM = 10 que sera o Joao


Paulo_amorim
   - 20 set 2004

Olá

Eu testei um jeito que aqui funcionou... curioso até :)


SELECT * FROM tabela
WHERE :p1 BETWEEN CodINI and CodFIM

Espero que ajude
Até+


Tornadofuracao
   - 20 set 2004

o que e o ( p1 )?


Djjunior
   - 20 set 2004

p1 como foi posto (o bde/ado adotam que toda palavra que seja precedida de ´:´ é um paramêtro - que só pode ser usado na clausula where) é um parametro que vc deve setar antes de abrir sua query ficaria algo assim

considerando que query sugerida pelo
Paulo_Amorim se chame qryIntervalo faça

#Código


qryintervalo.Close;
qryintervalo.parambyName(´´).asinteger := seunumero;
qryintervalo.open;


dê uma pesquisada no help sobre parametros vc vai ver que são muuuito utieis. :wink:


Tornadofuracao
   - 20 set 2004

caro amigo fiz deste modo mais da erro onde estou errando por favor

QrConNfIniFin.Close;
QrConNfIniFin.sql.add(´SELECT * FROM CadDocu WHERE :P1 BETWEEN NLivrINI and NLivrFin´);
QrConNfIniFin.ParambyName(´P1´).AsInteger := StrToInt(Edit1.text);
QrConNfIniFin.open;


Paulo_amorim
   - 20 set 2004

Olá

Que erro ele retorna? Daí poderemos saber...

Eu testei em banco ORACLE e funcionou...


Citação:
p1 como foi posto (o bde/ado adotam que toda palavra que seja precedida de ´:´ é um paramêtro - que só pode ser usado na clausula where)

Junior, o parâmetro pode ser usado em qualquer lugar da Query, não soh na cláusula where :wink:


Tornadofuracao
   - 20 set 2004

o erro e esse
Invalid use of keyword
token : Select
line Number :3


Tornadofuracao
   - 20 set 2004


Citação:
o erro e esse
Parameter not set in query string





Djjunior
   - 20 set 2004

o erro tá em
QrConNfIniFin.sql.add
use
QrConNfIniFin.sql.text

ou depois do close dê um sql.clear;

vc realmente precisa ficar mudando essa query ?


Paulo_amorim
   - 20 set 2004

Olá

Tente dar um Active = True em tempo de desenvolvimento (coloque a sintaxe no componente) e veja se dá erro...
Se não, ta na programação mesmo

Até+


Djjunior
   - 20 set 2004

o Paulo_Amorim tá certo derrepente tb é a query que tá errada, só que pra ativar uma query com parameto vc tem que setar o tipo/valor pra ele em tempo de projeto mesmo.


Djjunior
   - 20 set 2004


Citação:
Olá

Que erro ele retorna? Daí poderemos saber...

Eu testei em banco ORACLE e funcionou...


Citação:
p1 como foi posto (o bde/ado adotam que toda palavra que seja precedida de ´:´ é um paramêtro - que só pode ser usado na clausula where)

Junior, o parâmetro pode ser usado em qualquer lugar da Query, não soh na cláusula where :wink:


Pode :?: Já havia visto mesmo em outros tópicos aqui no fórum de gente que tentou no ´from´ e não deu certo, no ´have´ acredito que funcione, nos demais realmente nunca testei, mas acredito que ñ funcione, aqui na empresa mesmo teve querys que tivemos que usar parametros mais complexos ou fora do where e tivemos que usar o esquema de macro (só que ai usamos o RXQuery :) )

se pode realmente me desculpem a ignorância, vou fazer uns testes aqui pra ver como funciona.


Tornadofuracao
   - 21 set 2004

Caros amigos

muito obrigado por vc´s estarem tentando me ajudar.

escrevi este codigo:

QrConNfIniFin.Close;
QrConNfIniFin.sql.clear;
QrConNfIniFin.sql.Add(´SELECT * FROM CadDocu WHERE NLivrINI >= : P1 and NLivrFin <= : P2´);
QrConNfIniFin.parambyName(´P1´).AsInteger := StrToInt(Edit1.Text);
QrConNfIniFin.parambyName(´P2´).AsInteger := StrToInt(Edit1.Text);
QrConNfIniFin.open;

So para ficar mas escalarecido :
gostaria de digitar o valor 3 em um Edit e clicar em um Button ele me mostar em um DBGrid o registro Mario, por que ele vai do 1 ao 10

Mais o mesmo nao me retorna nada no DBGrid, tentei o Text no lugar do Add e nao funcionou.

a estrutura de minha tabela e esta:
nome..............NLivrIni...............NLivrFin
Mario.................1........................10
Ana...................15.......................20
Tereza...............26.......................30
Fernanda...........31........................40

NLivrIni e NLivrFin são do tipo Inteiro
Tabela (DBF)


Beppe
   - 21 set 2004

Vc está pedindo um livro com NLivrFin menor do que NLivrINI. Basta inverter a comparação ou os operandos.

#Código

SELECT * FROM CadDocu WHERE :P1 >= NLivrINI and :P1 <= NLivrFin


PS: Se P1 = P2, vc não precisa de P2.


Tornadofuracao
   - 21 set 2004

Caros Amigos do Mundo Delphi

Aqui fica meus agradecimentos pela ajuda que foi de grande importância para mim.

pois meu objetivo foi atingido valeu........

Que Deus Abençoe a todos.