Lookup de Consulta com UNION

(Charles Henrique) #1

Olá Amigos. Sou iniciante com o ScripCase e me deparei com um problema que não sei se é do ScriptCase ou se estou fazendo algo errado. Acredito que outros membros podem ter passado por este mesmo problema, conforme descrito abaixo.

Possuo uma consulta aonde tenho um campo do tipo número, e preciso exibir para o usuário o nome daquele cliente em vez de exibir este número. Só que eu preciso fazer a busca deste nome em duas tabelas diferentes, pois eu tenho duas classificação de clientes. Para isto usei o recurso do UNION. No MySql eu testei e me retornou os resultados corretos, agora no Lookup de consulta do campo no criptcase ele só aparece o código do cliente. Abaixo está descrito o código que estou utilizando no lookup.

SELECT
nome_cliente
FROM
cbs_cliente
WHERE cod_entidade_geral = {cod_entidade_geral_contratada}
UNION
SELECT
nome_prestadora as nome_cliente
FROM
cbs_prestadora
WHERE cod_entidade_geral = {cod_entidade_geral_contratada}

Alguém poderia me ajudar a solucionar este problema?

(system) #2

Experimente colocar no seu select o código e a descrição do cliente:
select CODIGO, NOME from TABELA

(Charles Henrique) #3

Desta forma não funciona. Eu já tenho salvo no banco de dados o código do cliente. Este procedimento que estou fazendo é um lookup de consulta, ou seja, o dado que aparece na consulta para o usuário é o código do cliente. Estou fazendo este lookup justamente para em vez de aparecer o código para o usuário, irá aparecer é o nome do cliente para ele. O único problema é que tenho duas classificações diferentes de clientes. Então preciso buscar na tabela cliente o nome dele referente aquele código que está cadastrado ou pode ser um prestador que se encontra em outra tabela do banco de dados. O meu problema é justamente em fazer esta busca nas duas tabelas. No banco de dados este select funciona perfeitamente, só não funciona no lookup em uma consulta no scriptcase, tanto no grid como no filtro da consulta.

(system) #4

Não entendi muito bem, você está com dificuldade de identificar de qual tabela é o registro que está sendo mostrado?

(Charles Henrique) #5

Acredito que não tenha entendi o problema. Eu sei quais tabelas tenho que buscar os dados, que na verdade são as duas tabelas.

Tentarei explicar mais. Falando sobre o banco de dados. O banco ele é composto por uma tabela “entidade” que representa uma super-classe. Desta super classe eu tenho os Clientes e os Prestadores que herdam desta tabela.

Estou fazendo uma consulta. Nesta consulta ela me retorna por exemplo os dados de uma solicitação de um serviço feio por uma “entidade” que pode ser um cliente ou um prestador. Nesta consulta ela vai aparecer somente o código da “entidade” que está cadastrado no banco para aquela solicitação que ela fez. Podendo ser um código de um cliente ou de um prestador. Para não exibir este código na consulta para o usuário do sistema, que não irá servir para nada, preciso exibir o nome do cliente ou do prestador. Para isso estou utilizando um select nas configurações do campo, no local aonde coloca o select do lookup. Este select precisa pegar o nome do cliente ou do prestador que podem estar em duas tabelas diferentes. Por isso estou usando a função UNION, só que o meu problema é justamente que ela não estão funcionando no scriptcase. Mas sei que ela funciona no scriptcase porque tenho outras funções desta no meu sistema funcionando, só que o único detalhe é que elas não possuem cláusula Where igual está que estou fazendo agora.

(system) #6

Verificando sua SQL não vejo nada de errado, eu faço um de três tabelas e funciona corretamente,
pode ser no where o problema.

Existe uma opção no SC (Aplicação->Configuração->Configuração de Erro->Modo DEBUG) que mostra a SQL na tela em tempo real. Talvez lhe ajude!

(Haroldo) #7

no lookup precisa ter sempre 2 colunas no select, repita o nome do cliente.

(Charles Henrique) #8

Também não funcionou com os dois campos no select.

SELECT
nome_cliente, nome_cliente
FROM
cbs_cliente
WHERE cod_entidade_geral = {cod_entidade_geral_contratada}
UNION
SELECT
nome_prestadora, nome_prestadora as nome_cliente
FROM
cbs_prestadora
WHERE cod_entidade_geral = {cod_entidade_geral_contratada}

(William .'.) #9

Charles Henrique,

Acho que entendi sua dúvida, vamos lá…

O UNION está correto, na verdade vc tem um campo na consulta ({cod_entidade_geral_contratada}) que serve de referencia para o WHERE, assim … vc deve fazer uma recarga via javascript no formulario após digitar o valor do campo ({cod_entidade_geral_contratada}) para que o loockup também seja carregado com os novos valores da clausula WHERE.

Bom, se entendi bem acredito que vai dar certo …

WSCA.:

(Charles Henrique) #10

William,

O campo ({cod_entidade_geral_contratada}) é o que já está salvo no banco de dados. Estou fazendo é uma consulta, então não acontecem entrada de dados. Eu simplesmente quero em vez de mostrar o código da contratada que já aparece na consulta, eu quero mostrar o nome da contratada.

Desta forma que me falou talvez funcione em um formulário. Pois na consulta não temos a opção de usar javascrip.

(William .'.) #11

Charles Henrique,

Não me atentei que vc estava em uma consulta, qual a versão do SC vc está ?? estou fazendo ums testes aqui com a versão 0030 e estou recebendo o resultado esperado.

Se preferir pode mandar p mim a consulta e a definição das tabelas que dou uma olhada se posso ajudar.

WSCA.: