Pb crystal report version 10 et VB6

Voila je debute sous visual basic 6.0 j'ai fait une peit appli et j'ai bessoin de visualiser des fichier creer avec Crystal Report 10 dans les composant j'ai bien un control ActiveX (CrystalActiveXReportViewer1)

mais comment utiliser ce controle genre :
CrystalActiveXReportViewer1 pour qu'il me charge et affiche mon fichier .RPT

Merci de votre aide

14 réponses

  1. Easy :)

    1° Tu ajoutes dans tes références :
    -Crystal ActiveX Reports Viewer Library 10.0
    -Crystal Reports ActiveX Designer Run time Library 10.0

    2° tu créer une form et tu y ajoute le controle CrystalActiveXReportViewer (nomme ce controle CRVReport)

    3° Tu tappes le code suivant sur le On Load de ta form :

    Private Sub Form_Load()

    Dim rptReport As New CRAXDRT.Report
    Dim rptRepApp As New CRAXDRT.Application
    Dim rtpViews As CRAXDRT.DatabaseTable

    ReportFileName = "c:\Monchemin\monfichier.rpt"
    Set rptRepApp = New CRAXDRT.Application
    Set rptReport = New CRAXDRT.Report

    With CRVReport

    Set rptReport = rptRepApp.OpenReport(ReportFileName, 1)

    .ReportSource = rptReport
    .ViewReport

    End With

    End Sub
    3
    1. Salut!
      :) je suis vraiment tres contente d'avoir trouvé ton code (help ; cryst10+vb) ça m'a sauvé!! :) Merci encor!!!!

      Bon, je me permets de te demander une autre choz, a propos du meme sujet(cryst10+vb6)
      Bon voila, chui bloquée dans mon application de fin d'études!
      bref, j'ai créé une facture sous CR10, les acheteurs (clients) sont sous forme de subreport!
      le prob est : je veux que les fields(CIN, nom, prénom...) soient inclus dans une seule zone de texte, sous forme :
      Mr Nom Prénom, titulaire de la carte d'identité nationale N° CIN
      voila, les fields dans une phrase!
      Ce que je voudrai l'éviter, ce sont les espaces, parceque par exp : la longueur maximale d'un champ nom est 25 caaracteres, sinon y aura des nom qui ne dépasse meme pas 10 caracteres!!
      voici mon prob en expl:
      mauvais exp:
      Mr, Alin Billy , titulaire de la carte d'identité nationale N° XXXXXX.
      Exp parfai:
      Mr, Alin Billy, titulaire de la carte d'identité nationale N° XXXXXX.
      C'est tout, ouf, je crois que je vous embête!! Sorry!
      Merci d'avance!!
      0
    2. salut
      je suis tres content de trouver votre solution apropos de crystal report 10 avec vb .
      ci vous me permetter de vous demander de l'aide a mon probleme
      qui consiste a attribuer une source comme requete paramétré a mon etat que je n ai pas su faire ca.
      merci de votre aide
      je n ai trop besoin
      0
  2. Salut :)

    Content d'avoir pu te 'sauver la vie' :)

    J'espere que je réponds pas trop tard mais bon ;)

    Pour ton second problème,
    Il me semble que c'est un problème purement Crystal report non ?

    Si j'ai bien tout saisi à ton problème, tu as un sous état dans ton état mère dans lequel tu voudrais afficher tes info client, c'est bien ça ? Avec, comme tu le spécifies, toutes tes infos clients dans le meme champ.

    Je ne saisi pas bien pourquoi tu veux tout mettre dans un même champs et surtout pourquoi tu utilise un sous état ? A mon avis tu dois avoir un probleme au niveau de ta sélection de donnée sur ton état.

    Ou sont stockées tes données ? Quel sont les paramètres de selection que tu utilises dans CR ?

    Voila à+
    0
    1. Salut, Merci bcp!
      J'ai tou réglé!!!!
      Au fait, j'ai créé une requete sous access avec un champ contenant toute les informations...... meme ALIAS.
      j'ai utilisé cette methode:
      Mr, X, titulaire de la CIN N°: XX
      [Civilité] & ', ' & [NOM] & ', titulaire de la CIN N°: ' & [CIN]
      Voila!! ( [X] = un champ)
      :) Merci again! et a+!!
      Mainant, je metriz bien le CR10, tinkiét ;) !!! :) I'm so happy!
      Bisou!!
      0
  3. bonjour,
    j'utilise VB6 et crystal reports 10 et je veux lier un etat à un controle data comme en vb5. En fait je veux afficher le résultat d'une requete dans un état et j'arrive pas à le faire en VB6.

    pourriez vous m'aider svp, c'est très urgent.
    0
    1. Yop ;)

      Desole je reponds super tard a chaque fois mais je ne matte pas souvent mes mails ;)

      Ton probleme est assez classique ^^

      Il te suffit de créer un état crystal report. (jusque la tout va bien.)
      Tout va se jouer lors de la connection à la base de donnée. (Car base de donnée tu dois avoir vu que tu fais une requete)

      Donc tu créé ton nouveau Doc crystal report avec l'assistant la il te demande la source de tes données :
      * Si tu as une base Access donc tu fais Créer une nouvelle connexion/AccessExcel(DAO).
      * Si tu as une Bdd SQL server ou oracle ou autre tu prend Créer une nouvelle connexion/OLE DB(ADO) puis tu selectionne le driver correspondant a ta Base de donnée.

      Une fois ceci Fais l'assistant te demande les table que tu veux intégrer à ton état CR et ..... il ne faut pas ajouter ces table mais créer une nouvelle commande ! une fenetre s'ouvre et la tu tappe ta requete SQL.

      Et enfin comme par magie tu pourra te servir du resultat de ta requete pour creer ton etat CR.

      Ensuite pour intégrer l'état CR à VB6 utilise le code ci dessus.

      Voila j'espere que ca va t'aider ^^

      @+ et bonne prog ^^
      0
      1. Bonjour

        petit prob votre exemple de code marche tres bien pour recuperer les rapports mais j'ai un petit prob car mon serveur requiere une authentification par non "du serveur","nom du user", mot de pass user et la base a laquelle se connecter avant d,afficher le rapport et ce n'est pas tres ptratique j'utilise vb6 avec crystal 10 si quelqu'un a une idee ???????

        je suis toutes oreilles ouverte

        merci
        0
        1. Bonjour,
          avec retard mais bon on sait jamais !

          Global Const Mon_Pass As string = "tintin"

          Dim m_Application As New CRAXDDRT.Application
          Dim m_Report As CRAXDDRT.Report
          Dim props As CRAXDDRT.ConnectionProperties

          Set m_Report = m_Application.OpenReport("toto.rpt", 1)
          Set props = m_Report.Database.Tables(1).ConnectionProperties
          props.Item("Database Name") = "chemin et non du mdb"
          props.Item("Database Password") = Mon_Pass

          Bon courage

          PS : si besoin ecrire à e-mail (ems_night@hotmail.com)
          0
      2. bonjour,
        j'utilise VB5 et crystal reports 4.5 et je veux calculer un total des valeures par page avec des sous totauxpour chaque page, et en résumer un total général

        pourriez vous m'aider svp, c'est très urgent.
        0
        1. ajouproblr de crystal report avec vb6
          0
          1. j ai un probleme au nieaux de code je voudrais creer un etat parametrer je programme avec vb6 , j ai une table qui sable Dossier je veux lors je tappe le numero dossier les information de ce denier s'affiche dans crystal data report
            les informatiom de dossier{nom dossier ,date creation}
            j au yne base de donnes au niveau d 'access
            vb6+crystal report 7
            help me
            voila mon msn :leila-morroco@hotmail.fr
            0
            1. Je voudrais afficher avec VB6 un état de crystalreport réaliser à partir d'une base de données Access 2000. Cette Base de données contient un mot de passe.

              Qui pourriez me dire comment je pourrais appeller cet état à partir de VB6.

              Merci d'avance pour vos attentions et j'espère recevoire un aide à mon problème.
              0
              1. Bonjour,

                J'ai commencé depuis peu à coder en c++ builder6, et je débute avec crystal report11.
                Je souhaiterai savoir si c'est possible d'afficher une fenetre de choix avant d'afficher le rapport depuis mon application builder?
                c'est à dire quand j'appel mon rapport depuis mon appli, le crystal me permet d'ouvrir une fenetre et valider un choix pour afficher mes données....
                et encore une question, pourquoi les liens hypertexts ne marche pas sur le rapports?? est ce que c'est fait uniquement pour travailler avec sous crystal report????

                J'espère avoir une reponse.
                Merci d'avance.
                0
                1. Salut

                  Pour moi, mon probléme c'est que je veux afficher un histogramme et un tableau au dessus dans rapport avec crystal report 10, est-ce que vous pouvez m'aider. Et Merci d'avance .
                  0
                  1. salut!
                    tout ce qui a été dit m'a vraiment aidé! je suis novice avec crystal donc ne peut pas apporter plus à ce qui a été dit!
                    Moi j'aimerai bien pouvoir depuis mon code vb changer la valeur de la requête cas des requête paramétré ! j'ai fait pas mal de tentative mais je ne vois nulle part ou changer la requête qui affinera les résultats qui devront parêtre dans l'état! votre aide me sera fort utile svp!
                    0
                    1. Bonjour,

                      je peux peut- être vous aider.

                      Voici un code VB6, puis en dessous, un code Visual Basic .Net pour la génération de multiples factures au format PDF.

                      Code VB6

                      SQL = "SELECT NroFact,PaysFactur,PJ,MailFactur" _
                          & "$ FROM FACTURE" _
                          & "$ WHERE TypFact = 'MENS'" _
                          & "$   AND PeriodeFact = '" & sPeriodeFact & "'" _
                          & "$   AND " & sBicWhere _
                          & "$   AND Ok = 0" _
                          & "$ ORDER BY NroFact"
                      
                      Set rs = SqlExecute(SQL)
                      
                      Set crRepp = crApp.OpenReport(rptfile)
                      crRepp.DisplayProgressDialog = False
                          
                      ' Fill report parameters
                      Set crParamDefs = crRepp.ParameterFields
                      
                      'Passage des paramètres fixes du rapport
                              
                      For Each crParamDef In crParamDefs
                          Select Case crParamDef.ParameterFieldName
                          Case "TypeDocument":    crParamDef.SetCurrentValue sFactureTitre
                          Case "Responsable":     crParamDef.SetCurrentValue sResponsable
                          Case "Telephone":       crParamDef.SetCurrentValue sTelephone
                          Case "email":           crParamDef.SetCurrentValue sEmail
                          End Select
                      Next
                          
                      crRepp.EnableParameterPrompting = False
                      crRepp.Database.Tables(1).SetLogOnInfo "", "", sDbUser, sDbPassword
                      crRepp.ExportOptions.DestinationType = crEDTDiskFile
                      crRepp.ExportOptions.FormatType = crEFTPortableDocFormat
                      crRepp.ExportOptions.PDFExportAllPages = True
                      
                      Do Until rs.EOF
                          sNoDoc = rs("NroFact")
                          sPaysFact = rs("PaysFactur")
                          sMail = rs("MailFactur")
                          
                          If sNoDoc <> sPreviousNoDoc Then
                              sPreviousNoDoc = sNoDoc
                          End If
                              
                          SQL = "SELECT FACTURATION.*" _
                              & "      ,FACTURE.ConditionPaie" _
                              & "  FROM FACTURATION" _
                              & "    LEFT JOIN FACTURE" _
                              & "      ON FACTURATION.NroFact = FACTURE.NroFact" _
                              & "  WHERE FACTURATION.NroFact = '" & sNoDoc & "'" _
                              & "  ORDER BY ID"
                      
                          crRepp.SQLQueryString = SQL
                          crRepp.ExportOptions.DiskFileName = sPathPJ & rs("PJ")
                          crRepp.Export (False)
                          
                          rs.MoveNext
                      Loop
                      


                      Code VisualBasic .Net

                              crReport = New ReportDocument()
                              crReport.Load(rptfile)
                              crApp.ReportSource = crReport
                      
                              crApp.ShowRefreshButton = False
                              crApp.ShowCloseButton = False
                              crApp.ShowGroupTreeButton = False
                      
                              Dim crLogin As CrystalDecisions.Shared.TableLogOnInfo
                      
                              crLogin = crReport.Database.Tables(1).LogOnInfo
                              'crLogin.ConnectionInfo.ServerName = sServerName
                              'crLogin.ConnectionInfo.DatabaseName = "Antennes"
                              crLogin.ConnectionInfo.UserID = sDbUser
                              crLogin.ConnectionInfo.Password = sDbPassword
                              crReport.Database.Tables(1).ApplyLogOnInfo(crLogin)
                      
                              ' Fill report parameters
                              'Dim crParameters As ParameterFields = crApp.ParameterFieldInfo
                              'Dim crParam As New ParameterValues()
                      
                              For Each crParamDef In crReport.DataDefinition.ParameterFields
                                  Select Case crParamDef.Name '.ParameterFieldName
                                      Case "TypeDocument" : SetCurrentValue(sFactureTitre)
                                      Case "Responsable" : SetCurrentValue(sResponsable)
                                      Case "Telephone" : SetCurrentValue(sTelephone)
                                      Case "email" : SetCurrentValue(sEmail)
                                  End Select
                              Next crParamDef
                      
                              SQL = "SELECT NroFact,PaysFactur,PJ,MailFactur" _
                                  & "$ FROM FACTURE" _
                                  & "$ WHERE TypFact = 'MENS'" _
                                  & "$   AND PeriodeFact = '" & sPeriodeFact & "'" _
                                  & "$   AND " & sBicWhere _
                                  & "$   AND Ok = 0" _
                                  & "$ ORDER BY NroFact"
                      
                              rs = SqlExecute(SQL)
                      
                              Do Until rs.EOF
                      
                                  sNoDoc = rs.Fields("NroFact").Value
                                  sPaysFact = rs.Fields("PaysFactur").Value
                                  sMail = rs.Fields("MailFactur").Value
                      
                                  If sNoDoc <> sPreviousNoDoc Then
                                      sPreviousNoDoc = sNoDoc
                                  End If
                      
                                  sWhere = "{FACTURATION.NroFact} = '" & sNoDoc & "'"
                      
                                  crReport.RecordSelectionFormula = sWhere
                                  'oDiskOpts.DiskFileName = sPathPJ & rs.Fields("PJ").Value
                                  'oExportOptions.ExportDestinationOptions = oDiskOpts
                                  'crReport.Refresh()
                                  'crReport.Export(oExportOptions)
                      
                                  crReport.ExportToDisk(ExportFormatType.PortableDocFormat, sPathPJ & rs.Fields("PJ").Value)
                      
                                  rs.MoveNext()
                              Loop
                      
                              crReport.Close()
                      
                          End Sub
                      


                      Ceci est est exemple. Il n'est certainement pas parfait, mais il fonctionne !

                      En VB6 pour 1200 clients il met 10 minutes. En Visual Basic .Net avec CrystalReport 10, il met 2 heures du fait que je n'ai plus pû utiliser la méthode SQLQueryString et que je dois donc ouvrir le rapport à chaque étape de ma boucle.

                      Si quelqu'un à une idée pour générer rapidement les 1200 factures sans passer à une machine plus puissante, je suis intéressé.Cordialement
                      -1
                      1. J'ai travaillé toute la matinée pour trouver une solution et enfin j'en ai trouvé une.
                        Elle fonctionne mais ce n'est peut être pas le meilleur.

                        J'ai remplacé la méthode SQLQueryString que j'utilisais dans l'ancienne version de Crystal Report et qui n'est plus supportée par Crystal Report 11 par l'utilisation de SqlDataSet (ma base de données est SQL-Server).

                        J'obtiens alors le code suivant

                            '******************************************************************************
                            '* GeneratePDF
                            '******************************************************************************
                        
                            Private Sub GeneratePDF()
                                Dim sNoAntenne As String
                                Dim sPreviousNoAntenne As String
                                Dim sPreviousNoDoc As String
                                Dim sBicWhere As String
                                Dim sWhere As String
                                Dim cmd As SqlCommand
                                Dim rs As ADODB.Recordset
                                Dim ds As New DataSet
                                Dim da As New SqlDataAdapter
                        
                                If bCheckDOM Then
                                    sBicWhere = "BIC <> ''"
                                    rptfile = sCRFactMensDOM
                                Else
                                    sBicWhere = "BIC = ''"
                                    rptfile = sCRFactMens
                                End If
                        
                                crReport = New ReportDocument()
                                crReport.Load(rptfile)
                                crApp.ReportSource = crReport
                        
                                'crRepp = crApp.OpenReport(rptfile)
                                crApp.ShowRefreshButton = False
                                crApp.ShowCloseButton = False
                                crApp.ShowGroupTreeButton = False
                        
                                Dim crLogin As CrystalDecisions.Shared.TableLogOnInfo
                        
                                crLogin = crReport.Database.Tables(1).LogOnInfo
                                'crLogin.ConnectionInfo.ServerName = sServerName
                                'crLogin.ConnectionInfo.DatabaseName = "Antennes"
                                crLogin.ConnectionInfo.UserID = sDbUser
                                crLogin.ConnectionInfo.Password = sDbPassword
                                crReport.Database.Tables(1).ApplyLogOnInfo(crLogin)
                        
                                SQL = "SELECT NroFact,PaysFactur,PJ,MailFactur" _
                                    & "$ FROM FACTURE" _
                                    & "$ WHERE TypFact = 'MENS'" _
                                    & "$   AND PeriodeFact = '" & sPeriodeFact & "'" _
                                    & "$   AND " & sBicWhere _
                                    & "$   AND Ok = 0" _
                                    & "$ ORDER BY NroFact"
                        
                                rs = SqlExecute(SQL)
                        
                                Do Until rs.EOF
                        
                                    ' Fill report parameters
                                    'Dim crParameters As ParameterFields = crApp.ParameterFieldInfo
                                    'Dim crParam As New ParameterValues()
                        
                                    For Each crParamDef In crReport.DataDefinition.ParameterFields
                                        Select Case crParamDef.Name '.ParameterFieldName
                                            Case "TypeDocument" : SetCurrentValue(sFactureTitre)
                                            Case "Responsable" : SetCurrentValue(sResponsable)
                                            Case "Telephone" : SetCurrentValue(sTelephone)
                                            Case "email" : SetCurrentValue(sEmail)
                                        End Select
                                    Next crParamDef
                        
                                    sNoDoc = rs.Fields("NroFact").Value
                                    sPaysFact = rs.Fields("PaysFactur").Value
                                    sMail = rs.Fields("MailFactur").Value
                        
                                    If sNoDoc <> sPreviousNoDoc Then
                                        sPreviousNoDoc = sNoDoc
                                    End If
                        
                                    SQL = "SELECT *" _
                                        & "  FROM FACTURATION" _
                                        & "  WHERE NroFact = '" & sNoDoc & "'" _
                                        & "  ORDER BY ID"
                        
                                    da = New SqlDataAdapter(SQL, cn)
                                    da.Fill(ds, "FACTURATION")
                                    da.Dispose()
                        
                                    SQL = "SELECT *" _
                                        & "  FROM FACTURE" _
                                        & "  WHERE NroFact = '" & sNoDoc & "'"
                        
                                    da = New SqlDataAdapter(SQL, cn)
                                    da.Fill(ds, "FACTURE")
                                    da.Dispose()
                        
                                    crReport.SetDataSource(ds)
                        
                                    For Each crParamDef In crReport.DataDefinition.ParameterFields
                                        Select Case crParamDef.Name '.ParameterFieldName
                                            Case "TypeDocument" : SetCurrentValue(sFactureTitre)
                                            Case "Responsable" : SetCurrentValue(sResponsable)
                                            Case "Telephone" : SetCurrentValue(sTelephone)
                                            Case "email" : SetCurrentValue(sEmail)
                                        End Select
                                    Next crParamDef
                        
                                    crReport.ExportToDisk(ExportFormatType.PortableDocFormat, sPathPJ & rs.Fields("PJ").Value)
                        
                                    ds.Clear()
                        
                                    rs.MoveNext()
                                Loop
                        
                                crReport.Close()
                        
                            End Sub
                        
                            '****************************************************************************************************
                            '* SetCurrentValue()
                            '****************************************************************************************************
                            '* Impression des factures mensuelles en un lot (unseul fichier PDF)
                            '****************************************************************************************************
                        
                            Public Sub SetCurrentValue(ByVal sText As String)
                                Dim crField As New ParameterValues
                                Dim crValue As New ParameterDiscreteValue
                        
                                crValue.Value = sText
                                crField.Add(crValue)
                                crParamDef.ApplyCurrentValues(crField)
                                'crParamDef.CurrentValues.Add(crValue)
                                'crParamDef.CurrentValues = crField
                            End Sub
                        


                        Le programme a mis jusqu'à 6 minutes pour générer 1365 factures.

                        -2