プロが教えるわが家の防犯対策術!

VB6上で、ODBCのデータソースの自動登録を行おうと思っています。
その際、実際の登録処理を行う前に、
既にデータソースへ登録されているかどうかを
チェックしたいのですが、どのようにすればいいのでしょうか?
(チェックしたいのはシステムDSNの内容です・・・)

A 回答 (2件)

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


これは無理かも?

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



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


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

(ODBCで接続するDBの種類も書くようにしてくださいね。)

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=108207

この回答への補足

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


他に、ご存知の方、いらっしゃいましたらまだ締め切らないでおこうと思いますので回答をお願い致します・・・。

補足日時:2002/03/23 09:47
    • good
    • 0
この回答へのお礼

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

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

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

でも、既にあっても無くても登録作業自体はできるようですね。

お礼日時:2002/03/23 09:47

多少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/in …(かなり下の方)
http://www.vbvbvb.com/jp/gtips/index0251.html(レジストリ操作)

参考URL:http://www.vbvbvb.com/jp/gtips/index0251.html

この回答への補足

参考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
    • good
    • 0
この回答へのお礼

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

レジストリの話のところまでは私もまだ未確認ですので
こちらでも、参考URL等を元にもう少し調査してみることにします。

お礼日時:2002/03/26 10:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A