Newsgroup: it.comp.lang.visual-basic
Titolo: [?] MSDataShape Provider (Recordset Gerachici) e DSN

Ho il seguente problema che non sono ancora riuscito a risolvere.
Sbarazzarmi di un DSN utente (non essere vincolato al DSN) e impostare tutto
a run time
Ecco il dettaglio del problema:
Ho un DSN Utente chiamato MDB_PAY_TV che usa Microsoft Access Driver (*.mdb)
in cui ho specificato il
percorso del file MDB contenente le tabelle che mi servono
Nel programma devo visualizzare un Report di un recordset gerarchico
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strShape As String
Set rs = New ADODB.Recordset
Set cn = New ADODB.Connection
cn.Provider = "MSDataShape"
cn.Open "Shape Provider=MSDASQL.1;Persist Security Info=False;Data
Source=MDB_PAY_TV"
strShape="SELECT ...." ' imposto la query SQL
Set rs = cn.Execute(strShape)
' RepOrd è un DataReport a cui passo il mio recordset di dati da
visualizzare
Set RepOrd.DataSource = Nothing
RepOrd.DataMember = ""
Set RepOrd.DataSource = rs
Fino a qua nessun problema, se faccio come sopra posso tranquillamente
modificare il recordset di valori e ripassarlo al DataReport in base ai
parametri con cui genero la stringa SQL di query che memorizzo in strShape
Quello che non mi va è dover impostare il DSN Utente quando teoricamente
dovrei poter impostare tutti i parametri della connection, perchè con il DSN
non sono libero di spostare il mio MDB dove voglio se poi non modifico ogni
volta pure il DSN.
Avevo provato questa soluzione...
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strShape As String
Dim strConnection As String
Dim MDBPath As String
Set rs = New ADODB.Recordset
Set cn = New ADODB.Connection
MDBPath="...." ' Percorso che specifica dove si trova il file MDB  es.
"D:\...\...\file.mdb"
cn.Provider = "MSDataShape.1"
' memorizzo in una stringa tutti i parametri della Connection
strConnection = "Extended Properties='Shape Provider=MSDASQL.1';" & _
                  "Persist Security Info=False;" & _
                  "Connect Timeout=15;" & _
                  "Data Provider=MSDASQL;" & _
                  "Data Source=" & MDBPath
' tutti i parametri della connection sono stati controllati usando la
finestra della variabili locali nel caso del DSN
' utente descritto precedentemente
' *****
cn.Open strConnection
strShape="SELECT ...." ' imposto la query SQL
Set rs = cn.Execute(strShape)
' RepOrd è un DataReport a cui passo il mio recordset di dati da
visualizzare
Set RepOrd.DataSource = Nothing
RepOrd.DataMember = ""
Set RepOrd.DataSource = rs
Questo modo non funziona e mi ritorna errore al punto  ' *****
Descrizione errore..
Errore di run-time '-
2147467259
 (80004005)':
[Microsoft][ODBC Driver Manager] Nome della origine dati troppo lungo.
' se cambio strConnection mettendo nuovamente il DSN
strConnection = "Extended Properties='Shape Provider=MSDASQL.1';" & _
                  "Persist Security Info=False;" & _
                  "Connect Timeout=15;" & _
                  "Data Provider=MSDASQL;" & _
                  "Data Source=" & MDB_PAY_TV
tutto funziona.
Ho fatto di tutto, pensavo che il problema potesse essere nel percorso del
file che effettivamente era un pò lunghetto, così ho spostato l'archivio
fino a redurre il percorso a...  "D:\Dati.mdb" e l'errore non cambia.
Insomma, tutto quello che vorrei e non dover usare il DSN.
Mi scuso per la lunghezza del post, ma vorrei veramente capire dove sbaglio.
Grazie anticipatamente a tutti quanti mi risponderanno.

