Pesquisar com Campos em Lookup

Tenho aplicação grid, e tenho vários campos que não estão na base, puxo eles por lookup em outra base, um exemplo é o campo cpf, busco de outro banco, a questão é que quero buscar pelo número do cpf na grid, e ele não busca. Alguém sabe como resolver isto?

Você pode criar um campo no filtro (nome do campo deve ser diferente da grid ex: CPF na grid CPF_FILTRO no filtro) e no evento onScriptInit da Grid verificar
if(!empty({CPF_FILTRO}))
{
sc_select_where(add) = " AND CAMPOCHAVE IN (SELECT PARA TABELA CPF QUE RETORNA O CAMPO CHAVE WHERE CPF = ‘{CPF_FILTRO}’) ";
}

E assim por diante.

Mas a questão que a grid está saindo de uma banco(Mysql) e o lookup que estou fazendo para o cpf é outro(Firebird), como ficaria então o “SELECT PARA TABELA CPF QUE RETORNA O CAMPO CHAVE WHERE CPF = ‘{CPF_FILTRO}’”?

O problema é que na grid possui campos que são daquele banco de dados(Mysql), mas tem campos que faço um lookup em outro banco(Firebird), o que ocorre que na pesquisa rápida quando faço uma busca de um dos campos que possui lookup, ele diz que não existe, e eu percebi que quando clico em cima do título da coluna da grid para ordenar, ele parece que faz a ordenação não em cima do nome, mas em cima da id daquele lookup, imagino que não faz busca pelo nome que aparece também, mas em cima da id, e preciso que a busca rápida funcione pelo nome, afinal ninguém vê id, e não tem como deixar isto…

a pesquisa rapida so vai funcionar em cima das tabelas do select principal da grid

Sabe me dizer como posso disponiblizar uma pesquisa para o usuário? Se a pesquisa rápida não funciona…?

Nesse caso você terá que adicionar o campo cpf ao seu banco mysql a usar ele.

Teste a pesquisa rápida selecionando menos campos (no caso apenas o CPF).

Fiz isto, não funcionou…

qual a chave de ligação mysql para firebird pegando o cpf?

A ligação de tudo é feita através da chave primária da tabela cliente, tenho uma tabela no Firebird, CAD001 que possui todas as informações do cliente, nome, cpf, celular… e em outros lugares, no outro banco(mysql) eu puxo a id, quando eu preciso de outras informações faço um lookup comparando a id do cliente, e chamo a informação que quero.

Só se vc mudar essa consulta para ser do firebird e trazer alguns lookups do mysql.
Assim os campos do filtro pode ser do firebird.

Eu até fiz outra consulta da forma que você falou, mas eu também terei consultas dos campos que tem no mysql, aí terei a mesma situação… cairei no mesmo problema…?

Bom acho que a melhor solução é repetir os dados nas bases diferentes mesmo.
Tipo campo CPF nas 2 bases…

Eu fiz isto também, mas não funcionou, e fazendo o lookup em cima do campo

Até faria se eu soubesse uma forma automática de manter a informação nos dois bancos, observando que uso o scriptcase no windows, isto para alguma sugestão…

Coloque o campo CPF e demais no banco mysql, tire o lookup para base firebird (todos campos que possam vir de lá)
Em quicksearch selecione apenas os campo que pode-se pesquisar (ex: nome, cpf, etc) para não dar nenhum conflito

Você tem um formulário que mantém as informações pelo Scriptcase ou por um outro programa?

Se for SC, no evento onAfterUpdate faça um sc_exec_sql que atualiza a outra base também.

As informações são atualizadas por outro programa, que no caso é em delphi e firebird, o scriptcase utilizo para dar a informação com um tratamento como este que estou tentando fazer. Sabe como me ajudar amigo? Ou uma alternativa? Isto está me dando muito problema, um projeto que está agarrado só por este problema, pois preciso desta consulta funcionando… tenso mesmo…

Bom pelo que vejo a solução seria o seguinte:

  • colocar todos os campos necessários na base mysql
  • no OnScriptInit da consulta fazer um método deleta todos os registros do mysql, seleciona todos do firebird e insere no mysql, dessa maneira mantendo sempre as bases iguais e claro se o usuário trocar algo no firebird, ao acessar o relatório os dados serão atualizados.