Between com Strings
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
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
Curtidas 0
Respostas
Rjun
31/05/2005
Você teria que alterar o caracter para caracter + 1(Ex. C para D).
GOSTEI 0
Beppe
31/05/2005
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.
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.
GOSTEI 0
Cristianojedi
31/05/2005
Como que eu faço isso Rjun???
GOSTEI 0
Rjun
31/05/2005
Você esta utilizando SQLSERVER, então vou supor que você esta utilizando ADO. Se não está, deveria.
É mais ou menos isso daí.
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í.
GOSTEI 0
Cristianojedi
31/05/2005
Boa Rjun... Funcionou!!!
Muito obrigado!!!
Cristiano Mário
Muito obrigado!!!
Cristiano Mário
GOSTEI 0