CRYSTAL 9 NAO EXIBE OS DADOS

ALVAROVB2009 16/06/2010 13:29:24
#344994


Galera estou tendo um pequeno problema, deve ser coisa simples, más como não tenho muito intimidade com o crystal estou apanhando um pouco.

Quando mando rodar o relatório no próprio crystal ele exibe sem maiores problemas, quando mando imprimir do vb ele talmém exibe sem maiores problemas.
Agora quando mando imprimir pelo vb utilizando o sql que estou gerando no vb e enviando ao crystal ai é que da pau, conforme o erro que esta na imagem.
Junto coloquei as opções do crystal para saber se por acaso eu deixei passar alguma opção desapercebido, segue abaixo os comandos


ESSE FUNCIONA SEM O ENVIO DO SQL
Dim Crystal As New CRAXDDRT.Application
Dim Reports As CRAXDDRT.Report
Set Reports = Crystal.OpenReport(App.Path & [Ô]\guiasind.rpt[Ô])
Reports.Database.SetDataSource Db
Crv.ReportSource = Reports
Crv.ViewReport
Crv.EnablePrintButton = True

AGORA ESSE DA PAU COM O ENVIO DO SQL
Dim Crystal As New CRAXDDRT.Application
Dim Reports As CRAXDDRT.Report
Set Reports = Crystal.OpenReport(App.Path & [Ô]\guiasind.rpt[Ô])
Reports.Database.SetDataSource Db
Reports.SQLQueryString = StrSql
Crv.ReportSource = Reports
Crv.ViewReport
Crv.EnablePrintButton = True

ESSE é O SQL DO VB
StrSql = [Ô]SELECT DISTINCT G.codBarra, G.vencimento, G.Exercicio, G.vlContribuicao, [Ô]
StrSql = StrSql & [Ô]G.nossonumero, P.Empresa, P.Endereco,P.Bairro, [Ô]
StrSql = StrSql & [Ô]P.Cep, P.Cidade, P.Estado, P.Cnpj, [Ô]
StrSql = StrSql & [Ô]P.CodSindical, P.CodAgencia, G.dtemissao, [Ô]
StrSql = StrSql & [Ô]E.Endereco, E.Bairro, E.RazaoSocial, [Ô]
StrSql = StrSql & [Ô]E.Cep, E.Cidade, E.Estado, [Ô]
StrSql = StrSql & [Ô]E.Cnpj_Cpf, M.msg6, M.msg4, [Ô]
StrSql = StrSql & [Ô]M.msg5, M.msg3, M.msg2, [Ô]
StrSql = StrSql & [Ô]M.msg1, M.msg7, G.linhaDig, [Ô]
StrSql = StrSql & [Ô]A.cnae, P.Numero [Ô]
StrSql = StrSql & [Ô] FROM (((tbatividades A [Ô]
StrSql = StrSql & [Ô] LEFT JOIN tbempresas E ON A.descrAtividade=E.DescAtividade) [Ô]
StrSql = StrSql & [Ô] INNER JOIN tbguias G ON E.CodEmpresa=G.codEmpr) [Ô]
StrSql = StrSql & [Ô] INNER JOIN parametros P ON G.codCedente=P.Parametros) [Ô]
StrSql = StrSql & [Ô] LEFT JOIN tbmensagens M ON G.codMsg=M.codMsg [Ô]
StrSql = StrSql & [Ô]where G.codguia between 6099 and 6112[Ô]

OBS: COM E SEM O WHERE, ELE DA ERRO


ESSE é O SQL DO CRYSTAL
SELECT DISTINCT 'tbguias'.'codBarra', 'tbguias'.'vencimento', 'tbguias'.'Exercicio', 'tbguias'.'vlContribuicao', 'tbguias'.'nossonumero', 'parametros'.'Empresa', 'parametros'.'Endereco', 'parametros'.'Bairro', 'parametros'.'Cep', 'parametros'.'Cidade', 'parametros'.'Estado', 'parametros'.'Cnpj', 'parametros'.'CodSindical', 'parametros'.'CodAgencia', 'tbguias'.'dtemissao', 'tbempresas'.'Endereco', 'tbempresas'.'Bairro', 'tbempresas'.'RazaoSocial', 'tbempresas'.'Cep', 'tbempresas'.'Cidade', 'tbempresas'.'Estado', 'tbempresas'.'Cnpj_Cpf', 'tbmensagens'.'msg6', 'tbmensagens'.'msg4', 'tbmensagens'.'msg5', 'tbmensagens'.'msg3', 'tbmensagens'.'msg2', 'tbmensagens'.'msg1', 'tbmensagens'.'msg7', 'tbguias'.'linhaDig', 'tbatividades'.'cnae', 'parametros'.'Numero'
FROM {oj (('tbatividades' 'tbatividades' LEFT OUTER JOIN 'tbempresas' 'tbempresas' ON 'tbatividades'.'descrAtividade'='tbempresas'.'DescAtividade') INNER JOIN ('tbguias' 'tbguias' INNER JOIN 'parametros' 'parametros' ON 'tbguias'.'codCedente'='parametros'.'Parametros') ON 'tbempresas'.'CodEmpresa'='tbguias'.'codEmpr') LEFT OUTER JOIN 'tbmensagens' 'tbmensagens' ON 'tbguias'.'codMsg'='tbmensagens'.'codMsg'}

Agradeço a todos
RFTD 16/06/2010 13:47:18
#345000
Resposta escolhida
No Crystal Reports 11.5 na parte:

Reports.Database.SetDataSource

eu envio direto o recordset e funciona perfeitamente.
Tenta fazer o filtro no recordset e envia o recordset para a função.

Reports.Database.SetDataSource
ALVAROVB2009 16/06/2010 16:50:48
#345027



RFTD obrigado pelo retorno, eu fiz do jeito que você falou, só que ele deu um erro e abriu o debug do .net e logo em seguida fechou o vb6
O comando ficou assim:
Set Rs = New ADODB.Recordset
Rs.Open StrSql, Db, adOpenKeyset, adLockPessimistic

Set Reports = Crystal.OpenReport(App.Path & [Ô]\guiasind.rpt[Ô])
Reports.Database.SetDataSource Rs - Aqui ele da o erro, e nem passa para a linha de baixo
Crv.ReportSource = Reports
Crv.ViewReport
Crv.EnablePrintButton = True

Eu consulto e existe registro no Rs, más da o erro que esta na imagem
RFTD 16/06/2010 21:01:05
#345055
Como eu disse a você eu uso assim no 11.5.

Public Sub CarregarRelatorio()
On Error GoTo tratar

[ô]Unload Me
Dim rs As New ADODB.Recordset [ô]HOLDS ALL DATA RETURNED FROM QUERY

rs.CursorLocation = adUseClient
rs.Open sql, MyDatabase, adOpenForwardOnly, adLockReadOnly, adCmdText
Set rs.ActiveConnection = Nothing

If rs.EOF Then
MsgBox [Ô]Não há registros![Ô], vbInformation
Unload Me
Exit Sub
End If

Dim crystal As New CRAXDRT.Application [ô]LOADS REPORT FROM FILE

Dim report As CRAXDRT.report [ô]HOLDS REPORT
Set report = crystal.OpenReport(App.Path & [Ô]pt\[Ô] & relatorio) [ô]OPEN OUR REPORT

report.DiscardSavedData //Acho q falto esta linha soh [ô]CLEARS REPORT SO WE WORK FROM RECORDSET
report.Database.SetDataSource rs [ô]LINK REPORT TO RECORDSET

Me.Show

[ô]CRViewer.DisplayBorder = False [ô]MAKES REPORT FILL ENTIRE FORM
[ô]CRViewer.DisplayTabs = False [ô]THIS REPORT DOES NOT DRILL DOWN, NOT NEEDED
[ô]CRViewer.EnableDrilldown = False [ô]REPORT DOES NOT SUPPORT DRILL-DOWN
[ô]CRViewer.EnableRefreshButton = False [ô]ADO RECORDSET WILL NOT CHANGE, NOT NEEDED
[ô]CRViewer.EnableExportButton = True [ô]EXPORTAR RELATORIO

CRViewer.ReportSource = report [ô]LINK VIEWER TO REPORT
CRViewer.ViewReport [ô]SHOW REPORT

Do While CRViewer.IsBusy [ô]ZOOM METHOD DOES NOT WORK WHILE
DoEvents [ô]REPORT IS LOADING, SO WE MUST PAUSE
Loop [ô]WHILE REPORT LOADS.

CRViewer.Top = 0 [ô]WHEN FORM IS RESIZED
CRViewer.Left = 0
CRViewer.Height = ScaleHeight
CRViewer.Width = ScaleWidth

rs.Close
Set rs = Nothing
Set crystal = Nothing
Set report = Nothing

limparVariaveis
Exit Sub
tratar:
MsgBox Err.Description

End Sub


Eu não sei se o 9 tem Alguma coisa de diferente e tals.
Mais acho q deve ser parecido, para usar o refresh vc vai precisar de um função para dar refresh e recarregar o recordset.

Private Sub CRViewer1_RefreshButtonClicked(UseDefault As Boolean)
Recarregar
End Sub

Private Sub Recarregar()

Dim rs As New ADODB.Recordset [ô]HOLDS ALL DATA RETURNED FROM QUERY

rs.CursorLocation = adUseClient
rs.Open sql, MyDatabase, adOpenForwardOnly, adLockReadOnly, adCmdText
Set rs.ActiveConnection = Nothing

If rs.EOF Then
MsgBox [Ô]Não há registros![Ô], vbInformation
Unload Me
Exit Sub
End If

Dim crystal As New CRAXDRT.Application [ô]LOADS REPORT FROM FILE

Dim report As CRAXDRT.report [ô]HOLDS REPORT
Set report = crystal.OpenReport(App.Path & [Ô]pt\[Ô] & relatorio) [ô]OPEN OUR REPORT

report.DiscardSavedData [ô]CLEARS REPORT SO WE WORK FROM RECORDSET
report.Database.SetDataSource rs [ô]LINK REPORT TO RECORDSET
End Sub
ALVAROVB2009 17/06/2010 08:32:57
#345075
RFTD obrigado ai pela ajuda até o momento, más [txt-color=#e80000]acho[/txt-color] que o 9 deve ter algo de diferente sim, olha só que bizarro, coloquei o tratamento de erro e a linha que vc falou que talvez fosse o erro, más ao dar o erro ele continua querendo abrir o debug do 2005 e fecha o vb6, nem da a mensagem de erro do tratamento de erro

O código esta assim:
Dim Crystal As New CRAXDDRT.Application
Dim Reports As CRAXDDRT.Report
Dim Rs As ADODB.Recordset

Set Rs = New ADODB.Recordset
Rs.Open StrSql, Db, adOpenKeyset, adLockPessimistic

On Error GoTo TrataErro
Set Reports = Crystal.OpenReport(App.Path & [Ô]\guiasind.rpt[Ô])
[txt-color=#0000f0]Reports.DiscardSavedData - linha incluída[/txt-color]
[txt-color=#e80000]Reports.Database.SetDataSource Rs - Continua parando aqui[/txt-color]
Crv.ReportSource = Reports
Crv.ViewReport
Crv.EnablePrintButton = True

TrataErro:
If Err.Number <> 0 Then
Mensagem Err.Description
End If
RFTD 17/06/2010 10:02:28
#345088
Tenta da um update no seu CR9.

http://resources.businessobjects.com/support/additional_downloads/service_packs/crystal_reports_en.asp#CR9

Pode ser erro do CR.
ALVAROVB2009 17/06/2010 11:00:21
#345091
RFTD obrigado pela dica, realmente era isso mesmo, baixei o service pack 7 e agora consigo imprimir o relatório sem problemas, vlw pela ajuda
Tópico encerrado , respostas não são mais permitidas