IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] [CR9] [RDC] - redéfinir la source de données pour une QRY


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    VVE
    VVE est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 72
    Par défaut [VB6] [CR9] [RDC] - source de données crdb_query.dll + dépendances craxdrt.dep
    Salut à toutes et à tous,

    J'ai développé en VB6 un lanceur d'états Crystal Reports +/- générique. Le but est de pouvoir imprimer, visualiser, exporter et poster d'importe quel état CR sur un poste client ne disposant pas de CR designer.

    Le programme permet de choisir un fichier RPT et de préciser un certain nombre de paramètres.

    Pour me connecter à la source de données cible, je redéfinis par code l'emplacement des sources de données de toutes les tables de l'état.

    Avec CR9 er RDC, je procède comme suit :
    pour chaque objet 'table' de mon état,
    je remplace la DLL qui définit le driver de connection (ODBC, Oracle, SQL Server...),
    puis j'efface toutes les ConnectionProperties,
    et je remplace par les propriétés appropriées au driver (User ID, Password, Database Name, Server, etc...)
    fin pour

    (je fais de même s'il existe des sous-états)

    Les différentes 'ConnectionProperties' à définir dépendent du driver (càd de 'DllName').

    Dans l'aide CR (CrystalDevHelp.chm) j'ai trouvé un tableau qui définit ces différentes propriétés pour un certain nombre de driver.

    Mais rien pour le driver "crdb_query.dll" qui correspond à une source de données de type Crystal Query (fichier .QRY).

    Quelqu'un a-t-il des infos, ou un algo pour ce cas, je n'ai rien trouvé dans mes recherches...

    Merci

    Vincent

  2. #2
    Membre éclairé Avatar de Sytchev3
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 433
    Par défaut
    Quel est exactement le but de ton projet ???

    Si il s'agit de remplir un état, moi je passe par des tables intermédiaires qui sont alimentées uniquement pour remplir les états puis je passe par des objets de ce type :

    CRAXDRT.DatabaseTable
    CRAXDRT.DatabaseTables
    CRAXDRT.Sections
    CRAXDRT.Section
    CRAXDRT.SubreportObject
    CRAXDRT.ReportObjects
    CRAXDRT.Report
    CRAXDRT.Application

  3. #3
    VVE
    VVE est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 72
    Par défaut
    Hi,

    Le but du lanceur générique est de pouvoir imprimer, visualiser, exporter vers un fichier ou envoyer par email n'importe quel état développé en CR9.

    voici le coeur du code qui me pose pb.
    En fonction du type de pilote utilisé pour la connection à la table, il faut définir un certain nombre de ConnectionProperties.

    Pour les pilotes "classiques", j'ai pu retrouver ce qu'il me fallait, mais pour le pilote de type Crystal Query (fichier QRY généré par l'outil SQL Designer fourni par Crystal pour les versions antérieures de CR9).

    Le pb est que je ne peux pas faire un .DeleteAll sur cet état qui utilise une QRY car la requête SQL spécifique fait partie de ces ConnectionProperties. J'ai donc simplement ajouté les propriétés "DSN", "User ID" (ie pour ODBC), aux prorpriétés existante pour le pilote "crdb_query.dll".

    Visiblement ça ne marche pas bien...

    Peut-être que la syntaxe des propriétés (nom de base, user, pwd) est différente pour le pilote crdb_query ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    ' indices des pilotes d'accès aux données
    Public Const tpzPiloteODBC = 0 ' pilote par défaut
    Public Const tpzPiloteSQLSERVER = 1
    Public Const tpzPiloteORACLE = 2
    Public Const tpzPiloteACCESS = 3
     
    ' chaînes de caractères pour la liste pilote d'accès aux données
    Public tpzNomListePilotes(tpzPiloteCount) As String '= ["connexion ODBC", "Microsoft SQL Server", "Oracle", "Microsoft Access"]
    Public tpzDllPilotes(tpzPiloteCount) As String '= ["crdb_odbc.dll", "crdb_ado.dll", "crdb_oracle.dll", "crdb_ado.dll"]
     
     
    Private Function ConnectTables(ByRef pCrxReport As CRAXDRT.Report) As Boolean
     
        Dim crDBTable As CRAXDRT.DatabaseTable
        Dim crConnProperty As CRAXDRT.ConnectionProperty
     
        On Error GoTo ErrorHandler
     
        ' définit les propriétés de connexion pour chacune des tables du rapport
        For Each crDBTable In pCrxReport.Database.Tables
     
            With crDBTable.ConnectionProperties
                crDBTable.TestConnectivity
                If Not (crDBTable.DllName = "crdb_query.dll") Then
     
                    ' récupère la DLL de connexion à la base de données
                    ' en fonction du choix sélectionné dans la liste
                    crDBTable.DllName = tpzDllPilotes(lstPilotesBDD.ListIndex)
     
                    ' efface toutes les propriétés de connexion
                    .DeleteAll
     
                End If
     
                ' restaure ces propriétés en fonction du type de connexion
                Select Case lstPilotesBDD.ListIndex
                    Case tpzPiloteODBC
     
                        ' définit le DSN et les infos de login
                        Call .Add("DSN", txtRptServer.Text)
                        Call .Add("Database", txtRptDatabase.Text)
                        Call .Add("User Id", txtRptUser.Text)
                        Call .Add("Password", txtRptPassword.Text)
     
                    Case tpzPiloteACCESS
                        ' définit le fichier BDD et le mot de passe
                        Call .Add("Database Name", txtRptDatabase.Text)
                        ' si un mot de passe est défini, on met à jour la propriété
                        If Len(txtRptPassword.Text) > 0 Then
                            Call .Add("Database Password", txtRptPassword.Text)
                        End If
     
                    Case tpzPiloteORACLE
                        ' définit le nom du service et les infos de login
                        Call .Add("Server", txtRptServer.Text)
                        Call .Add("User Id", txtRptUser.Text)
                        Call .Add("Password", txtRptPassword.Text)
     
                    Case tpzPiloteSQLSERVER
                        ' définit la source de données et les infos de login
                        Call .Add("Data Source", txtRptServer.Text)
                        Call .Add("Database", txtRptDatabase.Text)
                        Call .Add("Provider", "SQLOLEDB")
                        Call .Add("User Id", txtRptUser.Text)
                        Call .Add("Password", txtRptPassword.Text)
     
                End Select
            End With
     
        Next
     
        ' renvoie VRAI pour connection OK
        ConnectTables = True
     
        Exit Function
     
    ErrorHandler:
        ' renvoie FALSE pour connection NOK
        ConnectTables = False
     
    End Function
    Any idea ?


  4. #4
    Membre éclairé Avatar de Sytchev3
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 433
    Par défaut
    En fait comme je l'ai dit précedemment moi j'utilise des tables spécialement dédiées à l'édition, elles contiennent les données dont j'ai besoin pour éditer un état, je ne me sert pas de crdb_odbc.dll par contre j'utilise un composant nommé CRViewer9 regarde si ça peut t'aider. Si tu utilises ce composant je pourrais plus facilement t'aider.

  5. #5
    VVE
    VVE est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 72
    Par défaut
    Mon pb est que je n'ai aucune maitrise sur le (les) états CR que je vais exploiter avec mon lanceur.

    J'utilise moi aussi le composant CRViewer9, mais je lui passe l'objet CRAXDRT.Report que j'ai au préalable "préparé" :

    1) redéfini l'emplacement de la source de données ( mon pb avec la fonction ConnectTables() !! )

    2) passé éventuellement des valeurs au paramètres qui sont définis dans l'état Crystal (@DateDebut, or whatever...)

    3) parémétré les options d'export vers un fichier, ou d'impression (i.e. changer l'imprimante de destination)

    ou

    3bis) passé l'objet report au composant CRViewer9

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Par défaut
    Bonjour,

    J'ai développé en VB6 un lanceur d'états Crystal Reports +/- générique. Le but est de pouvoir imprimer, visualiser, exporter et poster d'importe quel état CR sur un poste client ne disposant pas de CR designer.
    Le viewer suffit à faire cela

    Est-ce que ton code fonctionne avec les .rpt utilisant une base .mdb ou une connexion ODBC (DSN) ?

    Quelle est l'erreur que tu obtiens ?

    Pour les pilotes "classiques", j'ai pu retrouver ce qu'il me fallait, mais pour le pilote de type Crystal Query (fichier QRY généré par l'outil SQL Designer fourni par Crystal pour les versions antérieures de CR9).
    Cela veut dire que certains reports sont créés avec des vieilles versions de CR ? Quellle est la plage des versions présentes ?

  7. #7
    VVE
    VVE est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 72
    Par défaut
    Petite précision,

    Le pilote "crdb_query.dll" n'est pas seulement utilisé dans le cas où la source de données est un fichier QRY, il est également utilisé si la source de données est une commande incluse dans le "référentiel" Crystal Reports.

    Bon, ça aide pas, mais c'est bon à savoir


  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Par défaut
    Mmmmm... je n'ai pas la solution à ton problème mais sachant qu'a priori, BO marque une rupture entre les reports inférieurs à la version 9 et les autres, je pense pas que tu puisses ouvrir/exploiter des anciens reports de cette manière.

    Ouvre un "vieux" report directement dans CR >= 9, et le logiciel te proposera une conversion, qui plus est définitive.

    As-tu essayé d'ouvrir un ancien .rpt (dont les propriétés de connexion sont enregistrés et valides) avec un viewer récent ? (via VB donc)

    Personnellement, je me retape tous mes vieux reports à la pogne pour les basculer en CRXI (mais c'était des versions 4.5)

  9. #9
    VVE
    VVE est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 72
    Par défaut
    ouaip...

    Le pb est que depuis CR designer 9, l'état fonctionne bien.
    J'avais déjà migré l'état CR 7.5 en CR 9 (en fait il y a une vingtaine d'états à migrer).

    J'ai même changé la source de données dans CR designer pour ne plus avoir le foutu fichier QRY.
    Mon pb est que la procédure de migration que j'ai suivie passe par le "référentiel" CR.

    En gros, j'ai transformé une source de données de type QRY en source de données "commande" mais en passant par le référentiel (pour ne pas "casser" la mise en forme en supprimant tous les champs. j'ai uniquement fait un mappage des champs "QRY" avec les champs "commande").

    Ca ne m'avance pas car le pilote utilisé dans ce cas là est également "crdb_query.dll"

  10. #10
    VVE
    VVE est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 72
    Par défaut


    En fait, je crois que j'avance du côté du VB

    J'ai refait un lanceur plus simple en nettoyant mon code (j'utilise uniquement le driver ODBC pour cible) et je ne passe que par le CRViewer.

    Sur mon poste de dev, tout semble bien fonctionner.

    Le code de ma fonction "ConnectTables()" (cf plus haut) ne semble pas en cause.

    En gros, c'est "tombé en marche"

    Mon nouveau problème en fait est le jeu d'installation que je dois générer pour faire fonctionner le "bouzin" sur les postes clients

    Je suis désormais persuadé que depuis le début c'est en fait un pb de dépendances de DLL que j'ai eu.

    Le pilote crdb_query.dll n'est pas apparemment redistribué par défaut dans le fichier de dépendance fourni par CR (fichier .dep)

    Bref, chu pas sorti de l'auberge !

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Par défaut
    Tu as jeté un oeil au .msi fourni par BO ? J'ai du me résigner à en passer par là pour faire fonctionner mes différents états (utilisant différentes bd (.mdb/MySQL), différents modes de connexion (DSN ou passage des infos de connex comme tu le fais), avec ou sans formulas/paramètres etc.) sur les postes clients (avec une sorte de viewer générique également dans lequel je charge l'objet Report pré-défini (un peu ton cas je suppose).

    Du coup, je l'ai intégré dans mon setup de déploiement client en mode silencieux, et tout fonctionne sur tous les postes.

    Le hic ? il fait 67mo !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/05/2006, 13h57
  2. source de données d'une listbox?
    Par gdkenny dans le forum ASP.NET
    Réponses: 5
    Dernier message: 09/03/2006, 17h11
  3. Réponses: 2
    Dernier message: 24/05/2005, 16h35
  4. source de donnée d'une LOV
    Par oradevelop dans le forum Oracle
    Réponses: 2
    Dernier message: 28/04/2005, 13h36
  5. [EJB2] Sources de données pour EJB
    Par thomy dans le forum Java EE
    Réponses: 4
    Dernier message: 04/06/2003, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo