Estrarre solo i primi records di una query in un grafico

lunedì 01 dicembre 2008 - 14.18

danilolc Profilo | Newbie

Avrei la necessità di estrarre in un grafico solo i primi 20 record di una determinata, ovvero fare una cosa del genere :

select * from lavori where lav_iid = 'd' and rownum <= 20

qualcosa sa come fare questo in Crystal Reports ?
Ho provato a passare la condizione "Rownum <= 20" a RecordSelectionFormula dell'oggetto di report in .NET ma ho un errore.

Grazie!
ciao.

freeteo Profilo | Guru

Ciao,
non ho capito se vuoi avere solo 20 record nel report, o se nel report li vuoi tutti ma il grafico con soli 20.

Cmq sia, per il caso più semplice, puoi agire a monte, ossia fare la query sul db con cui costruisci il report, e specificare la clausola "TOP" nella select:
SELECT TOP 20 * FROM ... WHERE ...
e costruire il report con quella.

Per poter impostare questa stringa sql, nell'esperto database, ti basta evitare di tirare dentro tutta la tabella dal db, ma scegliere il nodo "Comando" e aggiungendo quello hai a disposizione una casella di testo dove scriverla.


Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

danilolc Profilo | Newbie

Sto cercando di utilizzare l'opzione che mi hai consigliato del "comando" invece delle tabelle.

Se creo un comando funziona tutto, però nel momento in cui inserisco una qualsiasi formula di selezione (o tramite "esperto selezione" o tramite codice runtime .NET) il report non mi estrae nulla e mostra una pagina bianca.

Vorrei provare ad agire sul "comando" che ho creato da runtime, andando a modificarlo : è possibile ?

grazie!
ciao.

freeteo Profilo | Guru

Ciao,
si devi scrivere la query con " ...WHERE... = {?nomeparametro} " e poi passare il parametro normalmente come se lo usassi nel report.
Questo thread parla proprio di questo:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=26217


Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

danilolc Profilo | Newbie

Il fatto è che io non devo fare un semplice report con una sola condizione; nel mio applicativo il report viene "costruito" sulla base di determinate scelte dell'utente, e quindi anche le condizioni cambiano.

Ero riuscito a fare il tutto usando la RecordSelectionFormula, ma, motivo per cui ho aperto il thread, non riesco ad utilzzare la condizione ROWNUM di Oracle per estrarre solo i primi 20 record dal report e non tutti.

Ora ho provato a seguire i tuoi consigli, però da quel che ho capito devo creare dei parametri fissi nel comando, mentre la mia condizione, come detto, cambia sulla base di determinate scelte fatte dall'utente. Per questo motivo chiedevo se c'era la possibilità in qualche modo di "costruire" il comando da runtime di .NET e poi passarlo a crystal report.

Spero di essermi spiegato bene e non essere stato confusionario ...

Ciao!

freeteo Profilo | Guru

>Il fatto è che io non devo fare un semplice report con una sola
>condizione; nel mio applicativo il report viene "costruito" sulla
>base di determinate scelte dell'utente, e quindi anche le condizioni
>cambiano.
si ok puoi mettere vari parametri che da codice passi al report il quale li usa per fare la query sul db e tornarti i dati.


>Ero riuscito a fare il tutto usando la RecordSelectionFormula,
>ma, motivo per cui ho aperto il thread, non riesco ad utilzzare
>la condizione ROWNUM di Oracle per estrarre solo i primi 20 record
>dal report e non tutti.
ma tu stai accedendo a Oracle o a Sql? cmq se devi estrarre i primi 20 record di una tabella, ti basta fare:
select top 20 * form tabella
e mettere eventualmente "order by ... desc" se vuoi gli ultimi 20 e non i primi 20.


>Ora ho provato a seguire i tuoi consigli, però da quel che ho
>capito devo creare dei parametri fissi nel comando, mentre la
>mia condizione, come detto, cambia sulla base di determinate
>scelte fatte dall'utente. Per questo motivo chiedevo se c'era
>la possibilità in qualche modo di "costruire" il comando da runtime
>di .NET e poi passarlo a crystal report.
si con il report puoi mettere solo quei determinati parametri, ma puoi usare quei parametri ed anceh il selectionformula come hai fatto prima.
Quindi puoi usare un comando per fare il top 20 e poi cmq puoi usare il reportFormula per fare il "where" dinamico diciamo...tanto quest'ultimo è un filtro che viene messo dopo che ha fatto la query.

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

danilolc Profilo | Newbie

>ma tu stai accedendo a Oracle o a Sql? cmq se devi estrarre i
>primi 20 record di una tabella, ti basta fare:
>select top 20 * form tabella
>e mettere eventualmente "order by ... desc" se vuoi gli ultimi
>20 e non i primi 20.
Utilizzo come db oracle, ed in oracle non esiste la clausola TOP da usare nella select, ma è necessario utilizzare il ROWNUM (es. SELECT * FROM tabella WHERE ROWNUM <= 20) per estrarre solo "n" records dalla query.

In ogni caso, ho scoperto che (è proprio vero che Crystal Report non lo so ancora usare bene.... ) è possibile in un grafico far vedere solo i primi "n" elementi di una query in base ad un determinato campo; quindi ho risolto con un compromesso : estraggo comunque tutto usando la Recordselection (quindi senza il ROWNUM che, a quanto pare, non piace al DB se passato da runtime di .NET) e poi visualizzo nel report solo il grafico con la clausola di visualizzare solo i primi 20 elementi.

Grazie!
ciao.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5