Errore Crystal Reports

giovedì 10 luglio 2008 - 08.56

Buffalo Profilo | Newbie

Un grazie in anticipo a chi mi risponderà e aiuterà a capire qualcosa di questo maledetto Crystal..
Uso visual studio 2005

Sto cercando di passare una tabella al crystal.. (struttura programma: form in cui verranno stabiliti dei criteri di ricerca --> button "stampa" in cui faccio query nel mio database SqlServer in base ai criteri del form, creo una tabella contenente i risultati delle mie query e passaggio di questa tabella a crystal..)

posto il codice del passaggio della tabella

Dim Tabella As New DataTable()
Dim Riga As System.Data.DataRow
Dim mioreport As New MyReport()

Tabella = New DataTable("Tabella")
Tabella.Columns.Add("IDRow", System.Type.GetType("System.Int64"))
Tabella.Columns("IDRow").AutoIncrement = True
Tabella.Columns.Add("Colonna1", System.Type.GetType("System.String"))
Tabella.Columns.Add("Colonna2", System.Type.GetType("System.String"))


Riga = Tabella.NewRow
Riga!colonna1 = "ciao"
Riga!colonna2 = "bravo"
Tabella.Rows.Add(Riga)


mioreport.Load("C:\Documents and Settings\Becchetti\Desktop\Programmi in VisualStudio 2005\Start And Stop Evolution 2.1\Start And Stop Evolution 2.1\myreport.rpt")
mioreport.SetDataSource(Tabella)
FrmRisStat.CrystalReportViewer2.ReportSource = mioreport

La tabella viene creata giusta, il problema è questo errore che mi da crystal..

"Impossibile stampare la sezione di questo gruppo. Il campo di condizione non esiste o non è valido. Formattare la sezione per scegliere un altro campo di condizione.
Errore nel file C:\Docume........... .rpt: Condizione gruppo non valida"

Dopo questo errore il report viene stampato vuoto..

Quando ho creato il report Prova o seguito la procedura guidata per creare delle tabelle e sono andato a prendermi due tabelle del mio database tanto per avere una struttura..
Ma come diavolo faccio a mettere quello che ho nella tabella creata da codice nella struttura del report??????

grazie mille a tutti

freeteo Profilo | Guru

ciao,
quando crei un report, decidi una struttura, e questa deve essere passata al report, o cmq reperita dal report stesso, in modo che il report diventi il "telaio" di una serie di dati ripetuti e elaborati.

Quindi se da codice sai che gli passerai alcuni dati, che appunto come dicevi arrivano da una tua query su db, ti basta creare il report con quella query,e non creare il report con una tabella intera, o cmq che si trova ad avere diversa struttura.
In poche parole se al report passi 2 campi, devi fare un report che ha come sorgente dati e quindi come campi "trascinabili" sul report., esattamente gli stessi campi. A runtime cambieranno i valori, e/o la posizione di questi dati, ma il resto (tipo e ordine) deve rimanere uguale.

Se la tua domanda è "come faccio a passare una query invece di dare un'intera tabella come sorgente dati del report", la risposta è aggiungendo un comando al posto della tabella, quando disegni il report:

564x393 83Kb

Quando fai "add command" si apre una finestra dentro alla quale puoi scrivere una query su un db, ovvero la query che torni quei "n" campi che dopo passi a runtime.

Se non ce li hai, creati una query finta, tanto quello che serve a lui è capire cosa gestire, non avere o meno un db corretto, quindi puoi scrivere:
SELECT 'matteo' as campoTesto, 1234 as campoNumero FROM tabella
Al report appariranno 2 campi, che poi tu passerai tramite la DataTable creata a runtime...spero di esserti stato d'aiuto

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Buffalo Profilo | Newbie

Grazie mille, sei gentilissimo.. Spero di non approfittarne troppo

Avevo provato a pensare una cosa del genere, ma anziche OLE DB io puntavo ad ODBC dato che di tutti quelli era l' unico che trovava il mio database.. Però poi quando andavo a fare le query, mi diceva che c'era sempre un errore..
Ma se io la query la passo da codice, che bisogno ho per forza di dover dare una query a Crystal? Non si possono impostare solo i campi del report????

Tornando all OLE DB, mi trova il server, però non riesce a trovare il database (il database non è sul mio pc ma su di un server).. Infatti l' elenco a tendina è vuoto (mentre con ODBC trovava già in automatico) e scrivendo io il nome del database poi non mi fa andare avanti dicendo connessione non riuscita..

Devo impostare qualcosa? esempio strumenti amministrazione nel pannello di controllo??

Grazie mille davvero!!!

SImone

Buffalo Profilo | Newbie

Ok sono riuscito a trovare il percorso da OLE DB.. Perfetto ora non mi da nessun errore.. Quindi la tabella che creo (come da sopra) penso venga data in pasto correttamente al report..

Piccolo problema..

Non mi visualizza nulla! Quando puntavo direttamente ad una tabella del database e componevo il report, veniva visualizzato il report contenente i dati dei campi della tabella che avevo scelto..

Ora nell' esperto database c'è il mio bellissimo comando contenente la mia query : "select campo1 as Colonna1, campo2 as Colonna2 from MiaTabella"

Dove mi visualizza questa ricerca?? c'è un oggetto da mettere nel report in cui far puntare la mia query??

Grazie mille

Simone

freeteo Profilo | Guru

>Ma se io la query la passo da codice, che bisogno ho per forza di dover dare una query a Crystal? Non si possono impostare >solo i campi del report????
il fatto di dare un collegamento al db è proprio il fatto di dare al report una serie di campi, poi da dove arrivino si vedrà, l'importante è che arrivino quei campi intesi come nome, ordine e tipologia.


>Ok sono riuscito a trovare il percorso da OLE DB.. Perfetto ora
>non mi da nessun errore.. Quindi la tabella che creo (come da
>sopra) penso venga data in pasto correttamente al report..
questo lo vedi nella finestra "Field Explorer" da report aperto (crystal report->field explorer) dove vedi la lista dei campi, i campi formula etc...



>Piccolo problema..
>Non mi visualizza nulla! Quando puntavo direttamente ad una tabella
>del database e componevo il report, veniva visualizzato il report
>contenente i dati dei campi della tabella che avevo scelto..
hai messo i campi "campo1, campo2" trascinandoli dalla finestra che ti dicevo prima? altrimenti non visualizza nulla di sicuro



>Ora nell' esperto database c'è il mio bellissimo comando contenente
>la mia query : "select campo1 as Colonna1, campo2 as Colonna2
>from MiaTabella"
>Dove mi visualizza questa ricerca?? c'è un oggetto da mettere
>nel report in cui far puntare la mia query??
si ti dicevo, i 2 campi disponibili li trovi in quella finestra
Ti lascio un link di aiuto:
http://msdn.microsoft.com/en-us/magazine/cc301570.aspx


>Grazie mille
di nulla, spero di esserti stato utile


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Buffalo Profilo | Newbie

Avendo inserito la query da OLE DB mi ha creato gli oggettini da trascinare nell' Exporer campo aventi i nomi dei campi che scelgo da query..

Li trascino e cliccando su Anteprima Report Principale (non in debug) mi fa vedere la lista dei due campi valorizzati con il contenuto della tabella del mio database che ho messo nella query.. Perfetto, vuol dire che lo trova..

Però a me serve che al posto di quei dati ci siano le cose che passo da codice con la tabella che compongo io!

Il codice che ti ho scritto nel primo post è corretto?

A me sembra corretta la logica..

Do in pasto al Crystal una query tanto per avere i due campi, poi da codice riempio questi due campi con quello che passo da codice..

Però ora come ora quando lancio non mi visualizza nulla.. Mentre in progettazzione mi fa vedere i dati che ho nella tabella del database

Ce la farò!!

freeteo Profilo | Guru

>Però a me serve che al posto di quei dati ci siano le cose che
>passo da codice con la tabella che compongo io!
>Il codice che ti ho scritto nel primo post è corretto?
si è corretto, controlla a debug cosa c'è dentro al report, in particolare nella proprietà "Database.Tables" e vedi se corrisponde a quelllo che ti aspetti, e se le tabelle hanno i dati che gli hai effettivamente passato.


L'unica mia differenza è che carico sempre un nuovo oggetto, con il codice che trovi qui:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=21962
(il tuo caso è SetDataSource ovviamente)

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Buffalo Profilo | Newbie

Si la tabella viene creata correttamente.. una riga con le sue colonne che gli passo da codice.

Ora provo a dichiararlo come new ReportDocument

Solo che mi da errore new ReportDocument, devo cercare nei vari imports

Grazie mille per la pazienza, mi stai dando una grande mano!!!!

Buffalo Profilo | Newbie

Niente da fare, con questo codice il report in debug mi esce vuoto.. Se commento questo pezzo mi esce giusto con i dati della query che passo da esperto database..


Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine

Dim Tabella As New DataTable()
Dim Riga As System.Data.DataRow
Dim mioreport As New ReportDocument


Tabella = New DataTable("Tabella")
Tabella.Columns.Add("IDRow", System.Type.GetType("System.Int64"))
Tabella.Columns("IDRow").AutoIncrement = True
Tabella.Columns.Add("Colonna1", System.Type.GetType("System.String"))
Tabella.Columns.Add("Colonna2", System.Type.GetType("System.String"))


Riga = Tabella.NewRow
Riga!colonna1 = "1"
Riga!colonna2 = "10"
Tabella.Rows.Add(Riga)

Riga = Tabella.NewRow
Riga!colonna1 = "2"
Riga!colonna2 = "20"
Tabella.Rows.Add(Riga)



mioreport.Load("C:\Documents and Settings\Becchetti\Desktop\Programmi in VisualStudio 2005\Start And Stop Evolution 2.1\Start And Stop Evolution 2.1\myreport.rpt")
mioreport.SetDataSource(Tabella)
FrmRisStat.CrystalReportViewer1.ReportSource = mioreport


Ma basta quel "setdatasource(tabella)" per dire di mettere le mie due righe che creo qua sopra nella struttura report che gli creo nell' esperto???

Se no vorrei girare il problema, se è possibile...
Tutto sto casino solo perchè io ho bisogno di creare un report "dinamico"; cioè in base a delle scelte che fa l' utente io mi compongo le query di conseguenza e le do in pasto al crystal..

Ora se la strada sopra indicata non mi porta a niente (che nervi però, non capisco il perchè!!) posso gestire le mie query dinamiche direttamente dall' esperto?? non credo però..

In ultima soluzione sto pensando di crearmi delle tabelle nuove nel mio database ad ogni query e poi puntare con l' esperto alle nuove tabelle.. però mi sembra assurdo fare tutto sto giro..

Non so più dove sbattere la testa!!

freeteo Profilo | Guru

>Ma basta quel "setdatasource(tabella)" per dire di mettere le
>mie due righe che creo qua sopra nella struttura report che gli
>creo nell' esperto???
si, guardati l'allegato di esempio di questo articolo:
http://www.dotnethell.it/articles/Crystal-Reports-Integration-Windows-Form.aspx
come vedi ci sono vari modi, ma il tuo è quello corretto dato che gli carichi tu i dati che ti servono


>Se no vorrei girare il problema, se è possibile...
>Tutto sto casino solo perchè io ho bisogno di creare un report
>"dinamico"; cioè in base a delle scelte che fa l' utente io mi
>compongo le query di conseguenza e le do in pasto al crystal..
ok mi sembra la scelta giusta


>Ora se la strada sopra indicata non mi porta a niente (che nervi
>però, non capisco il perchè!!) posso gestire le mie query dinamiche
>direttamente dall' esperto?? non credo però..
diciamo di no, a meno di non usare i parametri nella query dell'esperto, però dovresti sapere già su che campi vuoi fare i filtri.
Poi passi al report i parametri tramite "SetParameter(..)" e quelli li usa per fare la query.


>In ultima soluzione sto pensando di crearmi delle tabelle nuove
>nel mio database ad ogni query e poi puntare con l' esperto alle
>nuove tabelle.. però mi sembra assurdo fare tutto sto giro..
no no, è solo un problema da qualche parte, il procedimento è corretto, casomai allega un progetto di esempio, o se preferisci mandamelo via email e te lo correggo.
Il progetto, dovrebbe contenere anche un db di esempio oltre al report e al codice, così posso fare un test "reale".

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Buffalo Profilo | Newbie

sei gentilissimo.. Ti devo una birra

ora sono impegnato con un problema subentrato stamattina..

Poi guardo il link che mi hai messo, ci giro un pò su e poi se proprio non riesco ti mando il progetto!!!

grazie ancora..

Simone

Buffalo Profilo | Newbie

Ciao, dove posso reperire la tua mail?

Dal modulo di contatto del tuo blog non posso mettere allegati..

Ciao e grazie

freeteo Profilo | Guru

>Ciao, dove posso reperire la tua mail?
guarda il mio profilo su questo forum, è visibile anche la mail per chi come te è iscritto.


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

freeteo Profilo | Guru

ciao,
ho ricevuto la mail ed è guardato il tuo problema, e dato che è una cosa importante ti rispondo qui.

Il tuo problema è che hai creato il report con 2 campi, e da codice gli passi una datatable con 2 campi, ma i campi hanno nome diverso! nel tuo report con il comando hai fatto 2 campi "bella, brutta" e da codice gli passi "colonna1, colonna2".

Ti avevo detto prima, e lo sottolineo ancora che è una cosa FONDAMENTALE per i report, avere a design time la stessa struttura che gli dai da codice, in termini di posizione, tipologia ma soprattutto di "Nome" dei campi, che siano essi derivanti da query su db, o da oggetti (in quest'ultimo caso il nome è quello delle proprietà dell'oggetto).

Per quanto ti riguarda quindi, ti basta modificare:
Tabella.Columns.Add("Bella", ... Tabella.Columns.Add("Brutta", ... ...etc...
in modo da allineare il report con i campi della datatable.


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Buffalo Profilo | Newbie

15 luglio..

San Freeteo!!!!!!

Grazie mille, ho provato a modificare i nomi ed ora finalmente riesco a vedere nel report quello che gli passo da codice..
Ora mi sono arrivate altre priorità da fare, poi mi tuffo nel Crystal!!

grazie mille ancora, davvero!!!

ciao
Simone

freeteo Profilo | Guru

>15 luglio..
>San Freeteo!!!!!!
ahaha


>Grazie mille, ho provato a modificare i nomi ed ora finalmente
>riesco a vedere nel report quello che gli passo da codice..
>Ora mi sono arrivate altre priorità da fare, poi mi tuffo nel
>Crystal!!
ok, se hai risolto accetta una risposta utile così chiudiamo il thread.

Grazie.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5