Fórum Locate nao acha nada, erro estranho... porque? #327381

14/08/2006

0

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

Responder

Posts

14/08/2006

Marco Salles

sem compromisso é so para começar a brincadeira

tente assim:

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



Responder

Gostei + 0

14/08/2006

Titanius

Olá Marco,

Infelizmente não funcionou... :(

O campo em si, é integer...

[]s


Responder

Gostei + 0

14/08/2006

Siam

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


Responder

Gostei + 0

14/08/2006

Acacio

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´);


Responder

Gostei + 0

14/08/2006

Titanius

Até agora nada...

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


To achando estranho, alguem tem mais alguma ideia?


[]s


Responder

Gostei + 0

14/08/2006

Marco Salles

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...


Responder

Gostei + 0

20/08/2006

Jurandi

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


Responder

Gostei + 0

21/08/2006

Marco Salles

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


Responder

Gostei + 0

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

Aceitar