Login DataLayer con Crystal Reports

sabato 24 giugno 2006 - 11.01

PSoftP Profilo | Newbie

Salve ragazzi, questo è il mio primo post e scusate se sarò impreciso... son qui per imparare

Ho un problema:
Ho un webServices che è connesso ad un database utilizzando un DataLayer.
Tramite questo DataLayer ho accesso ai dati e questi dati li utilizzo per crearmi il mio Report con CR.
Utilizzo VS2005.
Mi blocco quando mi appare la finestra di login. Come server mi propone DataLayer, ed è corretto ma non ricordo di aver mai inserito un'utente e password relativo al db. Se disabilito il login mi da questo tipo di errore:
Logon failed. Details: crdb_adoplus : Object reference not set to an instance of an object. Error in File C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\CrystalReport1 {666F1E86-B959-4F76-883C-CA8444350C6A}.rpt: Unable to connect: incorrect log on parameters.

Non so che fare in questo caso.
Sono conscio della potenzialità di CR, ma non riesco a superare questo ostacolo.
Avete qualche idea?

Grazie
PsoftP

freeteo Profilo | Guru

ciao,
se ti compare la finestra di login significa che il report non sa dove andare a pescare i dati, percio' puoi seguire 2 strade:
- impostare le proprieta' di connessione tramite le LogonInfo:
... Dim mioreport as new ReportDocument() mioreport .load(server.Mappath("....")) Dim logOnInfo As New TableLogOnInfo logOnInfo = mioreport.Database.Tables.Item("Tabella").LogOnInfo logOnInfo.ConnectionInfo.ServerName = "SERVER" logOnInfo.ConnectionInfo.DatabaseName = "miodb" logOnInfo.ConnectionInfo.UserID = "User" logOnInfo.ConnectionInfo.Password = "pwd" logOnInfo.TableName = Tabella" mioreport.Database.Tables[0].ApplyLogOnInfo(logOnInfo) CrystalReportViewer1.ReportSource = mioreport CrystalReportViewer1.DataBind(); ...


- caricare i dati in 1 datatable/dataset e poi passarlo al report con il metodo "setDataSource":
Dataset miods = new Dataset(); ... ReportDocument mioreport = new ReportDocument (); mioreport.load("....miofile mioreport .SetDataSource (miods ); ...

prova a vedere quale delle 2 ti sembra piu facile nella tua situazione
ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

PSoftP Profilo | Newbie

Scusami ma sono ancora in uno stato embrionale...

Ho adattato il codice che mi hai postato in c#:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ho sempre lo stesso errore... e poi mi connetto al db con un datalayer definito in un webservices...

lo so mi complico la vita...

Grazie
doIt with dotNet!

freeteo Profilo | Guru

ciao,
quel codice serve se devi attaccarti ad 1server Sql Oracle file Mdb etc...pero' nel tuo caso penso tu debba utilizzare la 2da opzione che ti ho detto prima, ovvero caricando i dati dal tuo webservice (referenziato nel progetto con tastDX->aggiungi riferimento Web") in un dataset e poi passandoglielo come sorgente dati del report:

Dataset miods = new Dataset(); miods = miowebservice.GetOrdini(); ReportDocument mioreport = new ReportDocument (); mioreport.load("crystalreport1.rpt"); mioreport .SetDataSource (miods); CrystalReportViewer1.ReportSource = mioreport; ...

dove miowebservice è il nome del riferimento web che scegli quando lo referenzi al progetto.
ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

PSoftP Profilo | Newbie

Ti ringrazio Matteo per la tua risposta, grazie alla quale sono arrivato alla soluzione.

Ho notato, tra i parametri del CrystalReportSource1 (dove aggancio il mio report "CrystalReport1.rpt"), che c'è una voce Report che contiene un item DataSources a cui ho agganciato il mio ObjectDataSource contenente i dati restituiti da un mio metodo ospitato nel webService.
Ti allego l'immagine per completezza:

814x377 53Kb


Solo per chiarezza, la load implicita del report, come gentilmente indicatomi da te, mi dava errore probabilmente perchè c'era già un report referenziato nel CrystalReportViewer.

Ti ringrazio ancora, sei stato utilissimo.
doIt with dotNet!

fr3nsis Profilo | Newbie

nell'evento ho scritto queste righe (nn so se ho fatto bene) ma nn va

Dim datads = New DataSet Dim mioreport = New CrystalDecisions.CrystalReports.Engine.ReportDocument() mioreport.Load("CrystalReport1.rpt") mioreport.SetDataSource(datads) CrystalReportViewer1.ReportSource = mioreport

nel progetto di esempio che ho creato , il nume del ds è datads
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