2011-02-16 61 views
6

Crystal Version - Crystal Reports 2008 Business Objects - XICrystal Reports - Adición de un parámetro de consulta de un 'Comando'

he escrito una consulta para rellenar un informe integrado y quieren tirar adentro de un parámetro a la consulta basada en la entrada de un usuario. Mi pregunta es, ¿cuál es la sintaxis correcta Tengo que poner en la primera línea de la cláusula 'Dónde' para aceptar el parámetro?

Ésta es la consulta que estoy usando en Crystal Reports:

Select 
Projecttname, 
ReleaseDate, 
TaskName 

From DB_Table 

Where 
(Project_Name like {?Pm-?Proj_Name})) and 
(ReleaseDate) >= currentdate 
+0

He intentado declarar y establecer una variable en la parte superior del SQL y todavía no veo el parámetro que selecciono en el SQL, cuando miro el SQL del subinforme. ¿Estoy haciendo algo mal? declarar varchar @ProjName (200) conjunto @ProjName = '{? PM-? proj_name}' Seleccionar Projecttname, ReleaseDate, TaskName De DB_Table Dónde (Project_Name) como @ProjName y (ReleaseDate)> = fecha actual –

Respuesta

6

La solución que se me ocurrió fue el siguiente:

  1. crear la consulta SQL en la herramienta de consulta dev favorita
  2. En Crystal Reports, en el informe principal, crear parámetro para pasar a la subinforme
  3. Cree un informe secundario, usando la opción 'Agregar comando' en la parte 'Datos' del 'Asistente de creación de informes' y la consulta SQL desde el # 1.
  4. Una vez que se añade el subinforme al informe principal, haga clic derecho en el subinforme, seleccione 'Cambiar Subreport Enlaces ...', seleccione el campo de enlace, y desactive 'Seleccione los datos de informe integrado sobre la base de campo:'

    NOTA: Es posible que primero tenga que agregar el parámetro con 'Seleccionar datos en el subinforme según el campo:' marcado, luego volver a 'Cambiar enlaces de subinforme' y desmarcarlo después de que se haya creado el subinforme.

  5. En el informe, haga clic en el menú 'Informe', 'Seleccionar experto', use el 'Editor de fórmulas', configure la columna SQL de # 1 igual o similar al parámetro (s) seleccionado en # 4.

       (Subreport SQL Column) (Parameter from Main Report) 
         Example: {Command.Project} like {?Pm-?Proj_Name} 
    
+2

El filtrado en el nivel de Crystal es muy ineficiente. Es mejor filtrar a nivel de base de datos cuando sea posible. – Sun

0

Prueba esto:

Select Project_Name, ReleaseDate, TaskName 
From DB_Table 
Where Project_Name like '{?Pm-?Proj_Name}' 
    And ReleaseDate >= currentdate 

CurrentDate debe ser una función de base de datos válida o campo a trabajar. Si está utilizando MS SQL Server, use GETDATE() en su lugar.

Si todo lo que desea es filtrar registros en un subinforme basado en un parámetro del informe principal, podría ser más sencillo simplemente agregar la tabla al subinforme y luego crear un enlace Nombre del proyecto entre el informe principal y el subinforme. Luego puede usar Select Expert para filtrar el ReleaseDate también.

+0

¿Funcionaría? Where Project_Name like? '{? Pm-? Proj_Name}' Cuando ejecuto la consulta y voy a 'Database', 'Show SQL', todavía veo el texto '{? Pm-? Proj_Name}' y no el parámetro que Entré. ¿Es eso correcto? –

+0

Así que he intentado declarar y establecer una variable en la parte superior del SQL. –

+0

_Mostrar SQL_ seguirá mostrando el nombre del parámetro. Supongo que quieres usar comodines en tu cláusula Where. Puede utilizar estos comodines SQL: %: coinciden todos los caracteres. _: coincide con un solo carácter. Ejemplos: 'donde Project_Name como '% {? Pm-? Proj_Name}%'' para cargar registros con Project_Name que contiene {? Pm-? Proj_Name}. 'donde Project_Name como '_ {? Pm-? Proj_Name}'' para cargar registros con Project_Name con una sola letra antes de {? Pm-? Proj_Name}. –

9

Cuando usted está en el comando, haga clic en Crear para crear un nuevo parámetro; llámalo 'nombre_del_proyecto'. Una vez que lo haya creado, haga doble clic en su nombre para agregarlo al texto del comando. Se consulta debe ser similar a:

SELECT Projecttname, ReleaseDate, TaskName 
FROM DB_Table 
WHERE Project_Name LIKE {?project_name} + '*' 
AND ReleaseDate >= getdate() --assumes sql server 

Si lo desea, enlazar el informe principal al subinforme en este campo ({project_name?}). Si no establece un enlace entre el informe principal y el informe integrado, CR le solicitará el parámetro del informe integrado.

En versiones anteriores a 2008, el parámetro de un comando solo permitía tener un valor escalar.

3
Select Projecttname, ReleaseDate, TaskName From DB_Table Where Project_Name like '%{?Pm-?Proj_Name}%' and ReleaseDate >= currentdate 

Nota las comillas simples y caracteres comodín. Acabo de pasar 30 minutos descubriendo algo similar.

Cuestiones relacionadas