2008-12-23 4 views
2

Dans mon application (Win32), j'affiche Crystal Reports.Comment puis-je déterminer la méthode de connexion d'un rapport Crystal XI au moment de l'exécution, avant de me connecter?

Je définis les informations de connexion lors de l'exécution. Cependant, Crystal a aimablement décidé de se référer au nom de la base de données par plusieurs noms différents, selon la façon dont le rapport se connecte. Par exemple, si le rapport se connecte via une connexion ODBC, il s'appelle "Source de données", mais s'il se connecte directement, il s'appelle "Serveur".

Bien sûr, nous ne savons pas avant l'exécution quel rapport va être appelé.

Actuellement, je travaille sur la question en avalant une exception et d'essayer une autre méthode, comme ceci:

procedure TCrystalReporter11.SetLoginInfo(const username, password, 
    server : string); 
var 
    i : integer; 
begin 
    //set user name and password 
    //crystal only accepts these values if they are CONST params 
    for i := 1 to FRpt.Database.Tables.Count do begin 
    FRpt.Database.Tables[i].ConnectionProperties.Item['User ID'] := username; 
    FRpt.Database.Tables[i].ConnectionProperties.Item['Password'] := password; 
    try 
     { 
     Some reports use direct connections, and others use an ODBC Data Source. 
     Crystal XI uses a different label to refer to the database name in each 
     method. 
     I don't know how to determine in advance which method is being used, so: 
      First, we try the direct connection. 
      If that fails, we try the "data source" method. 

     Reference: "Crystal Reports XI Technical Reference", pages 41 thru 46; 
       "Common ConnectionProperties" 
     } 
     FRpt.Database.Tables[i].ConnectionProperties.Item['Server'] := server; 
    except on E: Exception do 
     FRpt.Database.Tables[i].ConnectionProperties.Item['Data Source'] := server; 
    end; 
    end; 
end; 

Idéalement, je voudrais dire quelque chose comme:

case FRpt.Database.Tables[i].ConnectionProperties.ConnectMethod of 
    crymethod_ODBC : sIdx := 'Data Source'; 
    crymethod_Direct : sIdx := 'Server'; 
    ...other methods... 
end; //case 
FRpt.Database.Tables[i].ConnectionProperties.Item[sIdx] := server; 

Alors ma question est:

Comment puis-je déterminer la méthode de connexion d'un rapport Crystal XI à l'exécution, avant de se connecter?

Informations générales:

  • J'utilise Delphi 2007
  • Je afficher le rapport en utilisant la bibliothèque ActiveX , ce qui est lourd et difficile et stupide et inévitable (see this post).
  • Les rapports sont à Crystal XI, SP4
  • Par souci de discussion, supposons que les rapports sont tous contre une base de données Oracle 10g
  • Ma machine dev utilise Windows Vista, la plupart des utilisateurs sont sur XP.

Un grand merci pour toute aide que quelqu'un peut offrir.

Répondre

3

Recherchez un élément DSN dans les tables [i] .ConnectionProperties. Non-ODBC ne l'aura pas, ODBC devrait toujours, AFAIK.

Questions connexes