CRYSTAL CONECTANDO COM ADO EM RUN TIME

USUARIO.EXCLUIDOS 11/09/2006 14:37:05
#170664
Saudações:

Vasculhando o fórum, encontrei um tópico postado pelo Sr. CLAYTON http://www.vbmania.com.br/vbmania/vbmforum.php?varMethod=Abrir&varID=84021&varUltimaPagina=1 que explicava uma maneira de usar o Crystal reports usando uma conexão já ativa (ADO). Peguei o exemplo que ele postou e fiz. Só que a versão do Crystal que eu tenho é o 8.0 e a versão do exemplo dele é 8.5. Os objetos que são criados no exemplo dele usam a biblioteca CRAXDdRT e na minha versão do Crystal não tem esta biblioteca, tem uma com o nome ligeiramente similar CRAXDDT e também outra CRAXDRT, o interessante é que com esta diferenças, tanto as minhas bibliotecas quanto as do exemplo dele tem as mesmas classes, os mesmos métodos e as mesmas propriedades. Rodando o meu exemplo, não consegui obter a mesma fucionalidade demonstrada, pois no momento que passo a recordset para o objeto desta forma: crRPT.Database.SetDataSource rs , o procedimento é ignorado, aí o CrViewer carrega o Rpt com todos os registros que estão na tabela em que ele foi vinculado na criação dele e não é isso que quero, quero somente os que coloquei na minha instrução select. Então estou contando com uma luz vinda do pessoal para as seguintes dúvidas:

1. O exemplo que peguei do Sr. CLAYTON só funciona mesmo na versão 8.5?
2. Se funciona na 8.0 o que estou fazendo de errado?
3. Ao desenhar o arquivo rpt tem um procedimento necessário para obter a funcionalidade descrita no exemplo do Sr. CLAYTON?

Quem puder me orientar agradeço. Embaixo tá o meu código:

Dim CnxBD As New ADODB.Connection
Dim rs As New ADODB.Recordset

'Abre o banco
CnxBD.CursorLocation = adUseClient
CnxBD.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\pmark\mrk.mdb;Jet OLEDB:DataBase Password =;"

CnxBD.Open

'Carrega o recordset

Set rs.ActiveConnection = CnxBD
rs.CursorLocation = adUseClient
rs.Source = "select top 10 * from financeiro where cdate(dtrec) >=#01/07/2006#"
rs.Open , , adOpenStatic, adLockReadOnly

If rs.RecordCount = 0 Then
MsgBox "Dados não encontrados.", vbCritical
Set rs = Nothing
Set CnxBD = Nothing
Exit Sub
Else
MsgBox rs.RecordCount & " registros encontrados.", vbInformation
End If

'Declara os objetos do Crystal
Dim crApli As New CRAXDRT.Application ‘-- > Essas são as bibliotecas diferentes
Dim crRPT As New CRAXDDT.Report ‘-- > Essas são as bibliotecas diferentes

'Passa propriedades para o objeto Report Todas elas deram um problema e eu tive que anular principalmente a DiscardSavedData
'crRPT.PaperOrientation = crPortrait
'crRPT.PaperSize = crPaperA4
'crRPT.UseIndexForSpeed = True
'crRPT.DiscardSavedData

'Seta e Abre o Relatorio Externo
Set crRPT = crApli.OpenReport("d:\pmark\finope.rpt")

'Seta o Recordset como base de Dados
crRPT.Database.SetDataSource rs ‘-- > Esse procedimento é como se não ocorresse

'Passa o relatório formado para o visualizador
CRViewer1.ReportSource = crRPT
'Visualiza o Relatorio
CRViewer1.ViewReport

'Fica Dando Loop Até o Crystal Carregar Todos os Dados
'Evitar que o Crystal Abra o Viewer sem os dados estarem
'Totalmente Carregados
Do While CRViewer1.IsBusy
DoEvents
Loop

'Fecha e Mata Todas as Variaveis e Declarcoes
Set rs = Nothing
Set CnxBD = Nothing
Set crRPT = Nothing
Set crApli = Nothing



USUARIO.EXCLUIDOS 12/09/2006 10:47:25
#170831
Eu colocaria no camando SQL em vez de...

Citação:

rs.Source = "select top 10 * from financeiro where cdate(dtrec) >=#01/07/2006#"



assim...

rs.Source = "select top 10 * from financeiro where cdate(dtrec) >= format$(#2006/07/01#, 'yyyy/mm/dd')"

USUARIO.EXCLUIDOS 13/09/2006 12:58:22
#171198
Muito obrigado CLAYTON, valeu também ROBERTOMARQUES pela dica, resolvi o problema seguindo as suas instruções, a princípio deu erro também mas passei para mais abaixo a parte das propriedades do objeto Report e consegui fazer funcionar o código ficou assim:

'Declara os objetos do Crystal
Dim crApli As New CRAXDDT.Application ‘-- > Igualei com a debaixo
Dim crRPT As New CRAXDDT.Report ‘-- > Essas são as bibliotecas diferentes

'Seta e Abre o Relatorio Externo
Set crRPT = crApli.OpenReport("d:\pmark\finope.rpt")

'Passa propriedades para o objeto Report
crRPT.PaperOrientation = crPortrait
crRPT.PaperSize = crPaperA4
crRPT.UseIndexForSpeed = True
crRPT.DiscardSavedData

'Seta o Recordset como base de Dados
crRPT.Database.SetDataSource rs ‘-- > Esse procedimento é como se não ocorresse

'Passa o relatório formado para o visualizador
CRViewer1.ReportSource = crRPT
'Visualiza o Relatorio
CRViewer1.ViewReport

'Fica Dando Loop Até o Crystal Carregar Todos os Dados
'Evitar que o Crystal Abra o Viewer sem os dados estarem
'Totalmente Carregados
Do While CRViewer1.IsBusy
DoEvents
Loop

'Fecha e Mata Todas as Variaveis e Declarcoes
Set rs = Nothing
Set CnxBD = Nothing
Set crRPT = Nothing
Set crApli = Nothing

Tópico encerrado , respostas não são mais permitidas