Flag "salva dati nel report"

lunedì 17 novembre 2008 - 16.01

yuri85 Profilo | Junior Member

Ciao, ora ho un altro problema ..

Se da Crystal report lascio flaggata l'opzione "salva dati con report" funziona la stampa ma ovviamente solo dei dati salvati in fase di progettazione del report.

Io invece voglio poter interrogare direttamente il database con i record aggiornati.

Ho quindi toltoi l flag da "salva dati con report" ma facendo così non funziona più .. cosa manca?

posto il codice

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

cosa manca? grazie ...

freeteo Profilo | Guru

Ciao,
cosa intendi per "non funziona più" ?

Il codice sembra corretto, dipende però dal tipo di errore o mancato funzionamento che hai a runtime, prova ad essere più preciso su questo.
Grazie.
ciao.

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

yuri85 Profilo | Junior Member

non funziona in quanto genera un eccezione.

Errore nel file c:\Temp\stampacliente {1F3A718B-3930-4035-8FE3-87171D469CED}.rpt:
Impossibile collegarsi: accesso ai parametri non corretto.

freeteo Profilo | Guru

Ciao,
l'errore è di qualche parametro di accesso al db che non è corretto sembra...hai percaso agganciato il report a SQL ?
In questo caso potrebbe essere un problema della proprietà "location" delle tables del report, come spiegato qui:
http://www.dotnethell.it/Forum/messages.aspx?ThreadID=5303

ciao.

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

yuri85 Profilo | Junior Member

scusami teo, cosa significa agganciato il report a sql?

il database è in sql server

yuri85 Profilo | Junior Member

ho visto il link che mi hai segnalato.

Purtroppo non riesco a capire come adattarlo alla mia soluzione. Il codice è quello che ho postato all'inizio.

Esattamente cosa e come va aggiunta la location?

freeteo Profilo | Guru

Se hai costruito il report attaccandoti ad un database SqlServer.

Cmq quello che ti dicevo, devi farlo dove vengono impostati i parametri di connessione delle tabelle, ossia qui:
Private Sub SetDBLogonForReport(ByVal ...... As ReportDocument) Dim myTables As Tables = myReportDocument.Database.Tables For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo myTableLogonInfo.ConnectionInfo = myConnectionInfo myTable.ApplyLogOnInfo(myTableLogonInfo) '--- qui myTable.Location = myTable.Location.Substring(myTable.Location.LastIndexOf(".")+1) Next End Sub
non è detto che sia questo il problema, però lo puoi verificare, anche a debug impostando un breakpoint e verificando come sono i parametri di connessione prima che li imposti, e appena dopo che li hai impostati, se è rimasto qualcosa di "sporco".

Ciao.

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

yuri85 Profilo | Junior Member

>Se hai costruito il report attaccandoti ad un database SqlServer.
>
>Cmq quello che ti dicevo, devi farlo dove vengono impostati i
>parametri di connessione delle tabelle, ossia qui:
>Private Sub SetDBLogonForReport(ByVal ...... As ReportDocument)
>
> Dim myTables As Tables = myReportDocument.Database.Tables
>
>For Each myTable As CrystalDecisions.CrystalReports.Engine.Table
>In myTables
>Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
> myTableLogonInfo.ConnectionInfo = myConnectionInfo
> myTable.ApplyLogOnInfo(myTableLogonInfo)
>
> '--- qui
>myTable.Location = myTable.Location.Substring(myTable.Location.LastIndexOf(".")+1)
> Next
>
>End Sub
>non è detto che sia questo il problema, però lo puoi verificare,
>anche a debug impostando un breakpoint e verificando come sono
>i parametri di connessione prima che li imposti, e appena dopo
>che li hai impostati, se è rimasto qualcosa di "sporco".
>
>Ciao.
>
>Matteo Raumer
>[MVP Visual C#]
>http://blogs.dotnethell.it/freeteo

ora sulla riga che mi hai postato tu -> myTable.Location = myTable.Location.Substring(myTable.Location.LastIndexOf(".")+1)


mi da il seguente errore:

Accesso non riuscito.
Dettagli: 28000:[Microsoft][ODBC SQL Server Driver][SQL Server]Impossibile eseguire l'accesso per l'utente 'utente'

se vuole l'odbc, io l'ho già creato ..

ti riporto il codice:

Dim myTables As Tables = rptdocument.Database.Tables

For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables

Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
myTable.LogOnInfo.ReportName = "stampacliente"
myTableLogonInfo.ConnectionInfo = myConnectionInfo
myTable.ApplyLogOnInfo(myTableLogonInfo)
myTable.Location = myTable.Location.Substring(myTable.Location.LastIndexOf(".") + 1)

Next

dove 'myconnectioninfo' contiene:

myConnectionInfo.ServerName = Server
myConnectionInfo.DatabaseName = Database
myConnectionInfo.UserID = UserID
myConnectionInfo.Password = Password
myConnectionInfo.Type = ConnectionInfoType.SQL
myConnectionInfo.IntegratedSecurity = True

ho controllato .. e i parametri che passo sono "puliti" ...

freeteo Profilo | Guru

ciao,
ma quando dici "myConnectionInfo.IntegratedSecurity = True" vuol dire che stai usando l'utente di Windows per connetterti al database è corretto?
Potrebbe essere quello il problema.

Ciao.

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

yuri85 Profilo | Junior Member

>ciao,
>ma quando dici "myConnectionInfo.IntegratedSecurity = True" vuol
>dire che stai usando l'utente di Windows per connetterti al database
>è corretto?
>Potrebbe essere quello il problema.
>
>Ciao.
>

si, avevo sbagliato in quanto uso le credenziali di sql. Però anche togliendolo o mettendo "false" ho lo stesso errore.

freeteo Profilo | Guru

Ciao,
io ho usato un codice di questo tipo (primo listato della risposta accettata):
http://www.dotnethell.it/forum/messages.aspx?ThreadID=21962

è molto simile al tuo, ma noto che non è esattamente uguale, in quanto viene impostato anche il tableName.
A me è sempre funzionato correttamente.

Ti consiglio nuovamente di usare un breakpoint e provare a verificare direttamente le impostazioni delle varie tabelle a runtime, nella finestra "Watch".

Se non ne dai fuori, prova con un progettino temporaneo, con un report semplicissimo (senza sottoreport,con una sola tabella etc... ) per capire se così va, che l'errore non sia da qualche parte, in qualche oggetto del report (tipo magari hai un sottoreport e quindi nel codice che hai scritto prima, non hai impostato i parametri di accesso per le sue tabelle).

Ciao.

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

yuri85 Profilo | Junior Member

Ok ora faccio delle prove su un nuovo progetto ..

Prima ti chiedo però a cosa si riferiscono "tabella" e "miaTabellaDelDatabase"

Dim mioreport as new ReportDocument()
mioreport.Load("c:\...\mioreport.rpt")

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 = "miaTabellaDelDatabase"
mioreport.Database.Tables(0).ApplyLogOnInfo(logOnInfo)

CrystalReportViewer1.ReportSource = mioreport

... tra l'altro se nel report ci sono più tabelle collegate, devo passare tutti i tablename?

grazie mille

freeteo Profilo | Guru

ciao,
"tabella" è il nome della tabella che hai nel report, ossia quello che trovi nella finestra "field explorer", come nodo di tabella, dalla quale trascini dentro i campi nel report.

"miaTabellaDelDatabase" è invece il nome della tabella che hai nel database, da dove vuoi leggere i dati, che tipicamente sarà la stessa, ma potrebbe anche essere diversa.

Ciao.

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

yuri85 Profilo | Junior Member

ho constatato che se lancio la stampa di un report al quale è collegata una sola tabella, il mio listato funziona senza problemi.


Se uso un report al quale sono collegate più tabelle, come nel mio caso, produce l'errore descritto precedentemente.

Ora, devo mettere tanti tablename quante sono le tabelle collegate?


yuri85 Profilo | Junior Member

ho controllato ... in questa sub passa senza problemi i nomi delle 4 tabelle collegate

'settaggio reports
Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument)

Dim myTables As Tables = rptdocument.Database.Tables

Dim i As Integer = 0

For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables

Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo


myTable.LogOnInfo.ReportName = "stampacliente.rpt"
myTableLogonInfo.ConnectionInfo = myConnectionInfo
myTable.ApplyLogOnInfo(myTableLogonInfo)
myTable.Location = myTable.Location.Substring(myTable.Location.LastIndexOf(".") + 1)

Next

End Sub

l'errore viene sempre generato sulla riga myTable.Location = myTable.Location.Substring(myTable.Location.LastIndexOf(".") + 1)
: Accesso non riuscito.
Dettagli: 28000:[Microsoft][ODBC SQL Server Driver][SQL Server]Impossibile eseguire l'accesso per l'utente 'utente'.
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