[Vb.net] Crystal Report

mercoledì 19 maggio 2004 - 16.55

Andy Profilo | Senior Member

Ciao..allora premetto che ho iniziato da 3 ore a usare Crystal Report, (e già lo odio ^_^)..ho un problema.
Io ho un tasto "Stampa", dove chiamo un form con un CrystalReportViewer..da li io gli assegno una tabella dove prendere i dati ed il report(.cpt) creato, e testato funzionante (da "Verifica Database"); il codice del form di stampa è:

Private Rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument


Rpt.Load("C:\Progetti Vb.net\tabella.rpt", CrystalDecisions.[Shared].OpenReportMethod.OpenReportByDefault)

Rpt.SetDataSource(TblRep) ' TblRep = Mia tabella con i dati
CRW.ReportSource = Rpt ' CRW è il mio CrystalReportViewer

Problema..mi compare una dialog dove mi chiede : nome server, database, ID, password sebbene non abbia ne Id ne password su DB, e non voglio assolutamente vederla.
tanto più che posso scegliere solo tra il tasto "Fine" e il tasto "annulla"..risultato il report non legge i dati...cosa posso fare?

C' è qualcuno che può aiutarmi?

freeteo Profilo | Guru

ciao,
devi dare il percorso al report dove sta il database settando la logoninfo per le tabelle del database.
guarda questi thread:

http://www.dotnethell.it/forum/messages.aspx?ThreadID=603
http://www.dotnethell.it/forum/messages.aspx?ThreadID=198

ciao e non odiarlo è 1 buon prodotto!!! ;-)

Brainkiller Profilo | Guru

Ciao Andy,
puoi vedere anche qui:
http://www.dotnethell.it/articles/article.aspx?ArticleID=87

Scendi a metà pagina e guarda il listato n°2.

Se proprio non ti piace Crystal Reports puoi usare i Reporting Services:
http://www.dotnethell.it/articles/article.aspx?ArticleID=116

ciao
david

Andy Profilo | Senior Member

Innanzitutto vi ringrazio per le vostre ripsoste, e ora so che farò la figuraccia del noob...allora sono 2 gli errori che non riesco a capire..nel uo Articolo David (listato n.2) instanzi la classe con
TableLogOnInfo Cred = New TableLogOnInfo
e non me l'accetta, e me la trasforma in
TableLogOnInfo(Cred = New TableLogOnInfo) e segna errore.
Mentre se scrivo
Dim Cred = New TableLogOnInfo me l'accetta ma in runtime mi dice che non è instanziata -.-

Altra cosa..
CrystalRepViewer.Reportsource = Server.mappath("report.rpt")..da errore su Server.mappath(...)

Come posso risolvere?

Grazie ancora...a presto..

freeteo Profilo | Guru

ciao,
per caricare il report per andare bene ti dovresti appoggiare all'oggetto reportdocument:

ReportDocument mioreport= new ReportDocument();
mioreport.Load(Server.MapPath("report.rpt"));

e poi quando hai mioreportcaricato gli setti le proprieta di connessione (esempio che si connette a sql, in access è simile) :
CrystalDecisions.Shared.TableLogOnInfo zLogOnInfo = mioreport.Database.Tables[0].LogOnInfo;
zLogOnInfo.ConnectionInfo.ServerName = @".\netsdk";

zLogOnInfo.ConnectionInfo.DatabaseName = "database";
zLogOnInfo.ConnectionInfo.UserID = "sa";
zLogOnInfo.TableName = "tabella";

mioreport.Database.Tables[0].ApplyLogOnInfo(zLogOnInfo);

dopodiche lo dai come sorgente a il visualizzatore:
crView.ReportSource = mioreport;
crView.ViewReport (o databind non ricordo piu1 ... :-(

prova cosi dovrebbe funzionare, cmq controlla in debug i valori degli oggetti e vedi se vengono impostate o meno le proprieta' di connessione...

ciao

Andy Profilo | Senior Member

Ciao..è proprio qui il punto..già scrivendo

ReportDocument MYRep = New ReportDocument

non me l'accetta, e dandomi errore me lo trasforma in

ReportDocument(MYRep = New ReportDocument)

..forse c'è qualcosa che devo includere e non ho incluso?
Come include io ho :

Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine

..non so dove sbattere la testa..

freeteo Profilo | Guru

ciao
gli imports mi sembrano giusti ma stai scrivendo in c# o vb.net?
perche' "ReportDocument MYRep = New ReportDocument" è c# e "imports ..." e' in vb...

cmq in vb : "dim MYRep as New ReportDocument" io nel post sotto ho scritto in c#...

Andy Profilo | Senior Member

Ciao..innanzitutto grazie ancora x la disponibilità, io programmo(come da oggeto topic ^_^) in Vb.net...ma comunque non cambia..x farti capire ti posto il mio codice della form con il crstal report viewer

Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine

...
...
....

Private Rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument

' CRW è il mio crystal report viewer

Private Sub CRW_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CRW.Load

Dim Cred As New TableLogOnInfo

' Rpt è il document a cui assegno il mio file Rpt..

Rpt.Load("C:\tabella.rpt", CrystalDecisions.Shared].OpenReportMethod.OpenReportByDefault)
Cred.ConnectionInfo.ServerName = "SERVER"
Cred.ConnectionInfo.UserID = "sa"
Cred.ConnectionInfo.Password = ""
Cred.ConnectionInfo.DatabaseName = "SQL"
Cred.TableName = "TABELLA001"

CRW.LogOnInfo.Add(Cred)
CRW.ReportSource = Rpt

End Sub
End Class

Risultato? Eccezione sulla penultima riga, con testo:
'--------------------------------------------------------------------
Eccezione non gestita di tipo "System.NullReferenceException" in Gest_Imballi.exe

Informazioni aggiuntive: Riferimento a un oggetto non impostato su un'istanza di oggetto.
'--------------------------------------------------------------------

Di sicuro è una stupidata quella che faccio, ma essendoci entrato da poco non so che fare..

freeteo Profilo | Guru

mmm... succede anche se imposti la logoninfo alla tabella del database del report e non al visualizzatore?
tipo: mioreport.Database.Tables(0).ApplyLogOnInfo(Cred);

io di solito faccio cosi il visualizzatore non lo tocco mai...

Andy Profilo | Senior Member

Provato...non mi da nessun errore, ma all'apertura del crystal report viewer mi ricompare l'odiatissima quanto inutile form con le richieste del server, database, ecc...

Nb..inserendo un breakpoint prima del comando noto che "Cred" è riempita correttamente, e anche dopo il comando l'assegnamento è giunto a buon termine..i dati sono presenti..

:(

Ma è cosi complesso fare un report? ^_^

Andy Profilo | Senior Member

Attenzione..ho provato a crearmi una table da software(senza collegarmi al dataset),e ho assegnato la mia table al report (Rpt.SetDataSource(TblRep) )...
mentre nel mio file .rpt ci sono ancora i riferimenti e i campi della tabella su database sql...

E mi compare ancora il fatidico form dove chiede le info x la tabella su database..allora mi chiedo...e se il form dipendesse dal mio file .rpt, e non dal mio binding nel programma?

Ripeto, nella progettazione del report .rpt con l'opzione "Database->Verifica database" il risultato è "Database Aggiornato", ma sono sempre + sicuro che si trovi qui il problema..

..ma non ho idee..:(

Andy Profilo | Senior Member

RISOLTO!!!!

Dopo 2 ore di CRANIATE sul monitor ce l'ho fatta...non gli passo la tabella ma l'intero dataset..ho notato anche piccoli bug in crystal report x vb.net ^_^..

cmq mi sento meglio...grazie a tutti..
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