ODBC接続の設定

解決


KAZU  2011-12-07 16:58:29  No: 103145  IP: [192.*.*.*]

WinXP、Win2008Server64ビットで問題なかったソフトがあり、それをWin7 Professional 64ビットにインストールしたのですが、上手くODBCが作れません。
ODBCCP32.DLLの問題かな?とも思いますが、何か動かせる方法はありますか?
Private Const ODBC_ADD_DSN = 1             '* ユーザーデータ ソースの追加
Private Const ODBC_CONFIG_DSN = 2          '* ユーザーデータ ソースの編集
Private Const ODBC_REMOVE_DSN = 3          '* ユーザーデータ ソースの削除
Private Const ODBC_ADD_SYS_DSN = 4         '* システムデータソースを追加
Private Const ODBC_CONFIG_SYS_DSN = 5      '* システムデータソースを編集
Private Const ODBC_REMOVE_SYS_DSN = 6      '* システムデータソースを削除
Private Const ODBC_REMOVE_DEFAULT_DSN = 7  '* デフォルトDSNを削除

' 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 Declare Function SQLInstallerError Lib "ODBCCP32.DLL" _
(ByVal iError As Integer, ByRef pfErrorCode As Long, _
ByVal lpszErrorMsg As String, ByVal cbErrorMsgMax As Integer, _
ByRef pcbErrorMsg As Integer) As Long

Function fnODBC_Sakusei(strUid As String, strPwd As String) As Boolean
' データソースの追加
    
    Dim intRet As Long
    Dim strDriver As String
    Dim strParam As String

    ' ODBCドライバを指定する
    strDriver = "SQL Server"
     
    ' データソースとして登録する属性を NullChar で区切り指定する
    strParam = "DSN=" & Trim(strDName) & vbNullChar
    strParam = strParam & "Description=" & vbNullChar
    strParam = strParam & "Server=" & strCName & vbNullChar
    strParam = strParam & "Database=" & Trim(strDName2) & vbNullChar

    DoEvents
    Debug.Print "ODBC"
    '***ODBCをいったん削除***
    On Error Resume Next
    DoEvents
    intRet = SQLConfigDataSource(0, ODBC_REMOVE_SYS_DSN, strDriver, strParam)
    DoEvents
    On Error GoTo 0

    ' データソースの登録
    intRet = SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, strDriver, strParam)
    if intRet=1 then
          '成功
          fnODBC_Sakusei = True
    else
          '失敗
          'ここに来てしまいます。
    End if
End Function

エラーをチェックすると
『#19:レジストリに書き込めません』
『#11:ドライバーのConfigDSN、ConfigDriver、またはConfigTranslatorが失敗しました』
と出てしまいました。
APIが変わった影響で、どうしようもないのかな?  とは思いますが、出来れば何とかしたいのですが……。
どなたかお分かりになる方、教えてください。

編集 削除
魔界の仮面弁士  2011-12-07 17:41:27  No: 103146  IP: [192.*.*.*]

> それをWin7 Professional 64ビットにインストールしたのですが、上手くODBCが作れません。

システムデータソースは、HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI に、
ユーザーデータソースは、HKEY_CURRENT_USER\Software\ODBC\ODBC.INI に書かれます。

しかし一般ユーザーは、HKLM\Software\ を参照はできますが書き込みはできないため、
> 『#19:レジストリに書き込めません』
が発生したのではないでしょうか。

EXE を管理者モードで実行するか、あるいはそれを強制するために、
マニフェストで requestedExecutionLevel を埋め込んでみては如何でしょう。



> WinXP、Win2008Server64ビットで問題なかったソフトがあり、
XP(x64) とも XP(x86) とも読み取れますが、32bit 版ですか?


> Win2008Server
細かい話ですが、2003 以降は語順が変わっているので、
Win2008Server ではなく WinServer2008 だったりします。
  Windows Server 2008 R2
  Windows Server 2008
  Windows Server 2003 R2
  Windows Server 2003
  Windows 2000 Server

編集 削除
KAZU  2011-12-07 17:49:10  No: 103147  IP: [192.*.*.*]

Administratorのユーザーでログインしたら、上手くいきました。^^;
ただ、別のユーザーだとアドミニ権限を持たせていても上手くいきません。
→実行ファイルを右クリックして『管理者として実行』なら上手くいきました。何故?
どこか設定すれば上手くいくのでしょうか?

編集 削除
KAZU  2011-12-07 18:01:30  No: 103148  IP: [192.*.*.*]

魔界の仮面弁士さん、ありがとうございます。^^
書き方に色々と不備があり、申し訳ありません。^^;

>> WinXP、Win2008Server64ビットで問題なかったソフトがあり、
>XP(x64) とも XP(x86) とも読み取れますが、32bit 版ですか?
WindowsXP Professional 32bit 版です。

>> Win2008Server
>細かい話ですが、2003 以降は語順が変わっているので、
>Win2008Server ではなく WinServer2008 だったりします。
Windows Server 2008 R2 です。

>EXE を管理者モードで実行するか、あるいはそれを強制するために、
>マニフェストで requestedExecutionLevel を埋め込んでみては如何でしょう。
やはり、管理者モードの問題ですか。^^;
上記の内容で、試してみます!

編集 削除
魔界の仮面弁士  2011-12-07 19:42:44  No: 103149  IP: [192.*.*.*]

数年前の投稿ですが、下記が参考になるかと思います。
http://dobon.net/vb/bbs/log3-37/22766.html

編集 削除
KAZU  2011-12-09 10:13:57  No: 103150  IP: [192.*.*.*]

魔界の仮面弁士さん、ありがとうございました!
上手くいきました。^^

※もっと早くに解決したのですが、なぜか書き込みエラーが出て投稿できませんでした。^^:

編集 削除