Cambiando PC non mi funziona più il report

martedì 16 dicembre 2008 - 12.27

luxsor Profilo | Guru

Ciao a tutti,
ho creato un crystal repot con Visual Studio 2008; siccome il database che sto usando è sql server 2005 express, ho utilizzato la proprietà TableLogOnInfo per passarli i parametri di connessione con il db. Tutto funziona perfettamente.
Il problema adesso è che se il database venisse spostato, dall'ip che ho inserito nella funzione TableLogOnInfo non mi funziona più il report.
Mi chiede di inserire NomeUtente e Password, ma nonostante li inserisco correttamente non mi funziona, perchè il campo database è vuoto.


Vorrei sapere se esiste una procedura da fare in questa situazioni?

zactime Profilo | Newbie

Purtroppo scrivo non per darti una risposta ma perchè ho il tuo stesso identico problema ed ho quindi ritenuto inutile aprire un nuovo post.

Attendiamo suggerimenti.

Io intanto faccio seguire il codice che utilizzo. Magari può suggerirti la soluzione (che io non vedo). CV è il nome del CrystalViewer.


Private myReportDocument As ReportDocument
Private Credenziali As New TableLogOnInfo
Private myReportFileName As String
Private myTitolo As String
Private mySelectionFormula As String
Private myParameters As ArrayList

Public Property Titolo() As String
Get
Return myTitolo
End Get
Set(ByVal value As String)
myTitolo = value
End Set
End Property

Public Property ReportFileName() As String
Get
Return myReportFileName
End Get
Set(ByVal value As String)
myReportFileName = value
End Set
End Property

Public Property SelectionFormula() As String
Get
Return mySelectionFormula
End Get
Set(ByVal value As String)
mySelectionFormula = value
End Set
End Property

Public Property Parameters() As ArrayList
Get
Return myParameters
End Get
Set(ByVal value As ArrayList)
myParameters = value
End Set
End Property

.....

Dim Path As String = My.Application.Info.DirectoryPath
Dim f As FormulaFieldDefinitions

Try
Me.Text = myTitolo
myReportDocument = New ReportDocument
myReportDocument.Load(Path + "\" + ReportFileName)

Credenziali = myReportDocument.Database.Tables.Item("Prodotti").LogOnInfo
Credenziali.ConnectionInfo.ServerName = "NomePC\SQLEXPRESS"
Credenziali.ConnectionInfo.DatabaseName = "NomeDB"
Credenziali.ConnectionInfo.UserID = "MiaUser"
Credenziali.ConnectionInfo.Password = "MiaPassword"
Credenziali.TableName = "Prodotti"
myReportDocument.Database.Tables(0).ApplyLogOnInfo(Credenziali)

myReportDocument.RecordSelectionFormula = mySelectionFormula
f = myReportDocument.DataDefinition.FormulaFields
MessageBox.Show(f("Data").Text)
f("Stringa").Text = f("Stringa").Text.Replace("P1", "Xxxxx")
f("Numero").Text = f("Numero").Text.Replace("5", "28")
f("Data").Text = f("Data").Text.Replace(f("Data").Text, "Date(2008,10,18)")
myReportDocument.Refresh()

'Qui se necessario gestisco i parametri da passare al report
'Setto il valore dei Parametri che devo passare al Report
Dim varformula1 As String
Dim varformula2 As Integer
Dim varformula3 As Date

varformula1 = "MioParametroStringa"
varformula2 = 28
varformula3 = CDate("18/10/2008")

'Passo i parametri varformula1 e varformula2 al Report
Dim param1Fields As New ParameterFields
Dim param1Field As New ParameterField
Dim param1Range As New ParameterDiscreteValue
Dim param1Field2 As New ParameterField
Dim param1Range2 As New ParameterDiscreteValue
Dim param1Field3 As New ParameterField
Dim param1Range3 As New ParameterDiscreteValue

param1Field.ParameterFieldName = "ParStringa"
param1Range.Value = varformula1
param1Field.CurrentValues.Add(param1Range)
param1Fields.Add(param1Field)

param1Field2.ParameterFieldName = "ParNumero"
param1Range2.Value = varformula2
param1Field2.CurrentValues.Add(param1Range2)
param1Fields.Add(param1Field2)

param1Field3.ParameterFieldName = "ParData"
param1Range3.Value = varformula3
param1Field3.CurrentValues.Add(param1Range3)
param1Fields.Add(param1Field3)

CV.ParameterFieldInfo = param1Fields

CV.ReportSource = myReportDocument
CV.Refresh()
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try

luxsor Profilo | Guru


prova a sostituire CV.Refresh con CV.RefreshReport()

zactime Profilo | Newbie

Provato.

Purtroppo non cambia nulla.
Tu hai trovato la soluzione ?

luxsor Profilo | Guru

Scusami, ma il tuo problema è che quando cambi computer ti chiede le credenziali per la connessione con il db?

zactime Profilo | Newbie

Esatto.

Sul computer di sviluppo con SQL installato nessun problema.
Se installo l'applicativo di prova sul portatile connesso in rete e apro l'anteprima del report mi propone la form dei dati di connessione dove server, user e password sono compilati e dove è vuota la casella del nome database, peraltro non editabile.

luxsor Profilo | Guru

Ti faccio una domanda stupida. Ma tramite il portatile riesci ad accedere al DB SQL Server?
In caso affermativo quindi che accetta connessioni remote, cambia la stringa di connessione del report.
Non usare NomeComputer\IstanzaSQLServer, ma usa indirizzo ip del computer, dove sql server è installato e il numero di porta (1433 se non lo hai cambiato).

zactime Profilo | Newbie

Saresti così gentile di scrivermi una riga di esempio ?

Tu intendi qualcosa del tipo "192.168.1.20\1433" ??

Grazie

luxsor Profilo | Guru

Se l'indirizzo IP del computer dove risiede il database e sql server 2005 express è 192.168.1.20

Credenziali.ConnectionInfo.ServerName = "192.168.1.20,1433"

zactime Profilo | Newbie

Le cose in questo modo sono peggiorate: sulla macchina di sviluppo mi chiede la password e poi non si connette, sul portatile al solito lascia vuoto il campo database e anche quello password.

luxsor Profilo | Guru

Sei sicuro che istanza sql server accetti connessioni tcp e che il numero di porta sia 1433?
Controlla da Gestione Configurazione SQL Server.

zactime Profilo | Newbie

TCP abilitato e porta utilizzata 1433 come dicevi tu.

Ma il tuo codice è simile al mio o hai notat differenze sostanziali ?

luxsor Profilo | Guru

Io ho risolto cambiando quella stringa di connessione.
Se tu con la modifica che ti ho fatto fare, non ti riesci a connettere al database neanche con il pc dove esso risiede, statti cerco che ho l'ip del pc, ho il numero di Porta non sono corretti, ho la tua istanza SQL Server non accetta connessioni remote.

Che stringa di connessione usi per accedere al database?

zactime Profilo | Newbie

Come stringa di connessione uso:
UID=MioUser;PWD=MiaPassword;DATABASE=Corso;SERVER=localhost\sqlexpress - sulla macchina di sviluppo

UID=MioUser;PWD=MiaPassword;DATABASE=Corso;SERVER=NomePC\sqlexpress - sul portatile

L'IP l'ho controllato con ipconfig.
Il numero di porta TCP predefinito controllato in SQL Server Configuration Manager è 1433.
Come controllo a questo punto se la mia istanza SQL Server non accetta connessioni remote ? Io attraverso il programma ai dati di SQL ci accedo.

luxsor Profilo | Guru

Usa questa stringa di Connessione

Server=ipdelcomputer,porta; Initial Catalog=nomedabase; User ID=numerutente; Password=password

zactime Profilo | Newbie

Adesso purtroppo devo scappare.

Domani pomeriggio provo e ti faccio sapere.

Per ora grazie.

luxsor Profilo | Guru

Ti suggerisco un link del grande Lorenzo Benaglia per la configurazione dell'istanza SQL Server 2005
http://www.dotnethell.it/forum/messages.aspx?ThreadID=10971

Seguilo passo passo per la corretta configurazione.

zactime Profilo | Newbie

Le info sono sulla versione 2005 ed io ho installata la 2008 e sono cambiate alcune cose, in ogni caso mi sembra tutto a posto.

Ma dopo ancora innumerevoli prove non va.

Proseguo con gli esperimenti.

luxsor Profilo | Guru

Ma la versione 2008 che ti riferisci tu è di vb2008 o sql server 2008?

zactime Profilo | Newbie

Li ho entrambi in versione 2008.

Adesso comunque apro un post. Non mi sembra giusto sfrutare ulteriormente il tuo.
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