Adicionar TNS Service Name na ConnectionString do ORACLE

Problema

Na geração dos relatórios do Crystal Reports usando banco de dados ORACLE, ocorre o erro:

System.Runtime.InteropServices.COMException (0x800002F4): Falha ao abrir a conexão.
Detalhes: [Código do Fornecedor de Banco de Dados: 12154 ]
Falha ao abrir a conexão.
eixhgvk4.n0o 8020_2740_{760D3DEA-9F38-4D47-820A-35717E4937BE}.rpt
Detalhes: [Código do Fornecedor de Banco de Dados: 12154 ]
at CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export(ExportOptions pExportOptions, RequestContext pRequestContext)
at CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext)

Causa

A ConnectionString passada para a Engine do Crystal Reports está no seguinte formato:

ConnectionString: Driver={NOME_DO_DRIVER};DBQ=SERVIDOR;Port=PORTA;Uid=USUARIO;Pwd=SENHA;

O parâmetro DBQ não deve ser o endereço do servidor, mas sim o TNS Service Name das configurações do ORACLE no servidor.

Por exemplo, se a configuração do arquivo TNSNAMES.ora fosse essa:

tns_service_name = 
   (DESCRIPTION=    
       (ADDRESS_LIST=      
           (ADDRESS=(PROTOCOL=TCP)(HOST=tiger)(PORT=1521))
        )    
       (CONNECT_DATA=      
         (SERVICE_NAME = service_name))) 
        )  
    )

Deveria ser passado tns_service_name no parâmetro DBQ.

Correção

Latromi Client

Criar um novo campo no cadastro de conexões do Latromi para informar o TNS Service Name. Este campo deve ser exibidos apenas para conexões do ORACLE.

Serviço WSApp

O TNS Service Name informado no cadastro da conexão será passado no parâmetro DBQ da ConnectionString do ODBC.

Este problema foi resolvido após a implementação do novo cadastro de conexões, onde existe uma sessão de configurações específica para conexões do Crystal Reports.

image

Para colocar a solução em prática, é necessário atualizar os programas para as versões:

Programa Versão
Latromi Client v3.5.275 (ou superior)
Latromi Web v3.5.271 (ou superior)
WSApp v2.4.13 (ou superior)