Locate não suporta campo calculado?

Delphi

10/10/2005

Olá, pessoal.

Está acontecendo um coisa q achei um pouco estranha. Qdo eu coloco no locate pra buscar um campo calculado ele dá erro dizendo q não é possível utilizar o campo em uma expressão de filtro ( :? ). Não sei o q fazer... Existe algum outro método q seja semelhante ao locate ou eu estou fazendo algo errado mesmo? Para q não fique dúvidas em relação ao me código, o q eu escrevi foi:

cdsTotalSemana.Locate(´campo_data;campo_calculated´,VarArrayOf([var1,var2]), []);


Obrigado pela atenção.


Lero

Lero

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

10/10/2005

Pelo que sei, o Locate só funciona em campos existentes fisicamente na tabela ou consulta de origem, ou seja, só funcionaria num campo calculado se fosse calculado já na consulta de origem (internal calc)


GOSTEI 0
Adriano Santos

Adriano Santos

10/10/2005

Pelo que sei, o Locate só funciona em campos existentes fisicamente na tabela ou consulta de origem, ou seja, só funcionaria num campo calculado se fosse calculado já na consulta de origem (internal calc)


Tah certo, o Locate não possibilita a pesquisa em campos calculados uma vez que eles são dependentes de Scroll, ou seja, sao atualizados de acordo com a movimentação do ponteiro.

Tente dar uma olhada nas funções

FindKey e FindNeareast, mas acredito que tenham a mesma dificuldade.


GOSTEI 0
Lero

Lero

10/10/2005

É... Pelo visto tem essa limitação mesmo. Talvez, por se tratar de um Client Dataset, se eu fizer com um intenal calc pode ser q funcione, mas tô resolvendo com um while mesmo pq internal calc tá dando problema de memória aqui.

Valew pela ajuda.


GOSTEI 0
Adriano Santos

Adriano Santos

10/10/2005

É... Pelo visto tem essa limitação mesmo. Talvez, por se tratar de um Client Dataset, se eu fizer com um intenal calc pode ser q funcione, mas tô resolvendo com um while mesmo pq internal calc tá dando problema de memória aqui. Valew pela ajuda.


tah, posta a resposta pra gente depois.

[]s


GOSTEI 0
Lero

Lero

10/10/2005

Adriano,

Não tem muito segredo a solução q eu fiz. Na verdade acho até um pouco ´porco´, mas não tive outra escolha. Qdo tentei utilizar o internal calc ele dá um erro dizendo q não há memória insuficiente para abrir o dataset. Então utilizei a técnica de ´scan´, q é a seguinte:

  with Dataset do
  begin
    First;
    achou := False;
    while not Eof do
    begin
      If (DatasetValor1.Value = Valor1) and (DatasetValor2.Value = Valor2) then
      begin
        achou := True;
        Break;
      end;
      Next;
    end;
  end;


Aí eu coloco o valor q quero buscar, se achar ele já vai estar na posição q eu kero no dataset e vai confirmar para uma condição o valor do boolean ´achou´. Dependendo do valor do ´achou´ o programa vai fazer um cálculo específico.
Como o dataset sempre terá, no máximo, uns 30 registros esse código não vai comprometer o desempenho. Mas pra quem tem um noção de complexidade de algoritimo vai perceber q ele não é muito eficiente, pois no case de ter uns 100.000 registros ele seria muuuuuito lento, principalmente se o registro q eu procuro estiver no fim do dataset. É por isso q acho uma solução meio porca, mas se o client dataset não permite fazer uma busca com os métodos internos, é a forma mais simples de fazer uma busca dos dados.

Valew pela atenção.


GOSTEI 0
Adriano Santos

Adriano Santos

10/10/2005

Então, concordo com você em relação a ser um pouco ´porca´, mas tomando por base o seu problema, acredito que seja realmente a unica solução.


GOSTEI 0
POSTAR