Newsgroup: it.comp.lang.visual-basic
Titolo: creare dsn per sqlserver in runtime

La mia esigenza è quella di creare da codice un dsn di sistema che punti ad
un database sqlserver
Sono già in possesso della procedura per creare una fonte per Access, ma non
so come modificarla per creare una fonte per sqlserver.
Attualmente uso questa procedura
Function Build_SystemDSN(DSN_NAME As String, Db_Path As String)
   Dim ret%, Driver$, Attributes$
   Driver = "Microsoft Access Driver (*.MDB)" & Chr(0)
   Attributes = "DSN=" & DSN_NAME & Chr(0)
   Attributes = Attributes & "Uid=Admin" & Chr(0) & "pwd=" & Chr(0)
   Attributes = Attributes & "DBQ=" & Db_Path & Chr(0)
   ret = SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, Driver, Attributes)
   'ret is equal to 1 on success and 0 if there is an error
   If ret <> 1 Then
       MsgBox "DSN Creation Failed"
   End If
End Function
Innanzi tutto ho pensato che si dovrà passare a driver il nome del driver
per SQL Server.
Ma per il resto sono in alto mare.
Se qualche anima pia mi può dare una mano.....come al solito una pacca sulla
spalla in segno di ringraziamento è d'obbligo.
THX
---------------------------------------------------------
David Ruscelli
Ufficio E.D.P.
  Intesa Soc. Coop. a r.l.
 
www.intesacoop.com
  Alegra S.r.l.
 
www.alegrasrl.com
--------------------------------------------------------

 un database sqlserver
Mi intrometto, disturbando il thread, per dire che io personalmente
consiglio di usare OleDb.
Se invece per qualche motivo ti serve l'ODBC, scusa il disturbo perchč non
lo so fare.
Ciao
Alberto

 lo so fare.
Anche io uso l'OleDb, però in alcuni casi è comodo avere impostata anche una
fonte ODBC, in altri è obbligatorio.
Un caso in cui è comodo è nell'utilizzo del dataenvironment, un caso in cui
è obbligatorio è nell'utilizzo del DataShape.

 un caso in cui è obbligatorio è nell'utilizzo del DataShape.
Questa invece è abbastanza nuova.
Io personalmente no, però un mio collega è assegnato a tempo pieno a
sviluppare applicativi DSS, in cui utilizza tantissimo i DataShape, e se ho
capito bene lui usa esclusivamente ADO/OleDb.
Ciao
Alberto

> Questa invece è abbastanza nuova.
anche a me
uso datashape con ado/oledb (mai usato con altro...)

 uso datashape con ado/oledb (mai usato con altro...)
Su Msdn mi pare di aver letto che datashape si appoggia esclusivamente ad un
Dsn
Comunque, considerando che a me serve per il datashape
Vi porto un esempio da msdn, quindi con il dsn, se me lo convertite per
usare l'oledb ve ne sarò grato, anche perchè risolverebbe il mio problema.
Ho provato a usare l'oledb ma viene generato l'errore "Istruzione sql non
valida"
Sub datashape()    Dim cnn As New ADODB.Connection    Dim rst As New
ADODB.Recordset    Dim rsChapter As Variant
    cnn.Provider = "MSDataShape"    cnn.Open    "Data Provider=MSDASQL;" & _
"DSN=vfox;uid=sa;pwd=vfox;database=pubs"'PASSAGGIO 1    rst.StayInSync =
FALSE    rst.Open    "SHAPE  {select * from authors}                APPEND
({select * from titleauthor} AS chapter                RELATE au_id TO
au_id)",                cnn'PASSAGGIO 2    While Not rst.EOF
Debug.Print    rst("au_fname"), rst("au_lname"),
rst("state"), rst("au_id")'PASSAGGIO 3        Set rsChapter =
rst("chapter")'PASSAGGIO 4        While Not rsChapter.EOF
Debug.Print rsChapter(0), rsChapter(1),
rsChapter(2), rsChapter(3)            rsChapter.MoveNext        Wend
rst.MoveNext    WendEnd Sub

 Comunque, considerando che a me serve per il datashape
Copio incollo da due progetti.
Non vedo niente di particolare, e sicuramente la connessione è OleDb (PS: i
due progetti sono già installati e funzionanti da tempo, per cui...)
Ciao
Alberto
DefaultCnnParameters = "Persist Security Info=False; Connect Timeout=10"
DefaultOpenString = "Provider=SQLOLEDB.1; Data Source=" & SQLServerName & ";
User ID=" & SQLUser & "; Password=" & SQLPwd
Cnn_shape.CursorLocation = adUseClient
Cnn_shape.ConnectionString = DefaultCnnParameters
Cnn_shape.Open DefaultOpenString
Cnn_shape.DefaultDatabase = SQLDBname
DefaultCnnParameters = "Persist Security Info=False; Connect Timeout=30 "
DefaultOpenString = "Provider=MSDATASHAPE; Data Provider=SQLOLEDB.1; Data
Source=" & SQLServerName & "; User ID=" & SQLUser & "; Password=" & SQLPwd &
"; DataBase=" & SQLDBname
Cnn_shape.CursorLocation = adUseClient
Cnn_shape.ConnectionString = DefaultCnnParameters
If CBool(Cnn_shape.State And adStateOpen) Then
      Cnn_shape.Close
End If
Cnn_shape.open DefaultOpenString

 ha scritto nel messaggio
news:at54qt$r61$1...@grillo.cs.interbusiness.it...
Riporto l'esempio sperando che venga postato in maniera piů umana


 DefaultCnnParameters = "Persist Security Info=False; Connect Timeout=30 "


 ha scritto nel messaggio
news:at55f2$s1n$1...@grillo.cs.interbusiness.it...
Aggiungo anche che in un'altro punto MSDN cita
Un provider di fonte dati OLE DB deve fornire dati da trasmettere a un altro
provider,
che procederà a sua volta all'utilizzo del linguaggio Shape. Il provider di
fonte dati viene specificato nella stringa di connessione dell'oggetto
Connection nel formato "Shape Provider=fontedati". Il provider che fornisce
il supporto per il linguaggio Shape viene specificato nella proprietà
Provider dell'oggetto Connection come "MSDataShape".
Esempio
Dim cnn As New ADODB.Connection
cnn.Provider = "MSDataShape"
cnn.Open "Shape Provider=MSDASQL;DSN=vfox;uid=sa;pwd=vfox;database=pubs"
Se sostituisco la stringa di connessione con questa
cn.Provider = "MSDataShape"
cn.Open "Shape Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\trc.mdb" &
";jet oledb:database"
non funziona, ricevo come output che il nome dell'origine dati non è stato
trovato, a conferma per l'appunto che lui si aspetta un'origine dati.
Attendo le vostre riflessioni ansioso.

Data Provider=SQLOLEDB.1; Data
  ^^^^
Omettevo quella parolina lì ;-)
Le figure di merda sono sempre all'ordine del giorno...
:-P

 il codice, non vedo niente di diverso da qualunque connessione Ado.
Infact ho risolto guardando il secondo esempio.
Grazie ancora... anche se da ora in poi mi firmerò Mr figura di
merda....(datemi il tempo di aggiornare la mia sign) :-)
Comunque, seriamente, su MSDN c'è poco al riguardo e gli esempi, su
qualsiasi cosa, tendono sempre ad usare una fonte dati e non capisco perchè
visto che, OleDb è più facilmente gestibile, infatti la maggior parte dei
programmatori sfruttano questo mezzo per la connessone al Db.
Mi pare di aver letto che in termini di velocità non cambia una cippa,
perchè Odbc, poi richiama OleDb per la connessione effettiva, spero di non
aver detto una bestialità, però OleDb è molto più comodo sicuramente.
Attendo le vostre impressioni per un confronto.

 Attendo le vostre impressioni per un confronto.
Sinceramente io non ho praticamente scelta, e visto che OleDb va benissimo
per tutto, uso quello e punto.
Dico che non ho scelta, in quanto molte delle applicazioni che sviluppiamo
sono distribuite ed eseguite in IE, attraverso VBD o OCX.
Con questa configurazione, noi garantiamo al CED del cliente che non dovrà
eseguire nessun setup sui client, e questo è un grosso vantaggio
commerciale. Tuttavia, con sistemi NT/2k/XP, la creazione di una fonte dati
ODBC può essere inibita agli utenti, per cui mi potrei trovare con
l'applicativo che non va perchè l'utente non ha il diritto di creare una
fonte ODBC. E qui dovrei dire al cliente di cambiare i diritti degli utenti,
e a questo punto mi massacrano.
Per il primo accesso, e solo per quello, occorre che l'utente abbia diritto
di installare (ad esempio Administrator), ma questo è abbastanza evidente
(se vuoi che un client esegua una certa applicazione, prima o poi questa
applicazione sul client deve arrivare...).
Quando tu hai detto che le connessioni SHAPE con OleDb non vanno, mi sono
stupito, perchè un applicativo DSS che abbiamo presso un grosso cliente è
proprio distribuito su OCX in HTML, per cui ero sicuro che non usasse ODBC.
Ciao
Alberto