Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wilsoncrescencio

no uso de where com between

Recommended Posts

Eu desenvolvi uma consulta da seguinte maneira:

begin
ADQC_ponto.Close;
ADQC_Ponto.SQL.Clear;
ADQC_Ponto.SQL.Add('SELECT *');
ADQC_Ponto.SQL.Add('FROM curso');
ADQC_Ponto.SQL.Add('WHERE pontos ='+total.Text);
ADQC_PONTO.Open;
ADQC_PONTO.Active := TRUE;
end;
Acontece que na realidade os valores que devem ser mostrados são os que são =+total.text e menores que +total.text em uma tabela.

E 5 pontos acima de +total.text e 5 pontos abaixo de total.text.

 

Como faço isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça assim morpheu_negro

with ADQC_ponto do
begin
	Close;
   SQL.Clear;
	{// aki vai o começo do seu SQL}
   SQL.Add('WHERE');
   SQL.Add(		'PONTOS <= ' + total.Text); // menor ou igual ...
   SQL.Add(		'OR PONTOS = ' + StrToInt(total.Text) + 5); // qdo pontos for = 5 pontos acima
   SQL.Add(		'OR PONTOS = ' + StrToInt(total.Text) - 5); // qdo pontos for = 5 pontos abaixo
   Open;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo... como faço para me livrar deste erro?

 

[Error] U_Simulado.pas(297): Incompatible types: 'String' and 'Integer'

 

eu fiz assim:

begin
dm1.ADQCURSO.Close;
dm1.ADQCURSO.SQL.Clear;
dm1.ADQCURSO.SQL.Add('SELECT *');
dm1.ADQCURSO.SQL.Add('FROM curso');
dm1.ADQCURSO.SQL.Add('WHERE pontos ='StrToInt(total.Text) + 5); // qdo pontos for = 5 pontos acima);
dm1.ADQCURSO.Open;
dm1.ADQCURSO.Active := TRUE;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você esta tentando passar um valor integer para dentro de uma string, precisa converter antes, pode fazer:

 

 

begin
dm1.ADQCURSO.Close;
dm1.ADQCURSO.SQL.Clear;
dm1.ADQCURSO.SQL.Add('SELECT *');
dm1.ADQCURSO.SQL.Add('FROM curso');
dm1.ADQCURSO.SQL.Add('WHERE pontos =' + IntToStr(StrToInt(total.Text) + 5)); // qdo pontos for = 5 pontos acima);
dm1.ADQCURSO.Open;
dm1.ADQCURSO.Active := TRUE;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puxa vida... Novamente obrigado, você realmente entende disso... Eu gostaria de saber ou ter algo para auxilia-lo assim como você tem feito por mim

 

Quanto mais eu obtenho respostas para minhas dúvidas mais vejo que não sei nada e mais questões se fazem em minha mente...

 

Se você não quiser ou não puder responder não precisa...

 

Mas e se eu precisa-se visualizar os pontos entre 1 ponto a 5 pontos a mais que o total.text

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisando pode sempre contar conosco :D

 

No caso ai sim iria precisar do between, e delimitar os valores, digamos que informou no total.txt o valor de 5, pode fazer:

 

begin
dm1.ADQCURSO.Close;
dm1.ADQCURSO.SQL.Clear;
dm1.ADQCURSO.SQL.Add('SELECT *');
dm1.ADQCURSO.SQL.Add('FROM curso');
dm1.ADQCURSO.SQL.Add('WHERE pontos between ' + total.Text + ' and ' + IntToStr(StrToInt(total.Text) + 5)); // qdo pontos for = 5 pontos acima);
dm1.ADQCURSO.Open;
end;

Uma dica, quando usar o .Open, não precisa usar o Active:=True em seguida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica e pelas informações...

O Forum Imasters - Delphi é atípico até em relação às outras categorias. E isso se deve aos moderadores como você.

Dificilmente uma dúvida fica sem ser resolvida.

Ou algum membro fica sem resposta.

Vocês aqui do Delphi estão realmente de parabéns, pela educação, solícitude e presteza...

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.