Query - Problema com UNION? (Socorro)

Delphi

20/11/2003

Estou com problema em uma query que executo para gerar um relatório.
A mensagem que aparece é esta:
´CURSOR not on SELECT statement.´

Faço union com 3 sql. Não sei como isso é feito pelo Delphi, pois consigo executar essa sql na ferramenta do informix, mas no delphi não roda.
select a.cod_cliente, a.mes, a.ano, a.val_fatur, b.val_devol, c.val_livre_debito
from faturamento a
       ,outer devolucao b
       ,outer livre_debito c
where a.cod_cliente = b.cod_cliente
and    a.mes = b.mes
and    a.ano = b.ano
and    a.cod_cliente = c.cod_cliente
and    a.mes = c.mes
and    a.ano = c.ano
union
select a.cod_cliente, a.mes, a.ano, b.val_fatur, a.val_devol, c.val_livre_debito
from devolucao a
       ,outer faturamento b
       ,outer livre_debito c
where a.cod_cliente = b.cod_cliente
and    a.mes = b.mes
and    a.ano = b.ano
and    a.cod_cliente = c.cod_cliente
and    a.mes = c.mes
and    a.ano = c.ano
union
select a.cod_cliente, a.mes, a.ano, c.val_fatur, b.val_devol, a.val_livre_debito
from livre_debito a
       ,outer devolucao b
       ,outer faturamento c
where a.cod_cliente = b.cod_cliente
and    a.mes = b.mes
and    a.ano = b.ano
and    a.cod_cliente = c.cod_cliente
and    a.mes = c.mes
and    a.ano = c.ano


Não faço idéia de que erro é esse.
O intrigante é que consigo executar essa mesma sql via dbaccess e roda certinho.
* Utilizo SGBD Informix.

Quem puder me ajudar, eu agradeço muito.
Já não sei como resolver isso, nem o help me ajdua.
[]´s


Angelnoa

Angelnoa

Curtidas 0

Respostas

Vanius

Vanius

20/11/2003

Boa tarde Angela.

A principio a query esta certinha.

Pedirei a vc para testar duas Coisas.
1º Coloque ´Apelidos´ para os Campos, exemplo
SELECT a.Cod_Cliente AS CodigoCliente
a parte ´AS´ pode nao funcionar em algumas linguagens entao teste
SELECT a.Cod_Cliente CodigoCliente

A outra forma, seria tentar a seguinte query.
é a mesma coisa, porem utilizando INNER JOIN ao inves de OUTER.
Com Inner join é preciso colocar o ON (bla bla bla) q faz a mesma coisa do Where.



select a.cod_cliente, a.mes, a.ano, a.val_fatur, b.val_devol, c.val_livre_debito
from faturamento a
INNER JOIN devolucao b ON (a.mes = b.mes) AND (a.ano = b.ano) AND (a.cod_cliente = b.cod_cliente)
INNER JOIN livre_debito c ON (a.cod_cliente = c.cod_cliente) AND (a.mes = c.mes) AND (a.ano = c.ano)
union

select a.cod_cliente, a.mes, a.ano, b.val_fatur, a.val_devol, c.val_livre_debito
from devolucao a
INNER JOIN faturamento b ON (a.cod_cliente = b.cod_cliente) AND (a.mes = b.mes) AND (a.ano = b.ano)
INNER JOIN livre_debito c ON(a.cod_cliente = c.cod_cliente) AND (a.mes = c.mes) AND (a.ano = c.ano)
union

select a.cod_cliente, a.mes, a.ano, c.val_fatur, b.val_devol, a.val_livre_debito
from livre_debito a
INNER JOIN devolucao b ON (a.cod_cliente = b.cod_cliente) AND (a.mes = b.mes) AND (a.ano = b.ano)
INNER JOIN faturamento c ON (a.cod_cliente = c.cod_cliente) AND (a.mes = c.mes) AND (a.ano = c.ano)


Abraços,


Vanius Girodo.
vaniusg@terra.com.br


GOSTEI 0
Angelnoa

Angelnoa

20/11/2003

Oi Vanius, poxa muito obrigada pela atenção.
Vou fazer os testes que me disse.
Mas, consegui resolver o problema de outra forma:
ao invés de usar o union, eu crio com a primeira sql uma tabela temporária, já com a segunda e a terceira eu insiro o resultado nessa temporária. Dessa forma deu certo, pq na verdade o q faz union é juntar o resultado das sql´s e foi que fiz, talvez no modo português, mas p/ a urgencia que tinha...
Mas mesmo assim vou testar da forma que vc disse, pois não me conformo com esse erro.

Valeu pela força.
Um grande abraço,
Ângela


GOSTEI 0
POSTAR