Crystal Reports – Adăugarea unui parametru la o interogare „Comandă (Programare, Rapoarte De Cristal)

Jeremy F. a intrebat.

Versiunea Crystal – Crystal Reports 2008Business Objects – XI

Am scris o interogare pentru a popula un subraport și doresc să introduc un parametru în această interogare pe baza datelor introduse de un utilizator. Întrebarea mea este: care este sintaxa corectă pe care trebuie să o introduc în prima linie a clauzei „Where” pentru a accepta parametrul?

Iată interogarea pe care o folosesc în Crystal Reports:

Select 
Projecttname,
ReleaseDate,
TaskName

From DB_Table

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

Comentarii

  • Am încercat să declar și să setez o variabilă în partea de sus a SQL și tot nu văd parametrul pe care îl selectez în SQL, atunci când mă uit la SQL din subraport. Fac ceva greșit? declare @ProjName varchar(200) set @ProjName = ‘{?Pm-?Proj_Name}’ Select Projecttname, ReleaseDate, TaskName From DB_Table Where (Project_Name) like @ProjName and (ReleaseDate) >= currentdate –  > Por Jeremy F..
4 răspunsuri
craig

Când vă aflați în Comandă, faceți clic pe Creare pentru a crea un nou parametru; numiți-l project_name. După ce l-ați creat, faceți dublu clic pe numele său pentru a-l adăuga la textul comenzii. Interogarea dvs. ar trebui să semene cu:

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

Dacă doriți, legați raportul principal de subraportul de pe acest ({?project_name}). Dacă nu stabiliți o legătură între raportul principal și cel secundar, CR vă va solicita parametrul raportului secundar.

În versiunile anterioare anului 2008, parametrul unei comenzi nu putea fi decât o valoare scalară.

Jeremy F.

Soluția pe care am găsit-o a fost următoarea:

  1. Creați interogarea SQL în instrumentul dvs. preferat de dezvoltare a interogărilor
  2. În Crystal Reports, în cadrul raportului principal, creați un parametru care să fie transmis către subraport
  3. Creați subraportul, utilizând opțiunea „Add Command” (Adăugare comandă) din partea „Data” (Date) a „Report Creation Wizard” (Expertul de creare a rapoartelor) și interogarea SQL de la punctul 1.
  4. După ce subraportul este adăugat la raportul principal, faceți clic dreapta pe subraport, alegeți „Change Subreport Links…” (Modificați legăturile subraportului…), selectați câmpul de legătură și debifați „Select data in subreport based on field:” (Selectați datele în subraport pe baza câmpului:)

    NOTĂ: Este posibil să trebuiască să adăugați inițial parametrul cu opțiunea „Select data in subreport based on field:” (Selectare date în raport secundar pe baza câmpului:) bifată, apoi să reveniți la „Change Subreport Links ” (Schimbare legături raport secundar) și să o debifați după ce a fost creat raportul secundar.

  5. În subraport, faceți clic pe meniul ‘Report’ (Raport), ‘Select Expert’ (Selectare expert), utilizați ‘Formula Editor’ (Editor de formule), setați coloana SQL de la nr. 1 fie egală cu parametrul (parametrii) selectat(i) la nr. 4, fie ca acesta(i).

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

Comentarii

  • Filtrarea la nivelul Crystal este foarte ineficientă. Este mai bine să filtrați la nivelul bazei de date atunci când este posibil. –  > Por Sun.
Lance E
Select Projecttname, ReleaseDate, TaskName From DB_Table Where Project_Name like '%{?Pm-?Proj_Name}%' and ReleaseDate >= currentdate

Observați ghilimelele simple și caracterele wildcard. Tocmai am petrecut 30 de minute pentru a găsi ceva similar.

Dileep A

Încearcă asta:

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

currentdate ar trebui să fie o funcție sau un câmp valid al bazei de date pentru a funcționa. Dacă folosiți MS SQL Server, utilizați GETDATE() în schimb.

Dacă tot ceea ce doriți este să filtrați înregistrările dintr-un raport secundar pe baza unui parametru din raportul principal, ar putea fi mai ușor să adăugați pur și simplu tabelul la raportul secundar și apoi să creați o legătură Nume_proiect între raportul principal și raportul secundar. Puteți utiliza apoi Select Expert pentru a filtra și ReleaseDate.

Comentarii

  • Ar funcționa acest lucru? Where Project_Name like ?'{?Pm-?Proj_Name}’ Când execut interogarea și merg la „Database”, „Show SQL”, văd în continuare textul „{?Pm-?Proj_Name}” și nu parametrul pe care l-am introdus. Este corect? –  > Por Jeremy F..
  • Am încercat să declar și să setez o variabilă în partea de sus a SQL. –  > Por Jeremy F..
  • Arată SQL va afișa în continuare numele parametrului. Presupun că vrei să folosești wildcards în clauza where? Puteți utiliza aceste caractere joker SQL: %: se potrivește cu toate caracterele. _: se potrivește cu un singur caracter. Exemple: where Project_Name like '%{?Pm-?Proj_Name}%' pentru a încărca înregistrări cu Nume_proiect care conțin {?Pm-?Nume_proiect}. where Project_Name like '_{?Pm-?Proj_Name}' pentru a încărca înregistrări cu Project_Name care conțin o singură literă înainte de {?Pm-?Proj_Name}. –  > Por Dileep A.
  • Declararea și setarea unei variabile nu va face nicio diferență, după părerea mea. Primiți un mesaj de eroare atunci când utilizați interogarea din răspunsul meu? Dacă da, care este acesta? –  > Por Dileep A.
  • Nu, nu am primit niciun mesaj de eroare. Cu toate acestea, când arăt interogarea subraportului, nu văd parametrul pe care l-am introdus. Văd doar: Where Project_Name like ‘{?Pm-?Proj_Name}’ – –  > Por Jeremy F..