2010-05-11 3 views
5

Dopo aver trascorso da 3 a 4 ore su google cercando di trovare una soluzione al mio problema, non ho avuto molta fortuna.Accesso al database di Crystal Reports non riuscito

Fondamentalmente, utilizziamo i report Crystal per le nostre applicazioni .NET con un back-end del server SQL, abbiamo molti client ciascuno con il proprio server e quindi i nostri report devono avere le connessioni dinamicamente impostate. Fino a una settimana fa, questo ha funzionato bene. Tuttavia qualche giorno fa un cliente ha segnalato che stava ricevendo un prompt di accesso al database per un report (solo un report, il resto funzionava bene). Eravamo piuttosto stumped ma siamo riusciti a riprodurlo su un netbook che non aveva installato Visual Studio o SQL Server. Alla fine il dev ha deciso di riprodurre il rapporto nella speranza che fosse solo una stranezza in quel particolare rapporto.

Sfortunatamente un nuovo cliente oggi ha avuto lo stesso problema, ma questa volta per ogni rapporto sui cristalli ha avuto - e ha anche lavorato sul netbook, quindi siamo davvero persi qui.

Di seguito uno screenshot di ciò che i nostri clienti ottengono presentati con -

Screenshot http://img404.imageshack.us/img404/1375/loginf.png

e qui è il codice che uso per impostare le informazioni di connessione nella relazione

   cI.ServerName = (string)builder["Data Source"]; 
       cI.DatabaseName = (string)builder["Initial Catalog"]; 
       cI.UserID = (string)builder["User ID"]; 
       cI.Password = (string)builder["Password"]; 

       foreach (IConnectionInfo info in cryRpt.DataSourceConnections) 
       { 
        info.SetConnection(cI.ServerName, cI.DatabaseName, cI.UserID, cI.Password); 
       } 

       foreach (ReportDocument sub in cryRpt.Subreports) 
       { 
        foreach (IConnectionInfo info in sub.DataSourceConnections) 
        { 
         info.SetConnection(cI.ServerName, cI.DatabaseName, cI.UserID, cI.Password); 
        } 
       } 

Come sempre , qualsiasi aiuto molto apprezzato.

risposta

2

Soluzione trovata, si è scoperto che il costruttore di connessione utilizzato dal client per configurare il proprio sistema non ha inserito il nome dell'istanza. Piuttosto confusamente l'app .net ha funzionato bene con esso in quel modo. Tuttavia, con quel cristallo ordinato i rapporti ora funzionano perfettamente.

Grazie per il tuo contributo Craig.

+0

Sono di fronte a un problema simile. Puoi dire cosa intendi per costruttore di connessione qui e nel tuo codice? Grazie –

2

Forse il problema è il modo in cui si impostano le informazioni di autenticazione. Hai preso in considerazione l'utilizzo del metodo ReportDocument.SetDatabaseLogon? Chiamarlo una volta per ogni connessione DB univoca nel report. Eliminerà la necessità di enumerare tutte le tabelle nel report e, come ricordo, la necessità di enumerare anche le tabelle dei sottoreport.

+0

Ho provato il tuo suggerimento ma ottengo ancora lo stesso errore con il test - tuttavia, ora ha un nome di database nel prompt di accesso. Ancora non riesce però se provo ad inserire la password corretta. – Marlon

+0

Il campo Dataase viene impostato? Se si forniscono le credenziali di accesso corrette quando il report viene richiesto, il report funziona come previsto? – craig

+0

Se si codificano i valori nel SetDatabaseLogon, come reportDocument.SetDatabaseLogon ("account", "password", "database", "server"), funziona? Per garantire che le informazioni di accesso del sottoreport vengano impostate, aggiungere questo bit al ciclo del sottoreport. Fammi sapere come funziona e proveremo il prossimo test. – craig

0

La ricerca di una soluzione a un problema simile mi ha portato a questa domanda. Il mio problema/soluzione era un po 'diverso ma immagino che gli altri con il mio problema finiranno qui, quindi pubblicherò la mia soluzione qui.

Se gli utenti stanno vedendo qualcosa di simile quando si cerca di visualizzare in anteprima un report:

Crystal Reports Viewer screen shot

poi quando si imposta le informazioni di accesso di SQL Server per il report, assicuratevi di includere il servizio di nome. Ad esempio, assicurati di dare a Crystal "myserver \ myservice" invece di "myserver".

Il mio programma è in grado di accedere ai dati da SQL Server utilizzando solo "myserver", ma a Crystal è necessario fornire "myserver \ myservice".