ODBC接続の変更作業について

このQ&Aのポイント
  • AccessからSQLServerへのODBC接続についての変更作業についてまとめます。
  • Accessファイルを置き換える際に全てのクライアントのODBC接続を作り直す手間を軽減する方法について考えます。
  • クライアント台数が増えた場合のODBC接続の管理についても考察します。
回答を見る
  • ベストアンサー

ODBC接続の変更作業について

AccessからSQLServerへのODBC接続について。 AccessからODBC接続でSQLServerのテーブルをリンクして使用しています。 構成は次のとおりです。 クライアント Windows7 + Access2003 6台 サーバー   WindowsServer2008SP2 + SQLServerExpress2012   クライアントとサーバーは別のドメインです。 質問させていただきたいことは、 クライアントのAccess2003の内容の変更(フィールドの追加やフォームの変更など)、をした際にAccessファイルを置き換えますが、この際に6台のクライアント全てのODBC接続を作り直して再度設定する手間を何とかできないでしょうか? SQLServerに移行する前は、ファイルサーバー上のAccessファイルのテーブルにリンクを張って使用していましたが、この場合は変更したAccessファイルを6台のクライアントに上書きするだけで作業が終わっていました。 現状のODBC接続を利用している状況でも、同じくらい簡単に出来る方法はないのでしょうか? 現状はクライアントが6台ですが、例えば、クライアントが100台とか200台とかあったりする場合はどうやっているのかとても興味があります。 SQLServerを使用するのは始めてで、移行作業を始めて3ヶ月程度の初心者です。 不足している情報があればご指摘ください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.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人なんか使えないのが普通です。 自動でやってくれるなんてのはないのです。地道にプログラムを勉強して人間がどこで制御するかを考えて組み立てる。これは基本です。業務によっても制御方法は変わってきます。人間がやらなければだめなのですよ。

manbobobo
質問者

補足

IDii24さん。迅速なご回答ありがとうございます。 改めて自分の勉強不足を痛感しております。 おっしゃるとおりselectでリンクしているSqlserverのテーブルを参照してレコードの追加・更新・削除はADOを使ってやっています。 IDii24さんのご指摘どおり地道に勉強を続けていきたいと思います。 また質問させていただく機会もあると思いますので、よろしくお願いします。

その他の回答 (1)

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.1

ます。 >サーバー   WindowsServer2008SP2 + SQLServerExpress2012クライアントとサーバーは別のドメインです。 別のドメインということは認証系も別ということですね。まあそれでも認証されていれば問題はありませんけど。 で、SQLサーバーを利用しているのにAccessのテーブルを変更するとは?SQLのテーブルを変更するのでは?リンクテーブルはAccessからでは変更できません。 まずSQLサーバ-のテーブル変更をしてAccessのリンクをし直す必要があるということになります。それは全部のAccessについて必要です。 そもそもSQLサーバーのテーブルにデータがあれば、まずSQLサーバ-はほとんどのテーブル変更を認めません。項目の追加だけができますが、それは末尾に追加されます。そして変更できない場合はデータ-を他へ移してから削除してさらに作り直してデータを戻す作業になります。 そうすることでAccess側のプログラムにも変更が必要になると思います。 つまりテーブル定義は最初に相当練らないと後からの変更には危険があるということです。またAccessから利用する場合100台なんて考えられません。なぜならAccessの接続はリソースをふんだんに使うので制御できないからです。結局はパフォーマンスが落ちるし、データも破壊されます。もしどうしてもの場合はリンクテーブルではなく、直接にSQLサーバを参照し制御するVBAを書く必要があります。そうなるとAccessじゃなくてもいいじゃん。ということになりますけど。

manbobobo
質問者

補足

IDii24さん ご回答ありがとうございます。 私の質問が要領を得ていませんでした。 SQLServer上でテーブルのフィールドを1つ増やして、そのフィールドをAccess上で使えるようにAccessファイルを変更した後で、再度ODBCの設定をすることが手間であるということです。 よろしければ、追加の質問をお願いします。 >なぜならAccessの接続はリソースをふんだんに使うので制御できないからです。結局はパフォーマンスが落ちるし、データも破壊されます。もしどうしてもの場合はリンクテーブルではなく、直接にSQLサーバを参照し制御するVBAを書く必要があります。そうなるとAccessじゃなくてもいいじゃん。ということになりますけど。 具体的にどのような手法でしょうか?教えていただけると、うれしいです。 よろしくお願いします。

関連するQ&A

  • SQLSERVER2005 ODBCでの接続について

    SQLSERVER2005 ODBCでの接続について Access2003からODBCで接続して利用しております。 今までリンクテーブルでODBC接続する場合、各クライアントPCにODBCのデータソースを設定しておりましたが、各クライアントにODBCのデータソースを登録しなくても、ODBCでリンクさせることができているものがありました。回りに聞ける人がいないので質問させていただきました。 1.SQLServer側でなにか特別な設定をしているのでしょうか?どうやって実現しているのか知りたいです。 2.SQLServer2000で同じことができますでしょうか? 教えていただければ幸いです。 情報が不足している場合はご指摘ください。 宜しくお願い致します。

  • sqlserver2008にODBC接続がNG

    初めてSQLSERVER2008を使用します。 現行Sqlserver2000を使用していて、接続するのにODBC(V2000.85.1132.00)を使用しています。このODBCでSqlserver2008に接続するODBCを作成しようとしていますが、sqlserverエラー17(sqlserverが存在しないかアクセスが拒否されました)というエラーが出てしまいます。 また、sqlserver native client10.0でもsqlserverエラー121で接続出来ません。 サーバー側に何か設定が必要なのでしょうか。 アドバイス何卒宜しくお願い致します。」

  • はじめまして、こんにちわ。

    はじめまして、こんにちわ。 仕事でサーバーとクライアント1台の移行作業をしています。 サーバはWindowsServer2003、SQLServer2003からどちらも2008へ、 クライアントはXPです。 現行ではクライアントのAccessファイルにリンクテーブルを作成してあり システムからAccessを呼び出しAccess内にあるレポートで帳票を出力する といった作業をしておられます。 ちなみにAccessは2000です。 あとリンクはファイルDSNを使用しているようです。 そこで質問なのですが、サーバを移行する際に サーバー名、SQLserverへのログインユーザー&パスワード、サーバーのIPアドレス、 データベース名、テーブル名をまったく同じにして 現行のサーバと新規サーバを交換しましたところAccessのリンクテーブルが開けず 「ODBC--'SQLServerXXXXXXX'への接続に失敗しました」とエラーになりました。 新規クライアントだけエラーなのではなく既存の全クライアント端末で同様の症状が出ています。 これは何が原因なのでしょうか? サーバの設定をそのまま移行させただけではクライアントのAccessリンクテーブルは そのままつながってはくれないんでしょうか? どうか皆さんのお知恵をおかしください。

  • ODBCタイムアウトエラー

    WindowsXP環境でACCESS2003を使用して、ODBCリンクでSQL SERVER2005に接続し、データーを取得後ローカルテーブルにデーターを置く処理を作って運用していたのですが、 Windows7でACCESS2003に移行し、システム内容は変更していないのですが Windows7になってリンクテーブルを開くと「ODBC タイムアウトエラー」が発生します。 WindowsXPのときはタイムアウトが出ずに1分くらいで結果が返ってきます。 多分、SQL SERVER ドライバーの影響と思うのですが分かりません。 どなたか教えてください。 Windows7 SQLSERVER(ODBC)ドライバー バージョン:6.01.7601.17514 windowsXP ドライバー バージョン:200.85.1132.00

  • ODBCの設定について

    ODBCの設定について質問です。 サーバー上にデータベース(Access)を作成し、使用するデータテーブルの登録も終わってクライアント側からデータベース・サーバーに接続して、実際にデータテーブルを活用したいのですが設定がうまくいきません>< 現状はコントロールパネル→データソース(ODBC)でユーザーデータソースの追加からMicrosoft Access Driverを追加し空のデータベース(Access)を開いてテーブルのリンクを実行し「ファイルの種類」から「ODBC Databases」で先ほど追加したデータソースを選択して実行しています。 すると 「ODBCを使用して、外部Microsoft Jetデータベースエンジンのテーブルや組み込み可能なISAMデータベースのテーブルのインポート、エクスポートまたはリンクを行うことはできません。」 とエラーがでます。 なにが原因でしょうか?

  • ACCESSを使ってのODBC接続がうまくいかない

    クライアント側のACCESSを使いODBC経由でMySQLへ接続しようとしたらうまく接続が出来ません。 現象はACCESSの、[新規作成] - [テーブルのリンク] - ファイルの種類を[ODBC Databases ()] - コンピュータデータソースにあるODBCを選択。 すると普通はここでテーブルの一覧が表示されるはずが、最初の画面に戻ってしまいます。 他のソフト(EXCELなど)でODBC接続を行ったところうまくいきます。なのでODBC自体の設定は問題ないと考えられます。 以前はうまく行っていたのですが、ACCESSのデータファイル(.mdb)を一度削除して新たに作り直したらうまくいかなくなりました。 この現象で何かわかる方いらっしゃいますか? よろしくお願いします。 MySQL 4.0 ODBC 3.51 ACCESS 2000

  • SQLSERVERへのODBC接続について

    はじめまして。SQLSERVERへのODBC接続がうまくいきません。 初心者ですがよろしくお願いします。 自宅に2台のPCがあり、LAN接続できるようになっています。 (2台ともWindowsXP HomeEdition SP3です) 1台のPCにSQL SERVER2005をインストールしてリモート接続等の環境設定を行いました。 そのサーバーに別のPCからSQL Server Management Studio Expressを利用して接続できることを確認しました。 (テーブルも作成してみました) また、別のPCからEXCELのVBAでADODBを利用して、そのテーブルのデータを取得できることも確認しました。 しかしながら、ODBCのデータソース作成がうまくいきません。 ●ドライバ  SQL Server バージョン:2000.85.1132.00 ●エラー内容  [ODBC SQL Server Driver][TCP/IP Sockets]指定されたSQL Server  が見つかりません。  ※最初はアクセスが拒否されましたみたいなエラーが出ていた   ような気もするのですが・・・ ドライバにSQL Native Client Version09.00.2047を使ってみても、「サーバー接続の確立時にエラーが発生しました」となってしまい接続できませんでした。 ODBCを利用する場合には、何か特別な設定等が必要なのでしょうか? よろしくご教授お願いします。

  • ACCESSからのODBC接続について

    Windows2000サーバー上にあるアクセスファイル(別のOracle9サーバーにODBCリンクしている)をWindowsXpパソコンにコピーしましたが、「ODBC-xxxxへの接続が失敗しました」と表示されOracleデータを参照できません。 WindowsXpには、Oracleクライアントはインストール済み、DSNにもMicrosoft ODBC for Oracleを登録済みです。新規にODBCリンクすることは可能です。 エラーなく参照できるようにするにはどうすればいいでしょうか。

  • ODBC接続ができません

    本社からVPN経由で事業所のSQLServer(EnterPrizeEdision) にODBC接続でリンクテーブルを使用したMs_Accessを稼働させ ておりますが、DELLパソコンから接続すると何をやっても接続 エラーとなってしまいます。別のDELLパソコン何台かで試して みましたが、同じ結果でした。 また、接続可能なパソコンはDELL以外でIBM、NEC、富士通は問 題なく接続できます。 DELLパソコンならではの何かが邪魔をしているのでしょうか。 それとも相性なのでしょうか? いろいろ調べましたが原因が全く分からない状況で困り果てて ます。どなたかご教授いただけると大変うれしいです。 よろしくお願いいたします。

  • Win7からODBC接続でSQLSerer接続

    いつも参考にさせていただいています。 よろしくお願いします。 クライアント:Windows7 サーバ:WindowsServer2008R2、SQL Server 2008 R2 ACCESS2007で、SQL Server 2008 R2(以下SQLSv)にリンクテーブルを張りたいので、 ODBC接続でSQLSvに接続をしようとしました。 SQLSvは、認証は混在モードでインストールをしました。規定のインスタンスです。 クライアントから、サーバへの共有フォルダを参照できています。 ということは、Windows認証できるはず、と思っていたのですが、 ODBCの設定でWindows認証にすると、エラーになってしまいます。 ↓エラー内容です。 ---------------------------------------- 接続できませんでした。 SQLState:'28000' SQL Server エラー:28456 [Microsoft][ODBC SQLServer Driver][SQL Server]ユーザー'XXXXX\AAA'はログインできませんでした。 ---------------------------------------- XXXXXはサーバのコンピュータ名、AAAはクライアントのアカウントで、サーバにユーザー登録してあります。このユーザーで、サーバの共有フォルダは問題なく参照できています。 Windows認証ができなかったので、SQLSVのIDパスワード認証で行ったところ、エラーにならず、テストも無事に行えたのですが、 ACCESSでリンクテーブルをはる時にもパスワード要求され、 リンクテーブルをはった後にテーブルの内容を見るときにもパスワード要求され、という状態です。 下記の設定を確認しましたが、現象は変わりませんでした。 ・サーバのSQLSvの設定で、  プロパティー内の「接続」で、「このサーバーへのリモート接続を許可する」  が「許可」になっていることを確認。 ・「SQL構成マネージャ」にてクライアントプロトコルのTCP/IPが有効になっていることを確認。 ・「SQL Server Browser」サービスを有効に。 ・サーバ側のファイアウォールの設定で、1433の接続が許可になっていることを確認。 また、ODBCのドライバは、「SQL Server」を使いました。 Native Clientというものもあるようですが、初期状態のWin7には入っておらず、複雑なこともしませんので、普通の「SQL Server」を使いたいと思っています。 できればWindows認証で接続したいのですが、上記の他には何を確認したらよいでしょうか? Windows認証ができなく、SQLSVのIDパスワード認証で行う場合、パスワードを要求されない方法はありますでしょうか? お手数をおかけいたしますが、よろしくお願いいたします。

専門家に質問してみよう