Delphi7 não compara string

Olá pessoal.
Bom dia.

Estou com 2 problemas e acredito que podem ajudar.
QQ ajuda é bem vinda

Uso o Delphi7 (componentes IB) e o firebird.

Esse método de localizar funcionava, com a biblioteca Zeos) mas agora tem problemas (estou usando IB pq o Zeos não funciona mais) e não descubro porque.

Vai lá a procedure Locate. (funciona e na outra tentativa, não encontra o registro… estranho

if frmPrincipal.TableCadAlunos.Locate('Nome_Aluno',EdNomeAluno.Text,[LOPARTIALKEY,LOCASEINSENSITIVE])then begin EdNomeAluno.Text:=frmPrincipal.TableCadAlunos.fieldByName('Nome_Aluno').AsString; EdNum.Text:=frmPrincipal.TableCadAlunos.fieldByName('Num_Aluno').AsString; EdAnoLetivo.Text:=frmPrincipal.TableCadAlunos.fieldByName('Ano_Letivo').AsString; EdSerie.Text:=frmPrincipal.TableCadAlunos.fieldByName('serie').AsString; EdBimestre.Text:=frmPrincipal.TableCadAlunos.fieldByName('bimestre').AsString; EdAlunoAtivo.Text:=frmPrincipal.TableCadAlunos.fieldByName('Ativo_(s/n)').AsString; Panel1.Caption:='Registro Encontrado.'; exit; end;

O segundo problema é esse:

Leio uma var x do banco assim (está lendo certinho no debug, se ‘S’ ou ‘N’

[code]x:=frmPrincipal.TableCadAlunos.fieldByName(‘Ativo_(s/n)’).AsString; //Se ativo ou não

Agora o x carrega, mas os Ifs não funcionam…No debug, passa direto pelos 2 ifs.
Se o x é ‘S’, ou ‘N’, dá para ver no debug, mas passa direto sem respeitar uma das condições .

if(x='S')then
begin
Panel7.Caption:='Registro "encontrado"';
panel7.Refresh;
exit;
end;
    if(x='N')then
    begin
    Panel7.Caption:='Aviso...Aluno não ativo"';
    panel7.Refresh;
    exit;
    end;
x:='';    //Inicializa a var (vazia)

[/code]

Tem certeza que o valor retornado do banco é só ‘S’ e ‘N’ (sem outros espaços), e que está em letras maiúsculas?

Olá ViniGodoy
Agradeço por responder.

Bem… deixei no Firebird um valor de caractér=2.
Se espaço em branco interfere, vou ter outro problema em localizar (alias, já esta dando esse problema) no campo Nome… as vezes acha e as vezes não.
Deixei o campo como lowcase, para registrar só minúsculas.

No campo S ou N, está eum maíúsculo em um campo Combobox.

O campo S (caracter, posso corrigir no Firebird para 1 caractér.

Mas e o nome do aluno???
Tenho que dar um tamanho tal que seja possível caber todos os nomes… (Deixei 60 caracteres)

Se o nome for menor que 60 caractéres, aí ficam espaços vazios tb… e na busca vai dar problemas. ( já está dando)

Eu usava ZEOS para conectar com Firebird e não havia esses problemas. Como não funcionam mais, estou usando IB, nativa do Delphi7, para não ficar na mão, mas estou tendo problemas com isso, (falta das manhas).

Pode ajudar?

Grde abraço e agradeço a resposta

Use o comando Trim para eliminar os espaços extras. Tem muitos bancos que tem essa mania de preencher os caracteres que falvam com espaços em branco.

No banco, faça as buscas de nome usando LIKE, para evitar que elas sejam muito severas.

Olá ViniGodoy
Bom dia…

O if que não estava funcionando com strings (if(x=‘N’) ou if(x=‘S’) o problema era o seguinte.
O campo no Firebird era: Ativo_(S/N). Eu estava usando caractérs especiais e não sabia que não podia. Mudei para Ativo_SN e os ifs funcionaram.

Quanto ao uso de comandos Trim e Like para a busca, vi uns exemplos na internet, mas parecem não estar corretos.

Pode dar um exemplo de como escrever esses comandos para busca?

Agradeço a resposta.
Grde abraço e um ótimo dia para vc.

Agradeço a atenção… as dicas são valiosas

O trim você usa caso o banco te retorne espaços em branco em excesso, mas pode usar do lado do Delphi mesmo:

O like é usado na query. Ao invés de escrever:

Você escreve:

O % na query indica que pode haver qualquer coisa após o nome. Ou seja, se você buscar por “Joao” ele vai achar o “Joao da Silva”, “Joao Maria”, etc…

Olá ViniGodoy

Maravilha.

Funcionou perfeitamente.
Te agradeço pela preciosa ajuda.
Grde abraço e um excelente dia para vc.

Quanto ao locate, verifique se sua tabela está ordenada por essa coluna, senão ele não funciona.