- ベストアンサー
ODBC接続の変更作業について
- AccessからSQLServerへのODBC接続についての変更作業についてまとめます。
- Accessファイルを置き換える際に全てのクライアントのODBC接続を作り直す手間を軽減する方法について考えます。
- クライアント台数が増えた場合のODBC接続の管理についても考察します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ODBCの再設定?リンクテーブルの更新ですから再設定ではありません。 面倒ならODBCを介さずに接続もできます。 http://www.red.oit-net.jp/tatsuya/vb/ADO.htm このように接続を記述して取得するのは全然問題ありません。 大きなDBを使うときはなるべく勉強してからにしましょう。AccessはDBとはいえ個人ユーズです。あくまでも箱でしかありませんのでこの延長で開発する人はかなりの確率で破たんします。 具体的に書けば大変ですが、簡単に説明すると、例えばExcelやWordを複数の人が同時に同じものを更新するのは不可能です。DBも同じで同じレコードは同時に更新はできません。そのための機能として排他制御がありますが、大きなDBはこの辺の機能が非常に厳密です。 例えばAccessでテーブルを取得した場合はExcelのシートを広げた感じになりますが、このばあい編集を前提としているわけです。この段階でAccessはMSSQLに対してSELECT文をいくつかに分けて発行します。10000レコードに一万回発行した場合大変なことになるので小分けに発行します。少ないテーブルだと一度に広げるのですべてが変更対象になります。つまりその状態ではレコードあるいはテーブル全部をロックしてしまいます。他の人は更新できない状態になります。またクエリで選んで拾っても複数のレコードが影響します。MSSQLはロックを行単位、ブロック、テーブルなどエスカレーションで行いますが、ロックを競合した場合エラーが出るならまだよいですが、更新がバッティングすると(この場合アプリの書き方で影響を受ける行を特定できなかったなど)DBは判断できず爆発します。 つまりこの辺を考慮すればロックを制御する必要があるわけですが、リンクテーブルではそのような書き方は不可能です。勝手にSELECTするから。簡単に接続できるということは機械任せということで不便の裏返し。本来は読み取りで開いて、目的のものを見つけてから一つにロックをかけた後更新処理をするのが正しいのです。 AccessのリンクにSELECT文をかけてもMSSQLから全部を取得した後にACCESS側でSELECTする仕組みです。これではSQLサーバーはたまったものではありません。もちろん100人なんか使えないのが普通です。 自動でやってくれるなんてのはないのです。地道にプログラムを勉強して人間がどこで制御するかを考えて組み立てる。これは基本です。業務によっても制御方法は変わってきます。人間がやらなければだめなのですよ。
その他の回答 (1)
- IDii24
- ベストアンサー率24% (1597/6506)
ます。 >サーバー WindowsServer2008SP2 + SQLServerExpress2012クライアントとサーバーは別のドメインです。 別のドメインということは認証系も別ということですね。まあそれでも認証されていれば問題はありませんけど。 で、SQLサーバーを利用しているのにAccessのテーブルを変更するとは?SQLのテーブルを変更するのでは?リンクテーブルはAccessからでは変更できません。 まずSQLサーバ-のテーブル変更をしてAccessのリンクをし直す必要があるということになります。それは全部のAccessについて必要です。 そもそもSQLサーバーのテーブルにデータがあれば、まずSQLサーバ-はほとんどのテーブル変更を認めません。項目の追加だけができますが、それは末尾に追加されます。そして変更できない場合はデータ-を他へ移してから削除してさらに作り直してデータを戻す作業になります。 そうすることでAccess側のプログラムにも変更が必要になると思います。 つまりテーブル定義は最初に相当練らないと後からの変更には危険があるということです。またAccessから利用する場合100台なんて考えられません。なぜならAccessの接続はリソースをふんだんに使うので制御できないからです。結局はパフォーマンスが落ちるし、データも破壊されます。もしどうしてもの場合はリンクテーブルではなく、直接にSQLサーバを参照し制御するVBAを書く必要があります。そうなるとAccessじゃなくてもいいじゃん。ということになりますけど。
補足
IDii24さん ご回答ありがとうございます。 私の質問が要領を得ていませんでした。 SQLServer上でテーブルのフィールドを1つ増やして、そのフィールドをAccess上で使えるようにAccessファイルを変更した後で、再度ODBCの設定をすることが手間であるということです。 よろしければ、追加の質問をお願いします。 >なぜならAccessの接続はリソースをふんだんに使うので制御できないからです。結局はパフォーマンスが落ちるし、データも破壊されます。もしどうしてもの場合はリンクテーブルではなく、直接にSQLサーバを参照し制御するVBAを書く必要があります。そうなるとAccessじゃなくてもいいじゃん。ということになりますけど。 具体的にどのような手法でしょうか?教えていただけると、うれしいです。 よろしくお願いします。
補足
IDii24さん。迅速なご回答ありがとうございます。 改めて自分の勉強不足を痛感しております。 おっしゃるとおりselectでリンクしているSqlserverのテーブルを参照してレコードの追加・更新・削除はADOを使ってやっています。 IDii24さんのご指摘どおり地道に勉強を続けていきたいと思います。 また質問させていただく機会もあると思いますので、よろしくお願いします。