Newsgroup: it.comp.lang.visual-basic
Titolo: [ODBC] Dsn Utente

Come posso ottenere una lista delle origini dati (DSN Utente) ODBC?
Grazie.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Come posso ottenere una lista delle origini dati (DSN Utente) ODBC?
Io conosco solo l'approccio a basso livello con l'API SQLDataSources
Su msdn trovi tutto
Stefano "HappyMan" (Lago Maggiore - NO)
--
http://www.sgr.info
Email happyman69 (at) 
libero.it

 Io conosco solo l'approccio a basso livello con l'API SQLDataSources
E te pare poco.....
Grazie sei un grande :))))))))))))))))))
Mi sembra giusto mettere a disposizione di tutti
l'esempio che ho trovato.
Creare un Form con due ListBox e incollare il codice seguente:
Option Explicit
Private Declare Function SQLDataSources Lib "odbc32.dll" _
  (ByVal hEnv As Long, _
   ByVal fDirection As Integer, _
   ByVal szDSN As String, _
   ByVal cbDSNMax As Integer, _
   pcbDSN As Integer, _
   ByVal szDescription As String, _
   ByVal cbDescriptionMax As Integer, _
   pcbDescription As Integer) As Long
Private Declare Function SQLAllocHandle Lib "odbc32.dll" _
  (ByVal HandleType As Integer, _
   ByVal InputHandle As Long, _
   OutputHandlePtr As Long) As Long
 
Private Declare Function SQLSetEnvAttr Lib "odbc32.dll" _
  (ByVal EnvironmentHandle As Long, _
   ByVal dwAttribute As Long, _
   ByVal ValuePtr As Long, _
   ByVal StringLen As Long) As Long
 
Private Declare Function SQLFreeHandle Lib "odbc32.dll" _
  (ByVal HandleType As Integer, _
   ByVal Handle As Long) As Long
 
Private Const SQL_MAX_DSN_LENGTH As Long = 32
Private Const SQL_MAX_DESC_LENGTH As Long = 128
Private Const SQL_SUCCESS As Long = 0
Private Const SQL_FETCH_NEXT As Long = 1
Private Const SQL_NULL_HANDLE As Long = 0
Private Const SQL_HANDLE_ENV As Long = 1
Private Const SQL_ATTR_ODBC_VERSION As Long = 200
Private Const SQL_OV_ODBC3 As Long = 3
Private Const SQL_IS_INTEGER As Long = (-6)
Private Sub Form_Load()
   GetUserSystemDSN
End Sub
Private Sub GetUserSystemDSN()
   Dim hEnv As Long         'handle del environment
   Dim sServer As String
   Dim sDriver As String
   Dim nSvrLen As Integer
   Dim nDvrLen As Integer
 
  'ottengo l' handle del environment
   If SQLAllocHandle(SQL_HANDLE_ENV, _
                     SQL_NULL_HANDLE, hEnv) <> 0 Then
 
     'Se ho un ritorno diverso da zero quindi Ok
      If SQLSetEnvAttr(hEnv, _
                       SQL_ATTR_ODBC_VERSION, _
                       SQL_OV_ODBC3, _
                       SQL_IS_INTEGER) <> 0 Then
 
 
        'Preparo la stringa
         sServer = Space$(SQL_MAX_DSN_LENGTH)
         sDriver = Space$(SQL_MAX_DESC_LENGTH)
 
        'Carico DSN
         Do While SQLDataSources(hEnv, _
                                 SQL_FETCH_NEXT, _
                                 sServer, _
                                 SQL_MAX_DSN_LENGTH, _
                                 nSvrLen, _
                                 sDriver, _
                                 SQL_MAX_DESC_LENGTH, _
                                 nDvrLen) = SQL_SUCCESS
 
 
           'If InStr(1, sDriver, "SQL Server") Then 'Ho aggiunto un Filtro
           'Sul Driver che mi interessa!  
            List1.AddItem Left$(sServer, nSvrLen)
            List2.AddItem Left$(sDriver, nDvrLen)
           'End If
           'risetto la stringa
            sServer = Space$(SQL_MAX_DSN_LENGTH)
            sDriver = Space$(SQL_MAX_DESC_LENGTH)
 
        Loop
 
      End If
 
     'Rimetto a posto
      Call SQLFreeHandle(SQL_HANDLE_ENV, hEnv)
 
   End If
 
  'Rimuovo i doppioni da List2 (Drivers)
   RemoveListDuplicates List2
End Sub
Private Sub RemoveListDuplicates(lst As ListBox)
   Dim n As Long
   If TypeOf lst Is ListBox Then
 
      With lst
 
         If .ListCount > 1 Then
 
            For n = .ListCount - 1 To 0 Step -1
               If .List(n) = .List(n - 1) Then lst.RemoveItem n
            Next
 
         End If
 
      End With
 
   End If
 
End Sub
Ciao Alessandro


 l'esempio che ho trovato.
mi sembra *molto* giusto :-)
--
Salutoni
Sergio

 l'esempio che ho trovato.
a me invece sembra non molto giusto... non è personale, ma hai chiesto
l'autorizzazione all'autore ?
L'esempio l'hia preso qua
http://www.mvps.org/vbnet/index.html?code/system/sqldatasources.htm
e hai omesso questa parte del codice che riportato
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2003 VBnet, Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce 
'               or publish this code on any web site,
'               online service, or distribute as source 
'               on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
secondo me avresti dovuto SOLO dare il link e non pubblicare il codice, se
fai uso gratuito di lavoro altrui, quantomeno rispetta le sue regole.
cordialità
ciauz


On Thu, 27 Mar 2003 16:48:14 +0100, 
vinces...@yahoo.it
 (Vincenzo
\'Lo Sciamano\') wrote:
[cut]
Ciao salsero, ci si rivede piu' spesso su altri lidi che non su iabla
(*sob*)...
Stefano "HappyMan" (Lago Maggiore - NO)
--
Personal Web 
http://www.sgr.info
Email happyman69 (at) 
libero.it

fai uso gratuito di lavoro altrui, quantomeno rispetta le sue regole.
secondo me ha fatto benissimo a incollare tutto il codice.
ha sbagliato a non riportare il messaggio di copyright.
i link servono a poco, soprattutto a chi non ha connessioni permanenti
col web e, soprattutto, possono cambiare col tempo.
mantenere una copia locale di tutte le news e' molto piu' facile ed
efficace.
ma, ripeto, sono d'accordo che avrebbe dovuto mantenere la nota di
copyright.
saluti.
-- 
Gianni Rondinini
Icem s.r.l.
Tel: 
+39 0545 78036
Fax: 
+39 0545 78727