|
|
|
|
|
Dicas
|
|
Visual Basic (Crystal Reports)
|
|
|
Título da Dica: Crystal Reports - Erros de acesso a banco de dados
|
|
|
|
Postada em 1/10/2003 por ~Ð@®£@Ñ
O Crystal Reports é uma das melhores ferramentas para gerar relatórios ; além de ser fácil de usar , oferecer diversos recursos é multiplataforma. Mas nem tudo é uma mar de rosas. Quem , ao usar o Crystal , não se deparou com mensagens de erros que lhe causaram grandes dores de cabeça. Geralmente a conexão com um banco de dados é o grande vilão das mensagens de erro encontradas ao tentar gerar o seu relatório em tempo de execução.
Esses erros são devido aos seguintes fatores:
Falta de arquivos de dependência ou de arquivos do aplicativo cliente. Falta de arquivos ou versão atualizada para as DLLs para banco de dados.(Ex: P2sodbc.dll) Configuração incorreta para o DSN ou falta de configuração ODBC. Informação de login incorreta Sintaxe incorreta para a chamada de propriedades ou métodos do banco de dados Geralmente a primeira coisa que pensamos quando da ocorrência de um erro nestas condições é: Por onde começar ?
Bem , que tal começar pelo começo ? Na verdade a regra básica é a seguinte:
"Tenha completa certeza de que o seu relatário esta rodando corretamente no Crystal report Designer. Se o seu relatório falhar ao tentar a conexão em tempo de desenho sempre vai falhar em tempo de execução na aplicação."
Neste artigo vou abordar os principais erros relacionados com banco de dados usando o Crystal Reports e suas possíveis soluções. Lembre-se que devido a complexidade de cada ambiente nem sempre teremos uma solução que vai servir para todos , mesmo quando o erro parece ser o mesmo.Vamos lá...
Crystal Reports : problemas e possíveis soluções
Devido a diversidade de banco de dados vamos considerar as principais plataformas usadas:
1- Se você estiver usando um banco de dados padrão SQL (Oracle, SQL Server , DB2, Informix,etc..) você deve verificar o seguinte:
O software para banco de dados Cliente esta corretamente instalado ? Geralmente ele precisa estar instalado no driver local. O diretório padrão de instalação para o software cliente do banco de dados esta corretamente informado no caminho de busca do computador local.(Ex: c:\MSSQL\BIN ) Você pode verificar isto executando o comando : path na linha de comando do DOS. Você deve ser capaz de se conectar com o banco de dados a partir do seu software de banco de dados fora do ambiente Crystal Reports. 2- Se você estiver usando um banco de dados padrão desktop ( Access, Clipper, Dbase , FoxPro, etc...). Verifique o seguinte:
O banco de dados esta instalado na sua maquina local ? Você consegue acessar e visualizar todos os dados do banco de dados fora do ambiente do Crystal Reports ? Você possui as permissões de acesso corretamente configuradas para acessar o banco de dados ? 3- Se você esta usando uma conexão com um driver ODBC .
Faça um teste de conexão usando a ferramenta sqlcon32.zip . Esta ferramenta é disponibilizada pela Seagate Software e permite testar e debugar possíveis problemas com drivers ODBC instalados. O link para download é : http://support.crystaldecisions.com/communityCS/FilesAndUpdates/sqlcon32.zip.asp Para verificar se o Crystal esta usando uma conexão ODBC faça o seguinte:
Abra o relatório no Crystal Report e no menu - Database - selecione a opção - Convert Database Driver - Observe o nome não selecionado na frente de From:
Pdsodbc.dll - indica que a conexão é ODBC Pdsoledb.dll - indica que a conexão é OLE DB Pd*.dll - indica que a conexão é nativa.(Acima temos indica na tela esta opção) Vejamos agora os principais erros relacionados a banco de dados :
20532 error: 'Cannot find database DLL' Após instalar a versão 8.x do Crystal Reports ao criar ou abrir um projeto do Visual Basic que utiliza o componente - Crystal Reports ActiveX (OCX) com o Microsoft Data Control quando você tentar visualizar um relatório vinculado irá obter a mensagem de erro : Run-time error: '20532': Cannot find database DLL Solução: Este ocorre pois o componente para controle Vinculado ao banco de dados DLL - P2bbnd.dll - não esta incluso com a instalação da versão 8.0 do Crystal Reports. Você vai precisar realizar uma instalação personalizada : Inicie o setup do Crystal Reports 8.0 novamente Clique em Add/Remove e na seção : 'Select Features' expanda 'Data Access' Clique em 'Bound Reporting' e então clique a seguir em : 'Entire feature will be installed on local hard drive'. Clique em 'Next'. Clique em 'Next' para instalar o driver e continue com o setup até completar.
-Error detected by database DLL -Database DLL is corrupt -Incorrect session parameters Quando uma aplicação usando a versão 4.6 (Crystl32.ocx) do CR estiver acessando a versão 97 do Microsoft Access. Após a instalação do Access 2000 as mensagens de erros acima podem aparecer. Solução: Existem 3 fatores que podem gerar este erro:
1. A versão 4.6 da OCX Crystl32.ocx - Irá falhar ao tentar se conectar com o banco de dados Microsoft Access 2000. - Irá falhar ao tentar se conectar com o banco de dados Microsoft Access 97 através do arquivos de runtime do Microsoft Access 2000.
2. A versão dos arquivos de runtime do Microsoft Access instaladas na maquina do cliente : - Dao360.dll pode se conectar com o Microsoft Access 2000 e com o Microsoft Access 97. - Dao360.dll irá causar uma falha na conexão para a OCX - Crystl32.ocx. - Dao350.dll precisa estar instalada para que a ocx -Crystl32.ocx - consiga a conexão.
3. A versão dos drivers Crystal para o Microsoft Access : P2bdao.dll, P2irdao.dll, and P2ctdao.dll. - Versão 7.0.100.2 e superior dos drivers do Crystal para o Microsoft Access irão usar a versão mais recente da DAO para se conectar com o banco de dados. - Se ambas as dlls , Dao360.dll e Dao350.dll , estiverem na máquina do cliente . A Dao360.dll será usada para se conectar com o Microsoft Access 97.
Se a versão 2000 do Microsoft Access estiver instalada na maquina as condições abaixo irão permitir que a crystl32.0cx faça a conexão com o Microsoft Access 97: - O banco de dados deverá ser a versão Microsoft Access 97. - Os arquivos de runtime para o Microsoft Access 97 devem estar instalados na mquina do cliente. - Os drivers do Crystal para Microsoft Access drivers não podem ser da versão 7.0.100.2 ou superior.
Error: 20500 "Not Enough Memory For Operation" Error: 20534 "Error detected by database DLL" Na máquina do cliente , quando uma aplicação Visual Basic tenta imprimir um relatório feito no Crystal Reports versão 8.x diretamente para a impressora , podemos ter o seguinte erro: Error: 20500 "Not Enough Memory For Operation" Solução A causa do erro 20500 é devido ao banco de dados. Se o relatório for enviado para visualização podemos ter o seguinte erro: Error: 20534 "Error detected by database DLL"
Isto pode ocorrer quando o relatório esta se conectando ao banco de dados Access 97 com senha , porem o Crystal esta apontando para um arquivo System.mdw incorreto.(Este arquivo possui as informações de segurança sobre os usuários.)
Uma forma de resolver a questão é usar o utilitário - Crystal Decisions - Sysdb32.zip, para apontar o Crystal e para o arquivo System.mdw correto de forma que a entrada no registro do windows coincida com a informação do Crystal. O downloado do arquivo pode ser feito no link : http://support.crystaldecisions.com/downloads. Arquivo Sysdb32.zip.
Error "20534: Error detected by database DLL" Este erro pode ocorrer quando você usa o Crystal com um driver ODBC para se conectar a arquivos textos e tenta visualizar o relatório.
Detalhando a mensagem de erro temos:
Run time error '-2147467259 (80004005)' : [Microsoft][ODBC Text Driver]Selected collating sequence not supported by the operating system
Erros similares a este ocorrem com outras ferramentas de desenvolvimento Crystal Reports: - O Automation Server. - A chamada a API do motor de impressão. - O Report Designer Component Solução Este problema esta relacionado com o ambiente de desenvolvimento integrado do Visual Basic (IDE) para o service pack 3 ou superior. Veja o artigo da microsoft : Q246167 em http://msdn.microsoft.com O código a seguir é uma maneira de você contornar o problema:
#Const fDebug = true Dim logon as integer
On Error GoTo traperror:
With CrystalReport1 .ReportFileName = <caminho para arquivo rpt> logon = .LogOnServer("pdsodbc.dll","<Seu DSN>","","","") .Action = 1 End With
Traperror:
#If fDebug = true then If Err.Number = 20534 Then CrystalReport1.Action = 1 End If #End If
O código somente vai rodar se a variável fDebug for igual a True. Quando você compilar sua aplicação para distribuição aos seus clientes defina fDebug como False , assim o VB não irá compilar ou rodar o código no arquivo executável.
Error detected by database DLL Database DLL is corrupt Incorrect session parameters Se você estiver usando a versão 4.6 do Crystal para acessar um banco de dados Access versão 97 e converter o banco de dados para a versão Access 2000 vai obter as mensagens acima. Solução A versão 4.6 do Crystal reports foi criada em 1996 e é imcompatível com o formato da versão 2000 do Access. Se você precisar usar a versão Access 2000 vai ter que atualizar a versão do seu Crystal Reports para versão 7.0 Maintenance Release 1 our superior. Esta versão é compativel já vem com os drivers compatíveis com o Access 2000. ( Os drivers são : P2bdao.dll, P2irdao.dll e P2ctdao.dll. ) O download destes drivers pode ser feito no link : www.crystaldecisions.com arquivo : access2000drivers.zip
Vejamos agora algumas situações que podem causar muitas dores de cabeça se você não estiver atento.
1 - Quais os arquivos devo distribuir para o cliente poder rodar os relatórios feitos no Crystal Reports ?
Aposto que você já se fez esta pergunta ! A resposta esta no próprio Crystal. Toda versão do Crystal possui em seu Help uma relação dos arquivos que deverão ser distribuídos para rodar os relatórios. Abra o Help e procure por : Runtime File Requirements.
Bingo !!! Você vai achar a relação dos arquivos. Abaixo temos a relação para a versão 4.6 do Crystal.
CRPE32.DLL Interface para o motor de impressão 32 bit MSVCRT20.DLL Microsoft VC++ Run time Library CRXLAT32.DLL Somente se estiver usando a função - ToWords() CO2C40??.DLL Código de Linguagem P2BBND.DLL Incluir somente se estiver vinculando o CR ao Visual Basic Data Control CTL3D32.DLL Versão 2 para controles 3d.(deve estar no diretorio : windows/system32) PG32.DLL Incluir somente se você estiver usando gráficos no seu relatório CRYSTLxx.OCX Estiver usando o arquivo: Crystal ActiveX ( XX representa 16 ou 32) PG.DLL Somente se estiver usando gráficos CO2C40EN.DLL Somente se estiver usando objetos OLE nos relatórios (32 bit) CRXLATE.DLL Se estiver usando a função ToWords (x, # of places) P2BBND.DLL Se estiver vinculando o relatório ao um controle Data Control (32bit)
2- O que fazer com o seu relatório se o banco de dados mudou de localização ou foi renomeado ?
Se o banco de dados foi renomeado ou mudou de localização você vai receber uma mensagem de erro ao tentar rodar o relatório já existente ( Database Error ). Neste caso a solução é redefinir no relatório a nova localização ou o novo nome do banco de dados.
Use o comando Set Location para alterar a localização do banco de dados. Além disto o comando Set Location converte automaticamente o driver do banco de dados para a fonte de dados que você tiver escolhido. Assim você pode converter um acesso nativo para um acesso ODBC. Set Location não move fisicamente o banco de dados , apenas redireciona o Crystal Reports para localizar o banco de dados.
No menu Database , selecione a opção - Set Location Clique no botão - Set Location ... Informe a localização do banco de dados na janela - Choose Database File Para definir a localização do banco de dados para a localização do relatório ativo clique no botão - Same as Report.
Obs: Apos terminar de usar o Set Location use a opção - Verify Database no menu Database para atualizar qualquer mudança de estrutura feita no banco de dados.
Você pode redefinir a localização do banco de dados no seu código usando a propriedade - DataFiles. A sintaxe é a seguinte:
[form.]Report.DataFiles(ArrayIndex)[= Location$]
Você deve informar o nome e a localização para cada banco de dados ou tabela para a qual deseja alterar a localização. Vejamos um exemplo:
Report1.DataFiles(0) = "c:\teste\primeiro.mdb" Report1.DataFiles(1) = "c:\teste\segundo.mdb"
Você pode definir um caminho relativo para o banco de dados e a seguir atribuí-lo a uma variável que será usada junto a propriedade DataFiles: Ex: Report1.DataFiles(0) = caminho
Por ora é só , voltaremos ao assunto em breve ...
Original: www.macoratti.net
|
|
|
|
|