2009-04-01 36 views

Respuesta

0

Mi experiencia es con las versiones anteriores de Crystal (8,9) - No tengo idea de cómo son los formatos de archivo para las versiones más recientes. Sin embargo, vale la pena abrir los archivos en un editor de texto por si acaso, pero para los formatos de archivo que he visto, el texto de la consulta no es accesible de esta manera.

Si no recuerdo mal, algunas versiones de Visual Studio 2003 incluían herramientas para manipular Crystal .rpt (pero supongo que esto no te sirve mucho, ya que si ya lo tenías, no estarías ¡preguntando!).

No es una sugerencia muy imaginativa, pero quizás su ruta más rápida sería descargar 30-day trial version of the current Crystal Reports, y ver si eso abre los archivos para usted.

4

A la inversa, si puede ejecutar los informes, puede conectar el Analizador de SQL a su base de datos y capturar el SQL entrante en el lado de la base de datos.

5

En "Crystal Reports ActiveX Designer Design and Runtime Library" (craxddrt.dll), la propiedad Report.SQLQueryString hará lo que desee.

Parece que no puedo encontrar una propiedad equivalente en .Net SDK, y créanme, he estado buscando.

** editar **

Parece que uno puede hacer uso de la In-Process RAS Server para obtener esta información:

CrystalDecisions.ReportAppServer.DataDefModel.CommandTableClass.CommandText

+1

Lamento tener solo una votación para darte. – quillbreaker

13

Aquí está un ejemplo .Net de código que agarra el comando SQL de todos los Crystal Reports en un directorio determinado. Se requiere que el cristal 2008 .Net SDK para ser instalado (se puede descargar una prueba de SAP):

foreach (string file in Directory.GetFiles("c:\\projects\\Reports", "*.rpt")) 
{ 
    Console.WriteLine(String.Format("Processing {0}...", file)); 
    var doc = new CrystalDecisions.CrystalReports.Engine.ReportDocument(); 
    doc.Load(file); 

    foreach (dynamic table in doc.ReportClientDocument.DatabaseController.Database.Tables) 
    { 
     if (table.ClassName == "CrystalReports.CommandTable") 
     { 
      string commandSql = table.CommandText; 

      //TODO: do something with commandSql 
     } 
    } 
} 

Para obtener el SQL como Crystal construiría que cuando se ejecuta un informe, véase este enlace: SAP Note 1280515 - How to extract SQL query from Crystal reports using RAS sdk.

Creo que para esto, debe proporcionar los valores del parámetro de informe para que Crystal se pueda conectar a la base de datos para construir el SQL. En el ejemplo, dado que se utiliza un control del Visor de informes, Crystal puede solicitar al usuario los parámetros.

+0

esta debería ser la respuesta, ¡gracias! – Zakos

+1

Usted señor es un ninja. Sólo para señalar que también estaba tratando de hacer esto para subinformes. Bueno, no es compatible. Su única opción es guardar los subinformes fuera del informe principal y abrirlos como 'ReportDocument's, de esta manera puede acceder a las clases de InterOp. Ah, y no te olvides de agregar 'CrystalDecisions.ReportAppServer.ClientDoc',' CrystalDecisions.ReportAppServer.Controllers' y 'CrystalDecisions.ReportAppServer.DataDefModel', de lo contrario no se compilará. – tfrascaroli

0

En Visual Studio, seleccione el archivo .rpt y vaya al explorador de campo, haga clic derecho en DatabaseFields. Haga clic en la opción de consulta SQL para ver la consulta.

Cuestiones relacionadas