Crystal XI e VB 2005 - Accesso non riuscito

giovedì 02 dicembre 2010 - 16.54
Tag Elenco Tags  VB.NET  |  Windows XP  |  Visual Studio 2005  |  SQL Server 2005  |  SQL Server Express  |  Crystal Reports XI

pulce2010 Profilo | Newbie

Salve a tutti.
Ho un'applicazione fatta in vb net 2005 standard edition. Uso crystal report XI per la generazione di report.
Il database in oggetto è su sql server express edition 2005.
Da Vb net accedo e lavoro tranquillamente ai dati tramite autenticazione sql server con l'utente "sa".
Anche la progettazione dei report è fatta attraverso un dsn sql server con autenticazione sql con utente "sa".

Al momento del lancio della stampa mi esce il seguente errore:
"Accesso non riuscito: dettagli - codice fornitore database 18456".


Di seguito posto il codice relativo. Utilizzo una form che si chiama frmreport che viene richiamata e che contiene l'oggetto crystal viewer.

--------------------------------------------------------------------------
Dim Crxreport As New CRAXDRT.Report
Dim crxApplication As New CRAXDRT.Application

Dim i As Integer
Me.Cursor = Cursors.WaitCursor


Crxreport = crxApplication.OpenReport(RptPath() & "report.rpt")


frmReport.CrViewer1.ReportSource = Crxreport
frmReport.CrViewer1.ViewReport()
frmReport.Show()
--------------------------------------------------------------------------------------------------

Grazie mille in anticipo, Lorenzo.


16-12-2010

Ho risolto i problemi legati a questo aspetto. Sono da poco passato al vb net, la mia conoscenza si basa sul vb 6 e quindi sui controlli com, da qui derivavano i miei problemi.
Due sono gli aspetti da cambiare:

1)Non ha più senso usare la libreria CRAXDRT.dll, ma importare ed usare "CrystalDecisions.CrystalReports.Engine" e "CrystalDecisions.Shared".
2)Visto che uso un dsn utente per collegare i dati al report, sbagliavo nell'usare il driver di sql server. Quello corretto è il driver di sql server native client.

Posto il codice che uso per lanciare le stampe tramite un "button".

---------------------------------------------------------------------------------
Dim cryRpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
Dim crtableLogoninfos As New CrystalDecisions.Shared.TableLogOnInfos
Dim crtableLogoninfo As New CrystalDecisions.Shared.TableLogOnInfo
Dim crConnectionInfo As New CrystalDecisions.Shared.ConnectionInfo
Dim CrTables As CrystalDecisions.CrystalReports.Engine.Tables
Dim CrTable As CrystalDecisions.CrystalReports.Engine.Table

Me.Cursor = Cursors.WaitCursor


cryRpt.Load(RptPath() & "rpt.rpt")


crConnectionInfo.ServerName = "XXX" ' Questo è il nome del dsn utente
crConnectionInfo.DatabaseName = "YYYY"
crConnectionInfo.UserID = "aa"
crConnectionInfo.Password = "bbbbbb"

CrTables = cryRpt.Database.Tables
For Each CrTable In CrTables
crtableLogoninfo = CrTable.LogOnInfo
crtableLogoninfo.ConnectionInfo = crConnectionInfo
CrTable.ApplyLogOnInfo(crtableLogoninfo)
CrTable.Location = crConnectionInfo.DatabaseName & ".dbo." & CrTable.Location.Substring(CrTable.Location.LastIndexOf(".") + 1)
Next


frmReport.CrViewer1.ReportSource = cryRpt
frmReport.CrViewer1.Refresh()

frmReport.Show()
cryRpt.Dispose()
Me.Cursor = Cursors.Default
------------------------------------------------------------------------

Ciao a tutti, Lorenzo.

freeteo Profilo | Guru

Ciao Lorenzo,
grazie anche per aver postato la soluzione, e concordo con te su quanto hai scritto.
Inoltre aggiungo che se hai bisogno di un esempio utile per come fare puoi dare un'occhiata a questo post:
http://www.dotnethell.it/articles/Crystal-Reports-Integration-Windows-Form.aspx

l'esempio mostra anche qualcosa di avanzato (cambio di un gruppo dinamicamente) ma cmq ti può tornare utile per capire come si possono passare dei dati ad un report.

ps: Se hai problemi con C# puoi usare questo convertitore: http://www.carlosag.net/Tools/CodeTranslator/

Ciao.

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

pulce2010 Profilo | Newbie

Grazie Matteo.. molto interessante anche il link per la conversione tra i due linguaggi.

Ciao, Lorenzo.

freeteo Profilo | Guru

>Grazie Matteo..
di nulla fiugurati siamo qui per questo


>molto interessante anche il link per la conversione
>tra i due linguaggi.
sì effettivamente può tornare molto comodo in parecchie situazioni, anche quando non trovi gli esempi che ti servono nel tuo linguaggio, e fai veramente un lampo a farteli convertire...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
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