ODBC Datenquellen registrieren
 Info  
Von : Wolfgang Kluge
 Zusatz  
Printfreundliche Ansicht
Da schreibt man ein Programm und muss fürchterlich darauf achten, dass beim Anwender auch ODBC-Treiber mitinstalliert werden, falls nicht vorhanden und findet dann aber partout keine Möglichkeit eine Datenquelle programmtechnisch hinzuzufügen.
Es gibt was, selbst RDO hats schon angeboten. Die sauberere Lösung ist allerdings direkt die ODBC-API zu benutzen..

 Deklaration:
Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal hwndParent As Long, ByVal fRequest As Integer, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long
Private Const ODBC_ADD_DSN = 1


Das ganze in eine Routine gepackt ist wiederverwertbar und übersichtlich.
Private Sub SetNewDSN(DSN As String, Description As String, Server As String, Database As String)
  Datenquelle Registrieren
  Dim intRet As Long, Attribs As String
  Attribs = "Description=" & Description & Chr$(0)
  Attribs = Attribs & "DSN=" & DSN & Chr$(0)
  Attribs = Attribs & "Server=" & Server & Chr$(0)
  Attribs = Attribs & "OemToAnsi=No" & Chr$(0)
  Attribs = Attribs & "Database=" & Database & Chr$(0)

  intRet = SQLConfigDataSource(0, ODBC_ADD_DSN, "SQL Server", Attribs)
  If intRet = 0 Then MsgBox "Fehler beim Registrieren der Datenbank"
End Sub


Die Datenquelle wird immer registriert, auch wenn der Server oder die Datenbank (im Moment) nicht verfügbar ist. Ausserdem wird bei schon vorhandener DSN der Eintrag überschrieben. D.h. daß nur dann ein Fehler aufkommt, wenn ein Eintrag nicht möglich ist, aus welchen Gründen auch immer...
Das Passwort und die UserID können nicht vergeben werden (wozu auch, die Einträge repräsentieren den zuletzt angemeldeten User). Wenn das doch erwünscht ist, muß ein Eintrag in die Registry erfolgen.