Locate não suporta campo calculado?
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:
Obrigado pela atenção.
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
Curtidas 0
Respostas
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
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
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.
Valew pela ajuda.
GOSTEI 0
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
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:
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.
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
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