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

このQ&Aに関連する最新のQ&A

A 回答 (2件)

多少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

>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

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPostgreSQLと、AccessをODBC接続

PostgreSQL初心者です。

AccessからPostgreSQLに移行しようと思い、ODBCで接続しようとしたのですが、エラーが発生して進めません!
そして、いろいろ試してみたのですが、同じエラーが発生してしまいます。

設定、エラー内容は、下記になります。


エラー内容

「ODBC--呼び出しが失敗しました。

Could not connect to the server;
Could not resolve hostname.(#101)[Microsoft][ODBC Driver Manager]ドライバのSQLSetConnectAttrは失敗しました。(#0)」


設定

データソース(ODBC)→システムDSN→PostgreSQL Driver Setup

Database
Server dbserver
User Name localhost
Description
Port 5432

以上、宜しくお願い致します。

OS:WindowsXP Professional Version 2002 Service Pack3
PostgreSQL 9.1 Version 1.14.3
Access XP(2002)
になります。

PostgreSQL初心者です。

AccessからPostgreSQLに移行しようと思い、ODBCで接続しようとしたのですが、エラーが発生して進めません!
そして、いろいろ試してみたのですが、同じエラーが発生してしまいます。

設定、エラー内容は、下記になります。


エラー内容

「ODBC--呼び出しが失敗しました。

Could not connect to the server;
Could not resolve hostname.(#101)[Microsoft][ODBC Driver Manager]ドライバのSQLSetConnectAttrは失敗しました。(#0)」


設定

データソース(ODBC)→システムDSN→PostgreS...続きを読む

Aベストアンサー

http://blogs.yahoo.co.jp/kensinisnek/10176003.html

9. 以下のメッセージが出力されたら、接続は成功ですので、「OK」をクリックしてください。 他のメッセージが表示される場合、何かしら設定に問題があると思われます。

の画面は出ましたか?

QODBCデータソースへの接続方法

はじめまして。よろしくお願いします。

ODBCを利用して、データベースをアクセスしようと思っています。
書籍等を覗いてみると、OpenDatabaseメソッドを使用して、
OpenRecordsetメソッドでレコードセットを作成する。
とかいてあります。

今回、僕が扱うデータベースは2つ(ODBC接続文字列のDATABASE
が2個指定するケース)ありまして、その場合の指定方法が分からず
悩んでいます。もちろん、2つのデータベースをSQLでレコードを作成
します。

どのような指定が必要なのでしょうか?

初心者の質問、また言葉足らずの面もあって申し訳ございませんが、
お気づきの方が居られましたらご教授ください。

Aベストアンサー

なるほど、売上データの一覧を出したいんだけど、
その明細の担当者や商品名などのマスタ(定数)データは他のDBですよ、というわけですね。
いくつか方法はありますが・・・

いちばん簡単なのは、たとえば
「担当者名抽出関数」や「商品名抽出関数」などを作成して、
引数にコードを指定すれば、名称を戻り値として返す構造にしておきます。
で、売上明細を1レコードづつ描画していく際に、
その関数の戻り値を設定していくやり方。
このやり方がいちばん簡単ですが、同時使用ユーザー数が多かったり、
ネットワークがヘボで遅かったりすると、レスポンスに難ありです。
各名称の抽出関数ではかならずレコードセットオブジェクトを開放してください。

もうひとつは・・・
Accessのmdbを1つワークテーブルとして作成しておき、
売上明細のテーブルと各名称のマスタテーブルをリンクさせておくこと。
こうすれば、そのAccessMDBに貼られたリンクテーブルは同一DB上として
扱うことが出来ます。
このやり方の問題点は、MDBのリンクを使用しているので、環境に依存する、
ということです。フォルダ構造などが変わると、
リンクも再度貼りなおしになるため、メンテナンスに気を使います。

私なら・・・クラ/サバ構造であることを前提にすれば、前者かな。

外していたらごめんなさい。

なるほど、売上データの一覧を出したいんだけど、
その明細の担当者や商品名などのマスタ(定数)データは他のDBですよ、というわけですね。
いくつか方法はありますが・・・

いちばん簡単なのは、たとえば
「担当者名抽出関数」や「商品名抽出関数」などを作成して、
引数にコードを指定すれば、名称を戻り値として返す構造にしておきます。
で、売上明細を1レコードづつ描画していく際に、
その関数の戻り値を設定していくやり方。
このやり方がいちばん簡単ですが、同時使用ユーザー数が多かった...続きを読む

QODBCドライバが使えない

Oracle8.1.5のクライアントをインストールしたのですが、ODBCドライバで[Oralce ODBC Driver],[Microsoft ODBC For Oracle]の両方ともが使用できません。
(ODBCデータソースアドミニストレータで追加ができない)
SQL*Plusでは、接続可能なんですが....


OSはWIN98です。
NTじゃないとダメなんでしょうか?

どーしたらODBCドライバが使えるようになるのでしょう。助けてください。お願いします。

Aベストアンサー

#1です.
MS最新のドライバをインストールしてどうでしょうか?

http://www.microsoft.com/downloads/release.asp?ReleaseID=37349&area=search&ordinal=7

参考URL:http://www.microsoft.com/downloads/release.asp?ReleaseID=37349&area=search&ordinal=7

QVB.NETでODBC接続のデータベースの更新方法について

VB.NETを触り初めてまだ数日の初心者ですが、宜しくお願いします。
VB5.0の経験はありますが、あまりの違いに戸惑っています。

VB.NETにて、MySQL3.23.56との接続にチャレンジしています。

私が調べた範囲では、OdbcDataAdapterにてデータセットを取得し、OdbcDataAdapterにInsertCommand,UpdateCommand,DeleteCommandを設定した上でOdbcDataAdapterのUpdateメソッドによってデータベースを更新するのがセオリーのように感じたのですが、正直、いちいちパラメーターとかを設定するのが面倒な気がします。
それにこの方法だとデータセットのすべてのフィールドをWhere条件に使うようなので、パフォーマンス的にもどうかなと思います。

データセットという概念は非常に便利だと思うのですが、変更されたデータセットのデータベースへの反映をもう少しスマートにできないでしょうか?

皆様はどのようにされているのか、是非参考にさせて下さい。宜しくお願いします。

VB.NETを触り初めてまだ数日の初心者ですが、宜しくお願いします。
VB5.0の経験はありますが、あまりの違いに戸惑っています。

VB.NETにて、MySQL3.23.56との接続にチャレンジしています。

私が調べた範囲では、OdbcDataAdapterにてデータセットを取得し、OdbcDataAdapterにInsertCommand,UpdateCommand,DeleteCommandを設定した上でOdbcDataAdapterのUpdateメソッドによってデータベースを更新するのがセオリーのように感じたのですが、正直、いちいちパラメーターとかを設定するのが面倒な気がします。
...続きを読む

Aベストアンサー

(1)コマンドビルダを使う
Select文を決めれば、Insert, Update, Delete文を自動生成します。
パフォーマンスが必要でなければ、これで十分。

(2)データセットを使わずに直接SQL文を発行する。

OleDbCommand.Execute* 等。

QpostgreSQLのODBCはどこに・・・

postgreSQLやaccessが初心者な私ですが、
既存のデータベース(postgreSQL)をaccess2003でデータベース内を検索させたいと思っています。
accessとposgreSQLを繋げるにはODBCが必要ということでWindowsXP側には入れたのですが、postgreSQL側にODBCが入っていないようでaccess2003と通信することが出来ません。
前からあるデータベースなのでインストールを行った人がpostgreSQLインストール時にODBCをインストールしないようにしたのかもしれません
そこで質問なのですが、ODBCが入っていない状態でpostgreSQLにODBCだけを入れることは可能なのでしょうか?できたらその方法や方法が書かれているページを教えて頂けますでしょうか?お願いします。

Aベストアンサー

>ODBCが必要ということでWindowsXP側には入れたのですが、
↑このドライバーはpostgreSQL用ODBCドライバーでしょうか?(念のため)
postgreSQL用ODBCドライバーはpostgreSQL側にインストールする必要はありません。このドライバーをAccess側(windowsXP)にインストールして使うことになる。もちろん、AccessからpostgreSQLにつながるには設定が必要です。
Accessのメニューー>ファイルー>テーブルのリンクをクッリクすると、ダイアログが表示される。そこでデーターベース種類をODBCに指定する。次にODBC設定(選択画面)が表示されるので、postgreSQLのホスト情報やデーターベース名前、ユーザ名、パスワードをいれる。

Q(VB初心者) VB起動時既に起動されているExcelの情報

VisualBasic 6.0 初心者です。
既に起動しているExcelの後にVisualBasicを立ち上げた場合、
既に起動しているExcelの情報を得ることが出来るのでしょうか?
やりたい事は
Excel起動⇒VB起動⇒Excelのセルを選択⇒そのセルに入力されている値
を取得。
VB起動⇒Excel起動の場合はActiveCellの値を取得出来たのですが
既に起動しているExcelの場合 エラー になってしまいます。
お手数ですが、ご教授願います。

Private Sub コマンド1_Click()
MsgBox ActiveCell
End Sub

'Form_Load時にこれを実行しないと開いたExcelのアクティブセル値を得られない??
Private Sub Form_Load()
MsgBox ActiveCell
End Sub

Aベストアンサー

http://okwave.jp/qa4895039.html

と照らし合わせても、提示されているコードをVB6.0で行なうとエラーになり、VBAであれば取得できるようなんです。

コードがVB6.0に書かれているのかVBAに書かれているのか、わからないのです。
⇒質問はExcelVBAの事のように思えてしまいます。

一応VB6.0でExcelの起動確認と値取得をコマンドボタンで実行したものは、

Private Sub Command1_Click()
Dim xlApp As Object

On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")

If xlApp Is Nothing Then
MsgBox "Excelは起動してません"
Else
MsgBox "Excelは起動してます" & vbLf & xlApp.ActiveCell
End If

On Error GoTo 0

Set xlApp = Nothing
End Sub

でした。
⇒Form_Loadでは何もしてません。

http://okwave.jp/qa4895039.html

と照らし合わせても、提示されているコードをVB6.0で行なうとエラーになり、VBAであれば取得できるようなんです。

コードがVB6.0に書かれているのかVBAに書かれているのか、わからないのです。
⇒質問はExcelVBAの事のように思えてしまいます。

一応VB6.0でExcelの起動確認と値取得をコマンドボタンで実行したものは、

Private Sub Command1_Click()
Dim xlApp As Object

On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")

If xlApp Is No...続きを読む

QACCESS2000のODBC

こんにちわ。
いまACCESS2000のMDBにODBC経由で,
ORACLE10gのテーブルを参照したいと思い,
[テーブルのリンク]-[ファイルの種類]-[ODBC]としたところ,
ODBCソースを選択するダイアログが表示されません。
何か設定の不備があるのでしょうか?
教えてください。よろしくお願いします。

Aベストアンサー

10gはあまりいじったことがないので参考リンク先の下記記述を参考にしてください。

1.Oracle Net構成 -リモートDBへの接続構成 (ページ後半)
2.リンクテーブルのためのODBC接続の設定(ページ後半)

上記2箇所設定しなければODBCの一覧に載ってこなかったと思います。

参考URL:http://otndnld.oracle.co.jp/easy/access/shift_manual/index.html#change

QVB データテーブルA列とB列があった時、B列の1行目から1stepずつデータを入力していきたい

AddDataTableRowメソッドにて
1月として、A列は日付で先に31日分の行が作成されます。その際にB行はNothingで生成しました。
私は、A列はそのままでB列の1行目から1つずつ書き込んでいくコーディングが知りたいです。
現在はAddDataTableRowのためA列の最後の行の次の行が追加され入力されてしまいます。

Aベストアンサー

whereで列BがNothingだけにして、列AのMinの値を取得
列A指定して、狙い打ちでUpdate

Qmysql 4.1.2とODBCドライバ

Windows2000にmysql4.1.2をインストールしました。
このPCにODBCドライバ(MySQL ODBC 3.51 Driver)を
インストールしました。

 このODBCドライバでは、外部の3.58などのMySQLサーバ
には問題なく接続できますが、ローカルのMySQL4.1サーバ
に接続しようとした場合だけ、以下のエラーになります。

[MySQL][ODBC 3.51Driver]Client does not support authentication protocol requested by server; consider upgrading MySQL client

MySQLサーバ、ODBCとも最新なので、これ以上はアップ
グレードできないと思うのですが・・ODBCドライバや
MySQLサーバの設定にも認証関係はありませんので、
困っています。

アドバイスなどいただけたら幸いです。

Aベストアンサー

No1 inu2 です
すみません、またODBC3.52はdownloadできないみたいですね
ごめんさい

QVB2008でデータソース取得時にエラーが出ます。

OS:WindowsXP、VB2008+SQLSERVER2005の環境でデータベースソフトを作成中ですが、データーソースを取り込む際に、下記のエラーが出ます。
ネットで調べてVB2008、SQLSERVERの再インストールなどを行いましたが、解決しませんでした。
このようなエラーが出た方がいらっしゃれば、解決方法をご教示下さい。

'Microsoft.VisualStudio.DataDesign.SyncDesigner.SyncFacade.SyncTableConfigManager'のタイプ初期化子が例外をスローしました。

Aベストアンサー

下記に該当しませんか?

http://connect.microsoft.com/VisualStudio/feedback/details/415955/microsoft-visualstudio-datadesign-syncdesigner-syncfacade-synctableconfigmanager-threw-an-exeption


人気Q&Aランキング

おすすめ情報