Pular para o conteúdo principal

Passando parâmetros para o Crystal Reports 8.5/11.5. Estrelando: O VB6.


Num cenário onde já se possui o relatório criado no Crystal e é necessário passar parâmetros via código pelo VB sem apresentar a tela de valores do CR e sem muita conversa, segue a solução minerada:

Adicionar componentes:
Crystal Report Viewer Control
Crystal Activex Report Viewer Library 11.5


No Project Explorer, -Add -> Crystal Report Component (Relatório Existente)
-Indique seu relatório previamente criado no Crystal
-Informe "sim" para as opções de criar/inserir form com visualizador do relatório e alterar opção de start do projeto.(opcional)


Não precisa criar fórmula ou parâmetro, basta passar o valor para o campo da tabela, conforme abaixo:

Opção 1 de código:Simplesmente definir:


Private Sub Form_Load()
 CrystalReport1.EnableParameterPrompting = False


 'Passando o parâmetro p/ "tabela.campo" - Inclua as chaves{}!
 'Se preferir, concatene a uma textbox.text, por exemplo.
 CrystalReport1.RecordSelectionFormula = "{compras.nCompra} = " & Textbox1.Text

 'CRViewer1 é o objeto Crystal Viewer, previamente adicionado ao form.
 CRViewer1.ReportSource = CrystalReport1
 CRViewer1.ViewReport
 Screen.MousePointer = vbDefault
End Sub


Não esqueça de inserir em Form_QueryUnload:Set CrystalReport1 = Nothing

'Opção 2 de código:'Na seção General, do VB6, form onde há o CRViewer:
Dim Report As New CrystalReport1
Dim CRXFormulaFields As CRAXDRT.FormulaFieldDefinitions
Dim CRXFormulaField As CRAXDRT.FormulaFieldDefinition


Private Sub Form_Load()
 Set CRXFormulaFields = Report.FormulaFields
 Report.EnableParameterPrompting = False

 'Passando o parâmetro para a "tabela.campo":
 Report.RecordSelectionFormula = "{compras.nCompra} = 116"

 'CRViewer1 é o objeto Crystal Viewer, previamente adicionado ao form.
 CRViewer1.ReportSource = Report
 CRViewer1.ViewReport
 Screen.MousePointer = vbDefault
End Sub


NESSE CASO, inserir em Form_QueryUnload:Set Report = Nothing

Agradecimentos às contribuições de Carlos Eduardo Montoya.
EoP

__________________________

Comentários

Postagens mais visitadas deste blog

Crystal Reports XI - VB6 - Permission Denied - Ou: Carregando imagens dinamicamente no Crystal Reports

(Trying) English version : Category: Tools __________________________ If you are trying to dinamically set an image into the control Picture (ICROleObject) and you are getting the error "Permission Denied" when you are using SetOleLocation method, I suggest you try this following code instead of SetOleLocation method: Private Sub Section1_Format(ByVal pFormattingInfo As Object)     Dim logofile As String     logofile = app.Path & "\logo.jpg"     If Dir$(file) <> "" Then     'File exists...         Set Picture2.FormattedPicture = LoadPicture(logofile)         'FormattedPicture method used instead of SetOleLocation...     Else         Picture2.Suppress = True 'If does not exist, suppress that control.     End If End Sub That error happens bec...

VB6 x MySQL - SELECT from two databases - Just one connection - (pt-BR: SELECT em dois bancos)

English : Considering that your databases are both on the same server/instance, yes, you can get fields from two or more databases. Remember:  -for this example you are using MyODBC 3.51 like me (MySQL 32bits, so, MyODBC 32bits); -your data source name is "store" and was properly set up; -Reference: Microsoft ActiveX Data Objects 2.5 library Português : SELECT em dois bancos (desde que estejam no mesmo servidor e instância do MySQL) Considere: -Para este exemplo, estou usando o MyODBC 3.51 (MySQL de 32 bits, ODBC de 32bits) -Referenciar: Microsoft ActiveX Data Objects 2.5 library __________________________ Raw/didactic code (please, read this twice) Private Sub getItemDescription(code as string) Dim sql As String sql = "SELECT dbStore.itens.description from dbCentral.itens, dbStore.itens " _     + "WHERE dbStore.itens.BarCode = dbCentral.itens.BarCode " _     + "AND dbStore.itens.BarCode = '" & code &  "';...