Newsgroup: it.comp.lang.visual-basic
Titolo: agiungere dsn a codice

è possibile aggiungere un dsn da codice?
In che modo?
Ho cercato nei post vecchi senza trovare niente
Grazie

 Ho cercato nei post vecchi senza trovare niente
Io l'ho fatto e funziona, anche se sicuramente ci sono vie più pulite:
ho semplicemente guardato nel registro di sistema cosa e come viene aggiunto
ogni volta che creo un nuovo DSN e con le API per scrivere nel registro ho
creato una procedura che inserisce il nuovo DSN con le stesse modalità.
Le chiavi del registro sono:
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources
e
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\Nome_DSN
Per scrivere nel registro ho usato la classe RCLReg trovata sul sito comune!
Ciao!
--
Esteban
Hosted by 
www.seber.it
(Remove nonspammare for reply)

 Per scrivere nel registro ho usato la classe RCLReg trovata sul sito
comune!
Grazie, ma un metodo meno artigianale non esiste proprio č?
Ciao

Grazie, ma un metodo meno artigianale non esiste proprio è?
Riporto una risposta di buc del 25 febbraio:
<citazione>
un DSN per access puo' essere creato cosi':
(in un modulo)
Option Explicit
Const ODBC_ADD_SYS_DSN = 4       'Add data source
Const ODBC_CONFIG_SYS_DSN = 5    'Configure (edit) data source
Const ODBC_REMOVE_SYS_DSN = 6    'Remove data source
Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal _
   hwndParent As Long, ByVal fRequest As Long, ByVal _
   lpszDriver As String, ByVal lpszAttributes As String) As Long
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
Function Delete_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_REMOVE_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
(in un form metti)
Private Sub Command1_Click()
    On Error Resume Next
    Err = 0
    x = Build_SystemDSN("My Example", App.Path + "\example.mdb")
    If Err = 0 Then
        MsgBox "DSN Creato"
        Else
        MsgBox "Errore creazione DSN"
    End If
End Sub
Private Sub Command2_Click()
    On Error Resume Next
    Err = 0
    x = Delete_SystemDSN("My Example", App.Path + "\example.mdb")
    If Err = 0 Then
        MsgBox "DSN Cancellato"
        Else
        MsgBox "Errore cancellazione DSN"
    End If
End Sub
</citazione>
ed anche una di Rogis del 26 dicembre u.s.:
<citazione>
Altro metodo:
Creare e rimuovere in DSN direttamente dal VB
di Danilo Priore
Usando la versione a 32-bit del VB è possibile fare una connessione ODBC
attraverso la definizione del DSN. E' possibile creare dinamicamente e
rimuovere un Data Source Name (DSN) direttamente da codice VB usando la
funzione SQLConfigDataSource delle API-ODBC.
Per prima cosa si dovrà dichiarare la funzione SQLConfigDataSource nel modo
seguente:
Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal hwndParent As
Long, ByVal fRequest As Long, ByVal lpszDriver As String, ByVal
lpszAttributes As String) As Long
Il parametro hwndParent corrisponde all'handle della finestra padre (es.
Form1.hwnd)
Il paramtero fRequest indica l'operazione da compiere:
ODBC_ADD_DSN 1 Aggiunge un DSN
ODBC_CONFIG_DSN 2 Modifica un DSN esistente
ODBC_REMOVE_DSN 3 Rimuove un DSN
Il parametro lpszDriver specifica il driver da utilizzare per il database
per esempio "SQL Server".
Il parametro lpszAttributes definisce il collegamento DSN dove ogni
parametro deve essere separato da un carattere NULL, per esempio :
lpszAttributes = "DSN=dbTemp" & Chr$(0) & "DATABASE=pubs" & Chr$(0) &
"UID=sa" & Chr$(0) & "PWD=" & Chr$(0)
La funzione restituisce 0 se non è avvenuto nessun errore e l'operazione ha
avuto successo.
Se si utilizza il VB a 16-bit l'utilizzo della funzione rimangono uguali ma
si dovrà dichiarare la funzione nel modo seguente:
Declare Function SQLConfigDataSource Lib "ODBCINST.DLL" (ByVal hwndParent As
Integer, ByVal fRequest As Integer, ByVal lpszDriver As String, ByVal
lpszAttributes As String)
Oppure puoi usare un DSN su file e includerlo nel pacchetto installazione!!!
</citazione>
-- 
hth, hal

 Riporto una risposta di buc del 25 febbraio:
very thanks, su google proprio non l'avevo trovato...
Scarsa capacità di ricerca?
Bye