Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
Not applicable

SQL Firebird

Boa tarde, estou tentando executar o seguinte sql no qlikview, conexão odbc e oledb para banco firebird.

RELATORIO_MOVTRANS_COMISSAO:

SQL select

       processonaval.codigo

      , motorist.codigo || ' - ' ||motorist.nome Motorista

      , conj_servicos.valor_servico

      , processonaval.datacoleta_exec

      , contasre.faturado

      , valores_conhecimento.frete_tarifa

      , clifor.razao pagador

      , clifor.razao remetente

      , clifor.cidade

      , clifor.razao destinatario

      , fatura.dataemissao data_emissao_fatura

      , fatura.datapagto data_recebimento_fatura

      , fatura.numerofatura numero_fatura

      , processonaval.localcoleta   localdacoleta

      , processonaval.localentrega  localdaentrega

      , processonaval.dataprocesso  dataprocesso

      , processonaval.datacoleta_prog   datacoletaprogramada

      , processonaval.datacoleta_exec

      , tipo_processo_container.descricao

      , veiculos.placa cavalo

      , veiculos.placa carreta

      , case motorist.tipofunc

         when '0' then 'Funcionário'

         when '1' then 'Terceiro-Autonomo'

         when '2' then 'Terceiro-Empresa'

         else

         'Sem Definição'              

         end desc_tipofunc

from processonaval

left join contasre             on contasre.codigo_origem = processonaval.codigo_origem and contasre.origem = 8

left join conj_servicos        on conj_servicos.codigo_origem = processonaval.codigo and conj_servicos.origem = 8

left join itensfat             on itensfat.codigocontarc = contasre.codigo

left join fatura               on fatura.codigofatura = itensfat.codigofatura

left join clifor               on clifor.codigo = processonaval.entrega and clifor.codigo = processonaval.pagador and clifor.codigo = processonaval.coleta

join tipo_processo_container   on tipo_processo_container.codigo = processonaval.tipoprocesso

left join valores_conhecimento on valores_conhecimento.codigo_origem = processonaval.codigo and valores_conhecimento.origem = 8

left join motorist             on motorist.codigo = conj_servicos.motorista

left join veiculos             on veiculos.codigo = conj_servicos.cavalo and veiculos.codigo = conj_servicos.carreta

where (select count(codigo) from conj_servicos where codigo_origem = processonaval.codigo and origem = 8) > 1;

Todas as vezes que mando executar acontece o seguinte erro. Se eu mando executar no ibexpert ele executa sem problemas.

captura.PNG

Espero que possam me ajudar. Obrigado.

Tags (1)
5 Replies
rafaugusto
New Contributor III

Re: SQL Firebird

Boa noite Gabriel.

Duas perguntas:

Primeira, qual o driver odbc que você está usando (e qual versão do firebird)? Eu sofri pra achar o certo, mas depois não tive mais problemas.

Sugestão: FirebirdSql.Data.FirebirdClient-4.8.0.0.msi

Eu baixei antes dois, mas não resolvi a contento.

A segunda, eu não entendi seu where, percebi que faz um subselect. Por experiência com FB, eu prefiro retornar os where dentro de um select principal e fazer o subselect na segunda (junto com os joins).

E por fim, eu não vejo a instrução LOAD. Ex:

[SUATABELA]:

LOAD

    Campo1,

     Campo2,

     Campon;

SQL SELECT campo1

FROM TABELADOBANCO

where TABELADOBANCO.CAMPO = PARAMETRO;

Not applicable

Re: SQL Firebird

Bom dia, esse sql, é o mesmo que executa no sistema que utilizamos, ele é feito dessa maneira porque existem viagens em que existem 2 motoristas. Dai para fazer o calculo de comissão, é necessário que apareçam os 2. No ibexpert funciona sem problemas. Eu estou utilizando o driver odbc Firebird_ODBC_2.0.4.155_x64. Baixei o driver que me passou, mas o erro permanece.

Employee
Employee

Re: SQL Firebird

Você diz "odbc e oledb "

Só dá para usar um de cada vez, qual está usando?

Role a tela de erro e anexe o código e/ou mensagem de erro por favor

Tente usar um comando simples para ver se funciona:

select cast('NOW' as timestamp) from rdb$database

Not applicable

Re: SQL Firebird

Bom dia Clever, ja testei das duas maneiras ODBC e OLEDB, ambas acontecem o mesmo erro.

ErrorSource: Microsoft OLE DB Provider for ODBC Drivers, ErrorMsg: [ODBC Firebird Driver][Firebird]Dynamic SQL Error

SQL error code = -104

Token unknown - line 40, column 22

from

RELATORIO_MOVTRANS_COMISSAO:

SQL select

       processonaval.codigo

      , motorist.codigo || ' - ' ||motorist.nome Motorista

      , conj_servicos.valor_servico

      , processonaval.datacoleta_exec

      , contasre.faturado

      , valores_conhecimento.frete_tarifa

      , clifor.razao pagador

      , clifor.razao remetente

      , clifor.cidade

      , clifor.razao destinatario

      , fatura.dataemissao data_emissao_fatura

      , fatura.datapagto data_recebimento_fatura

      , fatura.numerofatura numero_fatura

      , processonaval.localcoleta   localdacoleta

      , processonaval.localentrega  localdaentrega

      , processonaval.dataprocesso  dataprocesso

      , processonaval.datacoleta_prog   datacoletaprogramada

      , processonaval.datacoleta_exec

      , tipo_processo_container.descricao

      , veiculos.placa cavalo

      , veiculos.placa carreta

      , case motorist.tipofunc

         when '0' then 'Funcionário'

         when '1' then 'Terceiro-Autonomo'

         when '2' then 'Terceiro-Empresa'

         else

         'Sem Definição'              

         end desc_tipofunc

from processonaval

left join contasre             on contasre.codigo_origem = processonaval.codigo_origem and contasre.origem = 8

left join conj_servicos        on conj_servicos.codigo_origem = processonaval.codigo and conj_servicos.origem = 8

left join itensfat             on itensfat.codigocontarc = contasre.codigo

left join fatura               on fatura.codigofatura = itensfat.codigofatura

left join clifor               on clifor.codigo = processonaval.entrega and clifor.codigo = processonaval.pagador and clifor.codigo = processonaval.coleta

join tipo_processo_container   on tipo_processo_container.codigo = processonaval.tipoprocesso

left join valores_conhecimento on valores_conhecimento.codigo_origem = processonaval.codigo and valores_conhecimento.origem = 8

left join motorist             on motorist.codigo = conj_servicos.motorista

left join veiculos             on veiculos.codigo = conj_servicos.cavalo and veiculos.codigo = conj_servicos.carreta

where (count(codigo) from conj_servicos where codigo_origem = processonaval.codigo and origem = 8) > 1

Employee
Employee

Re: SQL Firebird

where (count(codigo) from conj_servicos where codigo_origem = processonaval.codigo and origem = 8) > 1

should be

where (select count(codigo) from conj_servicos where codigo_origem = processonaval.codigo and origem = 8) > 1