ODBCの登録方法


闘うプログラマーの十番弟子  2002-08-03 19:33:34  No: 75929  IP: [192.*.*.*]

こんばんは。「闘うプログラマーの十番弟子」です。
久しぶりに質問させて頂きます。

VBのプログラムからODBCへの登録方法を知りたいのですが、
どなたかご存知ないですか?
クライアントのソフトをインストールする時に一台一台設定するのが、
面倒なんです。(横着かなぁ)

開発環境:VB6SP5,ACCESS2000,ADOでやってます。

よろしくお願いします。

編集 削除
とろ  2002-08-06 21:33:48  No: 75930  IP: [192.*.*.*]

SQLConfigDataSource API を使用して、
ODBC への登録・編集・削除ができます。
DSN 文字列については、御自分で調べて下さい。

Public Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" ( _
    ByVal hWndParent As Long, _
    ByVal fRequest As Long, _
    ByVal lpszDriver As String, _
    ByVal lpszAttributes As String _
  ) As Long
Public Const ODBC_ADD_DSN = 1             '* ユーザーデータソースの追加
Public Const ODBC_CONFIG_DSN = 2          '* ユーザーデータソースの編集
Public Const ODBC_REMOVE_DSN = 3          '* ユーザーデータソースの削除
Public Const ODBC_ADD_SYS_DSN = 4         '* システムデータソースを追加
Public Const ODBC_CONFIG_SYS_DSN = 5      '* システムデータソースを編集
Public Const ODBC_REMOVE_SYS_DSN = 6      '* システムデータソースを削除
Public Const ODBC_REMOVE_DEFAULT_DSN = 7  '* デフォルトDSNを削除


  Dim lRet As Long
  Dim sDRV As String
  Dim sDSN As String
  
  '* ドライバ名
  sDRV = "Microsoft Access Driver (*.mdb)"
  '* DSN 文字列
  sDSN = ""
  sDSN = sDSN & "DBQ=d:\My Documents\db1.mdb" & vbNullChar
  sDSN = sDSN & "DSN=DSN_SAMPLE" & vbNullChar
  sDSN = sDSN & "DESCRIPTION=This is Sample" & vbNullChar
  
  lRet = SQLConfigDataSource(0, ODBC_ADD_DSN, sDRV, sDSN)
  If lRet = 0 Then MsgBox "ODBC の登録に失敗しました。"

編集 削除
闘うプログラマーの十番弟子  2002-08-07 23:09:28  No: 75931  IP: [192.*.*.*]

う〜ん、上手くいきません。
なにかおかしな事してますかねぇ。
よろしければ見てもらえませんか?

Dim lngRequest As Long
Dim strDriver As String                 'ドライバ名
Dim strDSN As String                    'DSN文字列

'ドライバ名
strDriver = "Microsoft Access Driver (*.mdb)"

'DSN文字列
strDSN = "DBQ=C:\kensetu\db\Genka.mdb" & vbNullChar
strDSN = strDSN & "DSN=Nippo Database" & vbNullChar
strDSN = strDSN & "DESCRIPTION=Test DataSourceName" & vbNullChar

lngRequest = SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, strDriver, strDSN)

If lngRequest = 0 Then
    MsgBox "ODBCの登録に失敗しました!", vbCritical, "ODBC登録エラー"
End If

編集 削除
とろ  2002-08-08 11:56:22  No: 75932  IP: [192.*.*.*]

私の環境では、あなたの提示したコードで
正しく登録できましたけど...

もしかすると、
システムデータソースを登録する権限がないのでは?
試しに、
ODBC_ADD_SYS_DSN ではなく
ODBC_ADD_DSN でやってみるとどうですか?

編集 削除
とろ  2002-08-08 13:09:07  No: 75933  IP: [192.*.*.*]

あるいは、 Access が入っていないとか?
Access が入っていないと Access Driver がないかもしれないので、
この方法だとできない可能性がありますよ。

その場合は、
DAO の RegistDatabase
あるいは
RDO の rdoRegisterDataSource
を使うことになります。

編集 削除
まさき  2003-05-24 15:31:06  No: 75934  IP: [192.*.*.*]

こんにちは、
自分も同じ事がしたくて、いろいろ探しているとここに辿りつきました
実は自分の環境でも、とろさんのコードがうまくいかなかったのですが、
他のページで見つけた方法でうまくいきました。
下記コードです。試してみてください。

Private Const ODBC_ADD_DSN = 1    ' データ ソースの追加
Private Const ODBC_CONFIG_DSN = 2 ' データ ソースの編集
Private Const ODBC_REMOVE_DSN = 3 ' データ ソースの削除

' API 宣言
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

Private Sub Form_Load()

Dim lngRequest As Long
Dim strDriver As String                 'ドライバ名
Dim strDSN As String                    'DSN文字列

'ドライバ名
strDriver = "Microsoft Access Driver (*.mdb)"

'DSN文字列
strDSN = "DBQ=C:\kensetu\db\Genka.mdb" & vbNullChar
strDSN = strDSN & "DSN=Nippo Database" & vbNullChar
strDSN = strDSN & "DESCRIPTION=Test DataSourceName" & vbNullChar

lngRequest = SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, strDriver, strDSN)

If lngRequest = 0 Then
    MsgBox "ODBCの登録に失敗しました!", vbCritical, "ODBC登録エラー"
End If

End Sub

編集 削除
まさき  2003-05-24 15:35:29  No: 75935  IP: [192.*.*.*]

良くみたら、すんごい古いスレッドでしたね・・・
失礼しました。。。

編集 削除