• ベストアンサー

ADO接続の共有

ACCESS2007をフロントにしてDBをSQL-Server2005Expressにして開発を 行おうとしています。 できる限りネットワークの負荷を減らそうと、ADO接続/ADOレコードセットと フォーム連結で開発したいのですが、ネットで検索するとADO接続を各画面で 行わなければならないような記述しか見あたりません。  ・検索キーワード:ADO 接続 共有 できれば、ADO接続はプログラム起動時1回で、DBデータを表示する 画面等を開く場合は、起動時に取得した接続を使い回したいのですが、 当該方法が記載されたいるようなURL等をご教示願えないでしょうか?  ・他mdbのテーブルをリンクテーブルとして使用したいため、   AccessProject(.adp)の使用は断念しました。 上記よろしくお願いします。

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

  • ベストアンサー
  • Pakkun10
  • ベストアンサー率44% (22/50)
回答No.1

使いまわすと言っても、アプリケーションの起動時に接続してからずっと繋ぎっぱなしというのはAccessに限らず他のツールでもありません。 普通は使うときに接続して、使い終わったら切断します。 ネットワークの負荷を減らすのと接続を使いまわすのは あまり関係がないと思います。 3回連続で接続したら3本のリンクが出来るわけではありません。 リンクテーブルは必ずしも負荷がかかるとは限りません。使い方と頻度ですべて決まります。SQLServerの利用状況モニターなどで確認してみるといいと思います。 URLはご教示できませんが、接続プールで検索するといいかもしれません。

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

Webシステムで、接続をSessionに押し込んで使いまわすのは見かけますが、クライアントシステムでは確かにあまり見かけたことがありませんね。 やりたい場合は、グローバルのオブジェクトに入れてしまえば済む話だと思いますが、リモートの場合はプログラムを立ち上げているだけで セッションがずっと残るので、データベース管理者にしてみれば迷惑な話かもしれません。 ネットワークなり、データベース側の理由でセッションが切れてしまったときには、プログラムを立ち上げ直さないといけなくなりますね。 別の方のコメントの通り、ネットワーク負荷軽減のメリットはまずないと思います。

関連するQ&A

  • AccessでのリンクテーブルとADO等の使い分け

    同時接続数5程度の備品管理をしたいと思っています。 共有フォルダーとAccessで構築しようと思っていますが、いずれはDBをSQLサーバなどにしたいと思っています(その前にMSDEかもしれません)。 容易にDBを変更できるようにする方法として下記の2つを考えています。  1.リンクテーブルを用いてMDBからSQLサーバに切り替える。  2.ADOを用いる。 "2"を用いることにこしたことはないと思いますが、"1"が簡単なので、どちらにしようか悩んでいます。"1"の問題となる点がありましたら教えてください。

  • ADO(js) insert into高速化

    ADO素人です。色々検索したのですが、見つからず質問いたします。 仕事場にてjavascript,ADO,mdb,XP,IE6を使用しDBを作成しております。 mdbのデータを加工しcsv出力しようと思っているのですが、非常に遅く困っております。 単純に、以下のコードで100件出力しても4秒ほどかかります。 環境的に上記を使用するしかない状況で、高速化するにはどのようにすればいいのでしょうか。 どなたか、何卒ご教示お願いいたします。 var dbobj = new ActiveXObject("ADODB.Connection"); dbobj.open("Driver={Microsoft Access Driver (*.mdb)};DBQ=e:db1.mdb;") for(var i=0:i<100;i++){ dbobj.Execute("insert into [Text;Database=e:;].[test.csv] (aaa) values('1111');"); } dbobj.close(); 上記を実行すると4秒ほどかかります。 実際はfield数20、300行ほどです。 出力データを新しいtableに作成し、そこから select * into [CSVファイル] from table作成 にすれば1秒かかりません。 が、例のようにループで出力したいと思っております。 お忙しいところ大変お手数ではございますが、どうぞよろしくお願いいたします。

  • VB6でSQLServerへADO接続するとOPENがすごく遅いんです。

    お世話になってます。 今、VB6.0で作成したシステム(ADOでACCESS2000に接続)をSQLServerに移行しています。 しかしDBの初回OPEN時に5秒くらいかかってしまいます。 原因を探しているのですが、どうしても見つかりません。 誰かご存知の方がいらっしゃいましたら、ご教示お願いします。 開発環境は以下の通りです。 OS:WindowsXP SP2 開発言語:VB6.0 SP5 データベース:SQLServer2005 ADO:ADO2.5

  • EXCELにADOで接続した際のSQLでエラーが出てしまいます(>o<)

    ExcelのワークシートをDBテーブルとして利用しています。 VBAで、ADOを使用してExcelに接続し、SQLでデータを操作したいのですが、3つのテーブルを結合した検索SQLで、 「クエリ式 XXXX の 構文エラー : 演算子がありません。」 というエラーが出てしまいます。 XXXXには、SQL文のJOINしている部分が表示されます。 3つのテーブルのうち、2つのテーブルの結合までは、エラーはなく、結果を取得できます。 テーブルの結合の数やそれ以外に、何か制限があるのでしょうか? ご存知の方がいましたら、ご回答、よろしくお願いします。m(_ _)m

  • ACCESS MSDE フォーム上からのデータ更新による競合

    いつもお世話になっております。 WINDOWS XP ACCESS 2002,2003 を使用しております。 既存のMDBファイルを MSDEを使用するADPファイルに置き換え、 なおかつ複数端末による運用が可能なようにシステムを変更しております。(元々複数端末で使用しています) 以下の手順でadpファイルを作って運用使用とする場合に疑問があるのですが。 (1)MSDEデータベースに接続したadpファイルを作成。 (2)フォームのレコードソースをMSDEデータベースのテーブル、 テキストボックスのコントロールソースに、そのテーブルに存在するフィールドを設定。 (3)このadpファイルを複数マシンに置き、同時に起動。 (4)作成したフォームで同一のレコードを同時に修正。 この場合に、後のほうで更新した時に 「データの競合」ダイアログが表示され、データを反映するか、先に更新されたほうを優先するか 選択できるますが、 mdbでも同様の運用が可能ですが、この運用を続けるとデータ破損の温床になるようですので控えておりました。 MSDEを使ったadpファイルでも同様のことが言えるのでしょうか? また、もしこの運用に問題があるとすれば、非連結のテキストボックスを設けて「更新」ボタンでADOによる 更新を行わなければならないのでしょうか。 レコードをリスト形式で表示しているので出来ればそれはさけたいのですが。 どなたかご教授のほど、何卒よろしくお願いいたします。

  • Access起動中にエクセルからADOでデータの更新ができない

    こんばんは。原因がわからないので質問させてください。 SQLサーバーのデータをAccessのmdbへリンクテーブルしています。 (SQLサーバー → Access) 全て一つのパソコンで行なっています。(LANには接続していません) Accessのmdbファイルを起動している時に ExcelからSQLサーバーのAccessにリンクしている上記のテーブルへ ADOを使ってデータを追加しています。 (Excel → Access)  しかし、「rs.Update」の部分で  「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」 となってしまいます。 なので、一度mdbファイルを落として、コードを再開すると通るので ADOでExcel → Accessにデータを追加し終わってから再度mdbファイルを立ち上げています。 また同じ状態(mdbファイルを起動)で Excel → SQLサーバー へ更新クエリをしようとすると「時間切れになりました」となります。 (こちらもmdbファイルを落とすと再開できます。) いちいちmdbファイルを落とすのめんどうなのですが 回避する方法はありますか? cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Users\Documents.test.mdb" rs.Open "テーブル", cn, adOpenStatic, adLockPessimistic rs("フィールド") = True rs.Update '保存 rs.Close: Set rs = Nothing というコードを書いています。 Accessを落とせば正常に動きます。 ご教授よろしくお願い致します。

  • 現在Accessで開発をしています

    現在Accessで開発をしています ライブラリはADOを使用しております メインフォーム データ検索 帳票フォームに全データを出力 サブフォーム1  修正/削除  連結フォームにフィルタをかけて修正/削除を サブフォーム2  追加 非連結フォームで追加処理を データ件数が多いのと項目数が多いのでメインフォーム上では 修正/追加/削除はやらず サブフォーム(単票フォーム)を呼び出しそこでやる ことにしています 本当はサブフォーム1だけで修正/削除/追加をしたいのですが ADOだと非連結のフォームでは更新ができないとわかり 連結フォームで対応しました DAOでやろうかとも考えましたが、ADOとDAOの共存はメンテナンス等を踏まえ やめました。また、DAOは入りにくいのも理由です ちなみにSQLサーバーは将来使用しません あくまでAccess単体(MDB)のみの開発をすると想定して みなさんは、以下の3つどのパターンで開発をしていますか? 1、ADOのみ 2、DAOのみ 3、ADOとDAO両方 また、理由もお聞きしたいです よろしくお願いします

  • mdbのテーブルを別のmdbのテーブルに追加

    2種類のMDBがあり 一つは 毎日の入力にて使用、もう一つは 累積として使用している。 それぞれに 同一デザインのテーブルがあります。 毎日の入力用のMDB内ののテーブルのデータをすべて 二つ目のMDBのテーブルに 追加したいのですが 一件読み込んで 一件書き込むなどと プログラムしていましたが 毎日の入力用のMDBが たくさんになったため 処理が遅くてたいへんです。 なにか 簡単に かつ 高速にすることは可能でしょうか? 開発環境は VB6 SP6 WindowsXP ADOを使用しています。 よろしくお願いします。

  • ADO.NETへの対応

    ADO.NETへの対応をしています。接続先がIBM DB2を使用しています。 クラスは、System.Data.Odbcは使用するべきでしょうか? それとも、System.Data.SqlClientを使用するべきでしょうか? 宜しくお願いします。

  • Accessのデータ共有について

    現在社内の顧客管理システムをAccessにて構築しており、データテーブルファイル(mdb)をファイルサーバに置き、クライアントPCはフォームやクエリだけのmdbを使用してテーブルのリンクでデータ共有しています(Accessのデータ分割ツールにてテーブルとフォーム、クエリを分離しただけの状態で運用しています)。これまでは、この状態でも運用出来ていましたが、データ量が多くなるにつれ、段々動作が重くなってきた為、処理速度改善の為に、以下の二案を検討していますが、どちらの案が効果的なのでしょうか? 【案1】 クライアント用mdbファイルに同じテーブル構成の一時テーブルを作成し、mdbファイル起動時と、「更新」ボタンを別途作成し、「更新」ボタンが押下されたタイミングで、ファイルサーバのデータベースからADOにて一時テーブルに全データを読み込む。更新系の処理は、各クライアントの一時テーブルとファイルサーバのデータベースに対して行う。 【案2】 現状フォームの遷移については、 「DoCmd.OpenForm」関数の引数に検索条件を指定する方法で行っている為、この部分を ・ADOにてデータを取得  ↓ ・遷移後のフォームに値をセット と言った処理に変更する。 また、上記以外の方法で何か良い方法がありましたらご指摘頂ければと思いますので、よろしくお願いします。