Fórum Between com Strings #283525

31/05/2005

0

Boa tarde, turma!!!

Estou com um problema.
Tenho um relatório que possui um filtro, dois combos, que filtra os caras que começam o nome com a letra A até os caras que começam o nome com a letra Z. Tenho uma query (ver abaixo) que possue um BETWEEN de Strings. Quando eu faço o filtro, por exemplo de A a C, o relatório não traz os caras que começa o nome com a letra C. Só trás os caras que começa o nome com as letras A e B.

l := ´LS´;
with qryID do
begin
Close;
SQL.Clear;
SQL.add(´select * from cad_prog´);
SQL.Add(´where programa = :pro´);
SQL.Add(´and nome between ´ + QuotedStr(p1.Text + ´¬´) + ´´);
SQL.Add(´and ´+ QuotedStr(p2.Text + ´¬´) + ´´);
SQL.Add(´and id_prog like´ + QuotedStr(compl.Text));
SQL.Add(´and status_desliga like´+ CHR(39) + ´A´ + CHR(39) + ´´);
SQL.Add(´order by NOME´);
qryID.ParamByName(´pro´).Value := l;
Open;
if IsEmpty then
begin
Application.MessageBox(´Não existem dados para estas especificações.´,
´Informação...´, MB_OK + MB_ICONINFORMATION);
Abort;
end;


Como que eu faço para pegar inclusive os caras com a letra C???

Estou usando D7 e SQL Server...

Abraços!!!

Cristiano Mário


Cristianojedi

Cristianojedi

Responder

Posts

31/05/2005

Rjun

Você teria que alterar o caracter para caracter + 1(Ex. C para D).


Responder

Gostei + 0

01/06/2005

Beppe

A não ser que o SQL Server seja bizarro, não pode ser usado curingas no between. Não está funcionando pq ´Carlos´ aparece depois no dicionário que ´C¬´.

A dica do Rjun resolve seu problema parcialmente, já que retorna também alguém chamado D, e fica mais complicado se for mais de uma letra(e.g. ´CA´).

Também pode optar por usar <= e >=, mas o resultado será o mesmo.


Responder

Gostei + 0

01/06/2005

Cristianojedi

Como que eu faço isso Rjun???


Responder

Gostei + 0

01/06/2005

Rjun

Você esta utilizando SQLSERVER, então vou supor que você esta utilizando ADO. Se não está, deveria.

var
  c1: char;
begin
  // Retorna o primeiro caracter da string
  c1 := p2.Text[1];

  // Pega o código ASCII de c1, acrescenta 1 e retorna o char correspondente
  c1 := Chr(Ord(c1) + 1);

  qryID.SQL.Clear; 
  qryID.SQL.add(´select * from cad_prog´); 
  qryID.SQL.Add(´where programa = :pro´); 
  qryID.SQL.Add(´and nome between :param1 and :param2´)
  qryID.SQL.Add(´and id_prog like :param3´)
  qryID.SQL.Add(´and status_desliga like´´A´´)  
  qryID.SQL.Add(´order by NOME´); 
  qryID.Parameters.ParamByName(´param1´).Value = p1.Text;
  qryID.Parameters.ParamByName(´param2´).Value = c1;
  qryID.Parameters.ParamByName(´param3´).Value = compl.Text;
  qryID.Parameters.ParamByName(´pro´).Value := ´LS´; 
  try
    qryID.Open;
    if qryID.IsEmpty then 
      Application.MessageBox(´Não existem dados para estas especificações.´,  ´Informação...´, MB_OK + MB_ICONINFORMATION)
     else
         // Mostra o resultado da consulta
  finally 
    qryID.Close;
end;


É mais ou menos isso daí.


Responder

Gostei + 0

01/06/2005

Cristianojedi

Boa Rjun... Funcionou!!!

Muito obrigado!!!

Cristiano Mário


Responder

Gostei + 0

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

Aceitar