VB6のプログラム上から、ODBCのデータソースを登録する方法は、ありますか?

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

A 回答 (2件)

どもども田吾作7です。


以下のソースを標準モジュールにて実行してみてください。

※注意
スペースは全て全角で行っていますので、コピペがうまくいかないときは、全角スペース1つを、半角スペース2つに置き換えてください。


Option Explicit

Private Const ODBC_ADD_DSN = 1  ' 追加
Private Const ODBC_CONFIG_DSN = 2 ' 編集
Private Const ODBC_REMOVE_DSN = 3 ' 削除

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

Sub Main()
  'SQL-Server
  Call AddDSN_SQL("SQL_DSN")
  Call RemoveDSN("SQL_DSN", "SQL Server")
  
  'Access
  Call AddDSN_ACCESS("AccessDSN", "《MDBファイルのフルパス》")
  Call RemoveDSN("AccessDSN", "Microsoft Access Driver (*.mdb)")
End Sub


' データソースの追加 for SQL-Server
Private Sub AddDSN_SQL(inDSNName As String)
  Dim wkSts      As Long
  Dim strDriver    As String
  Dim strAttributes  As String
  
  ' ODBCドライバ
  strDriver = "SQL Server"
  
  ' 属性
  strAttributes = "DSN=" & inDSNName & vbNullChar & _
          "Description=SampleDSN" & vbNullChar & _
          "Server=(local)" & vbNullChar & _
          "Database=pubs" & vbNullChar
  
  ' データソースの登録
  wkSts = SQLConfigDataSource(0&, ODBC_ADD_DSN, strDriver, strAttributes)
  
  ' 登録の成功・失敗の判断
  If wkSts Then
    MsgBox "登録成功 SQL"
  Else
    MsgBox "登録失敗 SQL"
  End If
  
End Sub

' データソースの追加 for ACCESS
Private Sub AddDSN_ACCESS(inDSNName As String, inMdbFile As String)
  Dim wkSts      As Long
  Dim strDriver    As String
  Dim strAttributes  As String
  
  ' ODBCドライバ
  strDriver = "Microsoft Access Driver (*.mdb)"
  
  ' 属性
  strAttributes = "DSN=" & inDSNName & vbNullChar & _
          "Uid=Admin" & vbNullChar & "pwd=" & vbNullChar & _
          "DBQ=" & inMdbFile & vbNullChar
   
  ' データソースの登録
  wkSts = SQLConfigDataSource(0&, ODBC_ADD_DSN, strDriver, strAttributes)
  
  ' 登録の成功・失敗の判断
  If wkSts Then
    MsgBox "登録成功 ACCESS"
  Else
    MsgBox "登録失敗 ACCESS"
  End If
End Sub

' データソースの削除
Private Sub RemoveDSN(inDSNName As String, inServerDriver As String)
  Dim wkSts      As Long
  Dim strDriver    As String
  Dim strAttributes  As String
  
  ' ドライバ名を指定する
  strDriver = inServerDriver
  
  ' 削除するデータソース名を指定する
  strAttributes = "DSN=" & inDSNName & vbNullChar
  
  ' データソースを削除する
  wkSts = SQLConfigDataSource(0, ODBC_REMOVE_DSN, strDriver, strAttributes)
  
  ' 削除の成功・失敗の判断
  If wkSts Then
    MsgBox "削除成功"
  Else
    MsgBox "削除失敗"
  End If
End Sub

    • good
    • 0
この回答へのお礼

細かい回答ありがとうございます。
削除や変更もできるんですね。使用するかはわからないですけど
参考になりました。DSNやServerなどのプロパティ設定はODBCのデータソースファイルを作成してみて、エディタで確認しました。INIファイル形式になってました。

お礼日時:2001/07/24 09:22

この関数を使えば出来るはずです。


Declare Function SQLConfigDataSource Lib "odbccp32.dll" (ByVal hwndParent As Integer, ByVal fRequest As Integer, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long


rtn = SQLConfigDataSource(0, 1, "ドライバ名", "DSN=データソース名" & Chr$(0) & "SERVER=サーバ名" & Chr$(0) & "DATABASE=データベース名" & Chr$(0))
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
なるほどAPI使うんですね。
そこで 補足質問何ですけど

●アクセスの場合
サーバー名は不要ですか?
またドライバは {Micrsoft Access Driver}でいいのでしょうか?
●SqlServerの場合
データベース名は不要ですか?

一応、簡易的にコーディングしてみましたが、実行後に
コントロールボックスのODBCアドニミストレータを開きましたが追加されていませんでした。rtn = は、0でした。rtn は実行時の返り値だと思うのですが、0てエラーなんですか?
いろいろと質問させていただいてすみませんがよろしくお願いします。

お礼日時:2001/07/23 18:48

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

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

このQ&Aを見た人はこんなQ&Aも見ています

この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のデータソース登録内容の確認

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

Aベストアンサー

多少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(レジストリ操作)

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

多少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 ...続きを読む

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のホスト情報やデーターベース名前、ユーザ名、パスワードをいれる。

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

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

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

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

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

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

Aベストアンサー

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

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

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

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

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

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

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

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

Qカスタムコントロール作ってます(VB.NET)。VB.Net にVB.6のActiveX作成時にあったプロパティページ作成ができないようですが

タイトルどうりです。VBNETのカスタムコントロールでデザインモードにおけるフォームつまりプロパティページやビジュアルにプロパティボックスから設定できるようにしたいのですが、どうしたらできるでしょうか?VB6ではできたのですが、(Activexコントロール)。

よろしくお願いします。

Aベストアンサー

通常のプロパティと同じように、プロパティ ウィンドウに項目を表示して設定できるようにする必要があります。
具体的には、
1. カスタム コントロールのクラスに外部公開する Property プロシージャを作成して、内部で値を保存できるようにする。
2. そのプロパティの宣言部分で、プロパティ ウィンドウに表示するように指示する属性値を設定する。

こんな感じです。

参考URL:http://www.atmarkit.co.jp/fdotnet/winexp/winexp02/winexp02_01.html

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できないみたいですね
ごめんさい

QVB6からVC6で作成したDLLの関数を呼び出すときに注意すること

VB6からVC6で作成したDLLの関数を呼び出すときに、型について気をつけないといけませんが、VB6でint型のものはVC6ではshortにしないといけないのでしょうか?マシンやOSや開発環境(例えばVS2005やGCC)により違ってくるのでしょうか?

VB6とVC6でやり取りする場合の型について知りたいです。

あと、ActiveXのDLLの場合は関数にアクセスするのではなく、COM(という概念がわかっていないのですが)を使うのですか?

Aベストアンサー

> VB6でint型のものはVC6ではshortにしないといけないのでしょうか
VB6のInteger型(VB6ではint型とは言いません)は「16Bit符号付整数」ですから、
VC6の該当するデータ型はshort型ですね。

ちなみに、VS2005のInteger型は「32bit符号付整数」です。
対応するVC6/VC2005のデータ型はlong又はint型ですね。

> VB6とVC6でやり取りする場合の型について知りたいです。
VB6とVC6のデータ型の対応表は、VB6のヘルプ(MSDNライブラリ)の
「C 言語の宣言の Visual Basic への変換」に書かれています。

> ActiveXのDLLの場合は関数にアクセスするのではなく、
> COM(という概念がわかっていないのですが)を使うのですか?
まあ、使いますね。
#特に「COM」と言う名前の関数とかがあるわけじゃありませんけど。

手順的には
(手順1)該当ActiveXの提供するする機能が含まれるオブジェクトを生成する。
 次のどちらかで作成する。
 ・ActiveXDLLを「参照設定」して、Newキーワードで作成
 ・参照設定しないで、CreateObject関数で作成
(手順2)オブジェクトの関数(又は、サブルーチン,プロパティ)を呼ぶ。
ですね。

> VB6でint型のものはVC6ではshortにしないといけないのでしょうか
VB6のInteger型(VB6ではint型とは言いません)は「16Bit符号付整数」ですから、
VC6の該当するデータ型はshort型ですね。

ちなみに、VS2005のInteger型は「32bit符号付整数」です。
対応するVC6/VC2005のデータ型はlong又はint型ですね。

> VB6とVC6でやり取りする場合の型について知りたいです。
VB6とVC6のデータ型の対応表は、VB6のヘルプ(MSDNライブラリ)の
「C 言語の宣言の Visual Basic への変換」に書かれています。

> ...続きを読む


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

人気Q&Aランキング

おすすめ情報