Locate nao acha nada, erro estranho... porque?

Delphi

14/08/2006

Olá amigos, tenhos um [b:4689a41c5d]IBDataSet[/b:4689a41c5d], e trago meus registros com o seguinte SQL:

select bn.*, b.idaluno from boletim_notas bn
left join boletim b on (b.idboletim = bn.idboletim)
where (b.idturma = :pturma) and (b.ano = :pano) and (bn.iddisciplina = :pdisc)


Beleza... passo todos os parâmetros, e me retorna algo em torno de 600 registros... tudo certinho, já verifiquei, quando tento dar este locate fala que não acha:

    if not TbBoletim.Locate(´IDALUNO´, TbNotaIDALUNO.AsInteger, [loCaseInsensitive]) then
      showmessage(´erro´);


Já vi lá... o IDALUNO vem no select, e já existe no DataSet do TbBoletim, e o TbNotaIDALUNO.ASInteger, traz um valor que está no select acima...


Por que nao quer funcionar? to fazendo algo de errado?


[]s


Titanius

Titanius

Curtidas 0

Respostas

Marco Salles

Marco Salles

14/08/2006

sem compromisso é so para começar a brincadeira

tente assim:

 if not TbBoletim.Locate(´IDALUNO´, TbNotaIDALUNO.AsString, [loCaseInsensitive]) then 
      showmessage(´erro´); 



GOSTEI 0
Titanius

Titanius

14/08/2006

Olá Marco,

Infelizmente não funcionou... :(

O campo em si, é integer...

[]s


GOSTEI 0
Siam

Siam

14/08/2006

Talvez seja pq o segundo parâmetro do locate requeira um Variant.
Tente colocar: TbNotaIDALUNO.Value


GOSTEI 0
Acacio

Acacio

14/08/2006

Tire a opção loCaseInsensitive deixa assim, pois é um inteiro e essa opção é para campos do tipo caracter.

if not TbBoletim.Locate(´IDALUNO´, TbNotaIDALUNO.Asinteger, []) then
showmessage(´erro´);


GOSTEI 0
Titanius

Titanius

14/08/2006

Até agora nada...

Tentei o Value e nada, tentei tirar o loCaseInsensitive e nada...


To achando estranho, alguem tem mais alguma ideia?


[]s


GOSTEI 0
Marco Salles

Marco Salles

14/08/2006

sinceramente , todas as respostas apresentadas , no meu entendimento deveria funcionar... So resta saber qual o valor exato de TbNotaIDALUNO.Asinteger nop momento antes de realizar a pesquisa

Coloque isto antes

showmessage(TbNotaIDALUNO.AsString);
if not TbBoletim.Locate(´IDALUNO´, TbNotaIDALUNO.Asinteger, []) then 
showmessage(´erro´);


e certifique que este valor esta mesmo na base a ser pesquisada...


GOSTEI 0
Jurandi

Jurandi

14/08/2006

Para LOCATE funcionar o valor a ser consultado deve ser to tipo VARARRAY.

if not TbBoletim.Locate(´IDALUNO´, VarArrayOf([TbNotaIDALUNO.Asinteger, []])) then
showmessage(´erro´);

Não esqueça de decarar a unit VARIANTS.

[]´ s


GOSTEI 0
Marco Salles

Marco Salles

14/08/2006

Para LOCATE funcionar o valor a ser consultado deve ser to tipo VARARRAY.


ate aonde eu sei , voce precisa usar um Array de Valores , quando for pesquisar vários campos simultaneamentes.


Ate mesmo o a Biblia de cantu usa o Locate [b:7070fcc3df]sem o VarArrayOf [/b:7070fcc3df], quando se pesquisa valores em apenas um Campo


GOSTEI 0
POSTAR