OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ODBCのデータソース登録内容の確認

  • すぐに回答を!
  • 質問No.239652
  • 閲覧数1384
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (21/21)

VB6上で、ODBCのデータソースの自動登録を行おうと思っています。
その際、実際の登録処理を行う前に、
既にデータソースへ登録されているかどうかを
チェックしたいのですが、どのようにすればいいのでしょうか?
(チェックしたいのはシステムDSNの内容です・・・)
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル12

ベストアンサー率 65% (276/422)

多少ODBCを勉強しなおしましたので、報告いたします。
O S:WIN2KServer SP2
TOOL:VB6SP5
での検証報告です。


Cのヘッダファイル
C:\Profram Files\Microsoft Visual Studio\Vc98\Inculude\ODBCINST.H

// SQLConfigDataSource request flags
#define ODBC_ADD_DSN 1 // Add data source
#define ODBC_CONFIG_DSN 2 // Configure (edit) data source
#define ODBC_REMOVE_DSN 3 // Remove data source

#if (ODBCVER >= 0x0250)
#define ODBC_ADD_SYS_DSN 4 // add a system DSN
#define ODBC_CONFIG_SYS_DSN5 // Configure a system DSN
#define ODBC_REMOVE_SYS_DSN6 // remove a system DSN
#if (ODBCVER >= 0x0300)
#define ODBC_REMOVE_DEFAULT_DSN7// remove the default DSN
#endif /* ODBCVER >= 0x0300 */
という宣言がありました。
SQLConfigDataSource関数に与える定数を変更することで、システムDSNへの登録が可能なようです。(未検証)


さらにユーザDSNの情報は
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI
システムDSNの情報は
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI
内部に設定されるようです。

システムDSNの情報はレジストリを読み取ることによって可能だと思います。

参考URLは二つあります。
http://www.galliver.co.jp/writing/msdn/msdn01/index.html(かなり下の方)
http://www.vbvbvb.com/jp/gtips/index0251.html(レジストリ操作)
補足コメント
jo_

お礼率 100% (21/21)

参考URLの2つ目をもとに、検証してみました。

システムDSNの情報、レジストリを問い合わせモードでオープンすることによって、存在の可否を確認することができました。

'レジストリOPEN関数
Declare Function RegOpenKeyEx Lib "advapi32.dll" _
  Alias "RegOpenKeyExA" _
    (ByVal hkey As Long, _
     ByVal lpSubKey As String, _
     ByVal ulOptions As Long, _
     ByVal samDesired As Long, _
     phkResult As Long) As Long

' レジストリの主キーの定義済みハンドルを示す定数の宣言
Public Const HKEY_LOCAL_MACHINE = &H80000002

' セキュリティのアクセスマスクを示す定数の宣言
Public Const KEY_QUERY_VALUE = &H1

------------------------------------------

RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
       《レジストリのキー名》, _
       0, _
       KEY_QUERY_VALUE, _
       lngRegSubKeyHandle)

(この関数の戻り値を見ることによって判断します・・・)

これでシステムDSNに登録されていない時のみ
確認することができそうです。
投稿日時 - 2002-03-26 20:25:43
お礼コメント
jo_

お礼率 100% (21/21)

詳しい調査結果の掲載、ありがとうございます。
システムDSNへの登録は、先週末に私も少し検証をしました。
どうやら「ODBC_ADD_SYS_DSN(=4)」で可能なようです。
ちなみに、削除についても「ODBC_REMOVE_SYS_DSN(=6)」でできました。

レジストリの話のところまでは私もまだ未確認ですので
こちらでも、参考URL等を元にもう少し調査してみることにします。
投稿日時 - 2002-03-26 10:27:54
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル12

ベストアンサー率 65% (276/422)

>ODBCのデータソース登録内容の確認 これは無理かも? おそらくどこかのファイルに情報が書き込まれているのだと思いますが、わかりません。。。 しかし、エラー回避(On Error ・・・)を実行後に削除、そして追加を行ったら、すでにあろうと無かろうと関係なく、登録ができると思います。 参考URLにSQLとAccessへのODBCの登録方法を載せてあります。そちらを参考にしてみてく ...続きを読む
>ODBCのデータソース登録内容の確認
これは無理かも?

おそらくどこかのファイルに情報が書き込まれているのだと思いますが、わかりません。。。
しかし、エラー回避(On Error ・・・)を実行後に削除、そして追加を行ったら、すでにあろうと無かろうと関係なく、登録ができると思います。



参考URLにSQLとAccessへのODBCの登録方法を載せてあります。そちらを参考にしてみてください。
もしOracleなら、ちょっと改造するだけで登録できます。


ぼくはODBC接続をたまにしますが、データソースを使用しないでODBC接続を行っています。
必要であれば、そちらも公開しますよ。

(ODBCで接続するDBの種類も書くようにしてくださいね。)
補足コメント
jo_

お礼率 100% (21/21)

DBの種類はAccess(95です)を使っています。
作業でAccessしか使っていなくてSQL-ServerとかOracleの存在を忘れてました。すみません。。。


他に、ご存知の方、いらっしゃいましたらまだ締め切らないでおこうと思いますので回答をお願い致します・・・。
投稿日時 - 2002-03-23 09:47:18
お礼コメント
jo_

お礼率 100% (21/21)

早速の回答ありがとうございます。

・・・実は、そのソース、過去ログからちょっと参考にさせていただいてたりします^^;
登録の作業そのものに関しては、TAGOSAKU7さんが公開しているそのソースでいけるということが確認できました。

登録をする前に、既に登録されていないかどうかをチェックして、登録されていない場合のみ処理を行いたかったのですが、どうも無理っぽいですね・・・。

でも、既にあっても無くても登録作業自体はできるようですね。
投稿日時 - 2002-03-23 09:47:09


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ