Fórum Query - Problema com UNION? (Socorro) #196230
20/11/2003
0
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.
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
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
Curtir tópico
+ 0
Responder
Posts
20/11/2003
Vanius
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
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
Responder
Gostei + 0
20/11/2003
Angelnoa
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
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
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)