8 | 複数ユーザー利用を考慮したシステム変更 | |||||||||||||||||||||||||||
本題材のデータベースには、「人材検索」という機能があります。これは、画面上でいくつかの条件を指定して処理を実行すると、それに該当する人材データを一覧表示するというものです。 その処理においては、まず人材データに関するテーブルから指定された条件(プログラム上はSQLのWhere句)に一致するデータの「人材ID」フィールド値だけをピックアップし、それを検索結果用の作業テーブルに書き出します。 通常ですと、人材のメインテーブルに対してWhere句を指定してSELECTすればよいのですが、多少複雑な処理を行う都合上、いったん作業テーブルに書き出し、それを加工したあと、最終的にはそのテーブルと人材データのメインテーブルを結合したクエリのレコードを結果一覧として表示するような仕組みを取っています。 その際、問題となるのが、ネットワーク上の複数ユーザーが同時にこの処理を行った場合、どのデータがどのパソコンから実行された処理結果か分からなくなってしまうことです。作業テーブルはひとつしかないので、複数パソコンの実行結果が入り混じってしまったり、あとから実行した方のデータだけが生きてしまったりということが考えられます。本題材のデータベースは元々“スタンドアロン”での実行を前提としているため問題なかったのですが、アップサイジングする場合はおそらくほとんどは複数ユーザーでの共有となるはずですので、そのような状況も配慮して変更を加える必要があります(もちろんSQL Serverを使わずAccessだけでネットワーク共有する場合もこのような配慮は必要です)。 「作業テーブル」といった場合、Accessでは「処理途中の中間的なデータを一時的に保存するテーブル」という認識になりますが、SQL Serverの場合には、それと同様の考え方もできますが、『その都度テーブル自体を作成し、かつ処理完了後に明示的にテーブルを削除するかSQL Serverとの接続解除によって自動的に削除される「テンポラリテーブル」』というものがあります。テーブルを生成する際、それを意味する意図的なテーブル名を付けることによって、同名のテンポラリテーブルを複数ユーザーが同時に作ったとしても、内部的にはユーザーごとの別のテーブルとして扱えるというものです。 パフォーマンスを考えると、ストアドプロシージャにおいてテンポラリテーブルを作ってすべての処理をサーバー側で行うようにした方がよいのですが、今回はクライアント側のVBAで長い処理をしているのと、あとでフォームと連結してその内容を表示することを考え、最適ではありませんがもっともシンプルな方法を使ってその対応をしてみます。 それには次のような手順でデータベースをカスタマイズします。 この方法の考え方としては、作業テーブルにユーザー(あるいはコンピュータ)を認識するためのフィールドを追加し、作業テーブルにデータを書き込むときはその処理を実行しているユーザー情報も各レコードに付加します。そしてそのデータを読み込むときには、そのユーザー情報をWhere条件とすることで、自分が処理したレコードだけを取り出します。それによってひとつの同じテーブルであっても、競合することなく複数のユーザーが利用できるようになります。なお、ユーザー情報については、処理を実行しているパソコンから「ネットワークユーザー名」や「コンピュータ名」を取得する方法や、アプリケーションの起動時にログイン画面を表示させ、事前にユーザー名を取得しておくといった方法が考えられますが、ここでは「コンピュータ名」を使う方法でやってみます。
それでは最後に実行確認をしてみます。完全に瞬間的にも同時とはいきませんが、2台のパソコンで異なる検索条件で「人材検索」の処理を実行してみます。
2台のパソコンで処理を実行したあとの「tbl検索結果」テーブルは次のような内容になっています。「ユーザー名」を見ることで、2種類のパソコンから処理が実行されていることが分かります ◆◆◆ 最後に ◆◆◆
ここまでざっとアップサイジングの実例を紹介してきました。しかしより現実的なアップサイジングの作業では、もっとさまざまなバリエーションがあります。またSQL Server側の仕組みやプログラミングの知識が必要になりますし、ADOの知識も必要になります。それら個々にまた専門分野ともいえる部分もありますので、ここではすべては網羅できません。また、たとえばパフォーマンスの面からは、ビューやストアドプロシージャの新規生成やVBAによってクライアント側で処理している内容のストアドプロシージャへの移行、複数レコードの読み込みの制限など、改善の余地は多々あると思いますが、今回の題材のデータベースについてはそこまでは行っていません。また動作的にもすべて問題なく仕上がったというところまで手を付けていません。今回は「アップサイジングの中の触りだけ」ということでご認識ください。 |
||||||||||||||||||||||||||||
|
Copyright © T'sWare All rights reserved |