ようこそ!
答えてねっと for Businessは、
マイクロソフトが運営する
ビジネスで使うパソコンや
ITに関するQ&Aサイトです。

質問

ODBC経由しないで、AccessVBAからSQLServerに接続したい(できればDAO)

製品名:Office/Access/2000 以前のバージョン

現象:したい/その他

懸賞ポイントが設定されています。 100

この質問は解決で締め切られています

タイトルの事をしたいのですが、
Access2000のVBAで仕組みを作ったのですが、ファイル共有のみで皆さんに使ってもらおうとすると、ODBC設定をするのがややこやしいので、これを回避したいと思っています。
SQLServerには「SASA」というユーザーがPassword「pass」で作ってあります。
という条件で、書き込み可能なレコードセットを開こうと思ったら、
どのようなコードを書いたらよいでしょうか?
頭が古いので、できればDAO3.6くらいで教えていただけるとありがたいです。
ADOでもいいですが・・・

質問者からのコメント

  • 投稿日時:2008/09/17 19:17

samzyのお察しのとおり、ODBC設定をしたくないだけなので、これでOKです。
テストしてみましたが、うまくいきました。ありがとうございます。

回答1 (この回答は質問に対する回答です)

  • 投稿ID:A2008053231
  • 投稿日時:2008/09/17 17:11

 コード書き書きによりデータベースへ接続するコードは、以下のサイトが非常に役に立ちますので、ご紹介します。

[VBでデータベース]
http://homepage2.nifty.com/inform/vbdb/マイクロソフト以外のサイトへ移動する

  •  

回答2 (この回答は質問に対する回答です)

  • 投稿ID:A2008053240
  • 投稿日時:2008/09/17 18:20
  • 最も役に立った投稿として評価されました

「ODBC経由しないで」とありますが、ODBCを利用するが「ODBC接続定義を
作成しないで接続出来る」のであれば良いですか?

フォームのレコードソースにしたいとかクエリーで使用したい等、
リンクテーブルの形式で使用したいのでしたら、ちょっと手間ですが
下記の方法を試してみて下さい。

まず、最初に一度ODBC接続定義を利用してSQL Serverへのリンクテーブルを
作成して下さい(多分、現状でこの接続になっているかと思います)。

どれかリンクテーブルを[デザイン]で開き、[表示]-[プロパティ]-[説明]が、
ODBC;DSN=〜
の形式になっているかと思います(確認のみ)。

フォームを作成し、コマンドボタン等のイベントに、下記の様なコードを記述
して下さい。
※VBAの編集画面で、[ツール]-[参照設定]を開き、
 [Microsoft DAO 3.x Object Library] をチェックしておいて下さい。

Private Sub コマンド0_Click()
Dim DB As DAO.Database
Dim TD As DAO.TableDef

Set DB = CurrentDb()
Set TD = DB.TableDefs("[テーブル名]")
TD.Connect = "ODBC;Driver={SQL Server};SERVER=[サーバ名];DATABASE=[データベース名];Network=dbmssocn;Trusted_Connection=No;UID=SASA;PWD=pass"
TD.Attributes = DAO.TableDefAttributeEnum.dbAttachSavePWD
TD.RefreshLink
End Sub

[テーブル名]は、変換したいAccessのリンクテーブル名
[サーバ名]は、SQL Serverのコンピュータ名(もしくはIPアドレス)
[データベース名] は、SQL Serverのデータベース名
に置き換えて下さい。

概略ですが、
Network=dbmssocn : TCP/IP接続を利用する
Trusted_Connection=No : Windows認証接続にしない(ID/PW接続にする)
dbAttachSavePWD : パスワードを保存する
の意味です(詳しくは、検索してみて下さい)。

フォームを保存し、コマンドボタンをクリックして上記VBAを実行します。

リンクテーブルを[デザイン]で開き、[表示]-[プロパティ]-[説明]が、
ODBC;Driver={SQL Server};〜
の形式に変わっているか確認してみて下さい。

これで、ODBC接続定義は削除してもSQL Serverへの接続は出来るかと思います。

ちなみに最初に、ODBC接続定義を利用してリンクテーブルを作成しない方法も
ありますが、VBAのコードがややこしくなるので省きます。
(興味があるなら、TableDefs.Append で検索してみて下さい)

@@A2008048100@@
も参考になるかと

  •  

回答3 (この回答は回答2に対する回答です)

  • 投稿ID:A2008053242
  • 投稿日時:2008/09/17 18:23

一番下のリンクは無視して下さい。
こちらでした。
http://www.kotaete-net.net/Default.aspx?pgid=14&qid=24106285217

  •