5 Replies Latest reply: Dec 7, 2016 10:02 AM by Clever Anjos RSS

    SQL Firebird

    Gabriel Erich Koeke

      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.

        • Re: SQL Firebird
          Rafael Santos

          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;

            • Re: SQL Firebird
              Gabriel Erich Koeke

              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.

            • Re: SQL Firebird
              Clever Anjos

              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

                • Re: SQL Firebird
                  Gabriel Erich Koeke

                  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