第 3 章 : Microsoft Access 2000 クライアント/サーバー アプリケーションの構築

Mark Roberts and Acey J. Bunch
Microsoft Corporation

February 2000

対象: Microsoft® Access 2000

要約 : Microsoft Access 2000 のプロジェクト ファイルとツールを使用した、クライアント/サーバー ソリューションの開発について、3 回に分けて説明してきましたが、これが最後の章になります。ここでは、クライアント/サーバー環境におけるフォームとレポートの構築方法、関連するものすべてを 1 つにまとめるプログラミング コードの書き方、およびアプリケーションの管理と展開について概要を説明します。ここで説明する概念をよりわかりやすくするために、State University のサンプル アプリケーションを用いています。

ここをクリックして、State University のサンプル アプリケーションをダウンロードしてください。(英語)

目次

はじめに
フォームを作成し、使用する
レポートを作成し、使用する
Access プロジェクトにおけるプログラミング
Access プロジェクトにおける管理
セキュリティの管理
Access プロジェクトの展開
要約

はじめに

この章は 3 部シリーズ の最終章で、Microsoft Access プロジェクトを使用した、クライアント/サーバー アプリケーションの開発方法について説明しています。この記事では、Microsoft Data Engine (MSDE) や Microsoft SQL Server データベースから得られたデータを使用するフォームやレポートの作成、データベースと対話するためのプログラミング コードの書き方、アプリケーションの管理および展開方法について説明します。また、State University のサンプル アプリケーションを使用して、ここで取り上げるすべてのトピックについて実証していきます。

この時点では少なくとも、State University の Access プロジェクト ファイルが作成されていること、すべてのテーブルが構築され、テーブル間のリレーションシップが作成されていること、弊社より提供されたサンプル データがインポートされているか、あるいは完全なサンプル アプリケーションがダウンロードされインストールされていることを前提にしています。

フォームを作成し、使用する

Access プロジェクトが優れている点の 1 つに、Microsoft Jet データベース エンジンに対するアプリケーションの構築に利用したすべてのスキルを使用して、SQL Server あるいは MSDE データベースに対するアプリケーションをネイティブに構築することができることがあります。フォームを構築するということは Access データベース (.mdb) に相当するものを構築することと同じ意味を持ち、フォームを使用するということは実質的に Access データベース (.mdb) を使用することと同じ意味を持ちます。ただし、多少の違いはあります。これらの違いの詳細については、後で説明します。

Access プロジェクトでフォームを使用するため、まずは State University の Instructors テーブルと対話するフォームを作成してみましょう。

注意 : State University のフォームを作成するテンプレートとして、基本となるフォームが用意されています。このフォームは "Template" という名前で、Template.mdb ファイルに保管されています。このフォームには空の詳細エリアが含まれており、特定のレコード ソースには接続されていませんが、State University のすべてのフォームで使用される標準ヘッダー グラフィックが含まれています。このテンプレート フォームを使用するには、[ファイル] メニューの [外部データの取り込み] をポイントし、[インポート] をクリックして、事前に作成した StateU.adp ファイルへ Template.mdb からテンプレート フォームをインポートします。[オブジェクトのインポート] ダイアログ ボックスで [フォーム] タブをクリックし、[テンプレート] をクリックして、最後に [OK] をクリックします。

Instructors フォームの作成

この練習では、Instructors フォームを作成します。このフォームは Instructors テーブルのみを基本としています。

  1. データベース ウィンドウで、[オブジェクト] にある [フォーム] をクリックします。

  2. [編集] メニューの [コピー] および [貼り付け] コマンドを使用して Template フォームのコピーを作成します。フォーム名を作成するダイアログ ボックスが表示されたら、「Instructors」と入力します。

  3. 新しく作成した Instructors フォームを選択し、データベース ウィンドウのツール バーにある [デザイン] をクリックします。

  4. [表示] メニューの [プロパティ] をクリックして、Instructors フォームのプロパティ シートを開きます。

  5. [レコード ソース] プロパティ ボックスでドロップダウンの矢印をクリックし、レコード ソースとして Instructors を選択します。この結果、Instructors のフィールド リストが自動的に表示されます。

  6. Instructors フィールド リストで InstructorID フィールドをクリックし、Shift キーを押したまま Email フィールドをクリックして、フィールド リストにある全フィールドを選択します。

  7. すべてのフィールドを、フィールド リストから、Instructors フォームの詳細セクションにドラッグします。

  8. フィールドを適切に並べ替えたら、Instructors フォームを閉じて、変更を保存します。

  9. データベース ウィンドウで新しく作成した Instructors フォームを選択し、データベース ウィンドウのツール バーで [開く] をクリックして、このフォームを表示します。フォームは図 3.1 のようになります。

図 3.1 Instructors フォーム

それほど難しくありませんでしたね。Access データベースを作成するようなものです。しかし「Microsoft Access 2000 クライアント/サーバー開発の理解」で説明したとおり、Access プロジェクト (.adp) ファイルのフォームと、Access データベース (.mdb) ファイルのフォームには多少違いがあります。このドキュメントでは、数セクションにわたってこれらの違いについて説明します。

移動ボタン

最も明確な違いは、フォームを開いたとき、フォームの最下部に表示される移動ボタンです。先頭レコード、前のレコード、次のレコード、最後のレコードへの移動に使用される標準ボタンに加え、図 3.2 にあるように、[中止][最大レコード数を制限する] の 2 つの新しいボタンがあります。

[中止] ボタン

[中止] ボタンはサーバーからのレコード取得を中止するために使用されます。取得にあまりにも長い時間がかかっている場合は、このボタンが便利です。このボタンをクリックすると、フォームで使用できる不完全なレコードセットが取得されます。たとえば、1,000 行のデータが含まれたテーブルに基づいたフォームを開くとしましょう。最初の 500 個のレコードを取得したところで [中止] をクリックすると、フォームで使用可能になるのは最初の 500 個のレコードのみになります。つまり、[最後のレコード] をクリックすると、レコード 1,000 ではなく、レコード 500 に移動します。残りのレコードを取得するには、フォームのレコードセットを更新するか再クエリします。これにより、新たに取得プロセスが開始され、1,000 個のレコードすべてを取得できます。フォームのレコードセットを更新するには、[レコード] メニューの [更新] をクリックします。

[中止] を非表示にするには、フォームの NavigationButtons プロパティを No (false) に設定して、ナビゲーション バー全体を非表示にします。

[最大レコード数を制限する] ボタン

[最大レコード数を制限する] ボタンを使用すると、Access でフォームのレコードセットを開いたり、更新したりしたときに、Access により取得される最大レコード数を設定することができます。標準の設定は 10,000 ですが、この設定は 1 ~ 1,000,000 の範囲で変更可能です。値に 0、または 1,000,000 を超える値を設定した場合、最大値は事実上、"無制限" に設定されたことになります。

注意 :    "無制限" という設定は慎重に使用してください。極端に大きなレコードセットでは、最大レコード制限値を無制限に設定すると、アプリケーションの速度が大幅に低下し、過度のネットワーク トラフィックが発生する可能性があります。

実行時に最大レコード制限値を変更するには、[最大レコード数を制限する] をクリックします。図 3.2 のようなダイアログ ボックスが表示されます。

図 3.2 [最大レコード数を制限する] ダイアログ ボックス

ここで、[最大レコード数] ボックスに値を入力するか、またはスライダ コントロールを使用して値を選択します。[最大レコード数を制限する] ダイアログ ボックスの外側をクリックすると、ダイアログ ボックスが閉じて、入力した値が保存されます。

注意 :    実行時に、フォームの最大レコード制限値を変更すると、フォームのレコードセットが更新され、このレコードセットにある最初のレコードが表示されます。

デザイン時に最大レコード制限値を変更するには、プロパティ シートでフォームの MaxRecords プロパティを設定します。

Access の [ツール] メニューから [オプション] ダイアログ ボックスを表示し、[詳細] タブを選択して [既定の最大レコード数] ボックスに値を入力し、グローバルの最大レコード制限値を設定することもできます。ただし、このグローバル制限は、グローバル制限を指定した後で作成されたフォームにのみ適用されます。また、先に説明した手順のとおりにフォームの最大レコード制限値を設定することにより、どのフォームでも、この制限を上書きすることができます。

[最大レコード数を制限する] を非表示にするには、フォームの MaxRecords プロパティを No (false) に設定します。

新しい移動ボタンが重要である理由

これらの新しい移動ボタンが重要なのは、SQL Server および MSDE が Access の外部で実行されるデータベース エンジンだからです。したがって、サーバーからデータを取得する場合、要求はネットワーク経由でデータベース サーバーに送信され、データベース サーバーにおいて要求が実現されると、ネットワーク経由でデータが Access アプリケーションへ送り返されます。この全ネットワーク トラフィックには時間がかかり、アプリケーションのパフォーマンスに影響を与えます。フォームやテーブルが開かれているときのパフォーマンスを強化するために、Access ではサーバーへの要求を 1 つ作成し、この要求により、"スナップショット"、またはキャッシュされたレコードセットとして取得されるデータすべてをローカルでキャッシュします。

これらのスナップショットにより、実際にすべてのレコードがローカル コンピュータにダウンロードされる前に、フォームを表示することもできます。さらに、サーバーからダウンロード可能な最大レコード数を設定できるようになっているため、データと対話する方法を制御し、データベース サーバーやネットワークにかけられる要求を制限することができます。これらの機能すべてにより、アプリケーションのパフォーマンスが向上します。

クライアント/サーバー フォーム プロパティ

Access プロジェクトでは、SQL Server や MSDE がデータベース エンジンとして使用されているので、フォームにさらにプロパティを追加する必要があります。Access プロジェクトのフォームには 7 種類の新しいプロパティと、Access (.mdb) データベースとは異なる値を使用する既存のプロパティが 1 つあります。新しいプロパティは InputParametersMaxRecButtonMaxRecordsResyncCommandServerFilterServerFilterByForm、および UniqueTable です。RecordsetType プロパティは新しいものではありませんが、設定可能な値は、このプロパティが Access プロジェクトのフォームにおいて使用される場合と異なります。図 3.3 にあるとおり、新しいプロパティはフォームのプロパティ シートから使用することができます。

図 3.3 Access プロジェクトの追加プロパティが表示された [フォーム] プロパティ シート

次のセクションでは、これらの追加プロパティの概要と用途を説明します。

RecordsetType

RecordsetType プロパティは、フォームと関連付けられるレコードセットの種類を指定します。Access データベースにおけるレコードセットは、ダイナセットダイナセット (矛盾を許す)、あるいはスナップショットのいずれかに設定できます。だたし、Access プロジェクトでは、レコードセットはスナップショット、または更新可能なスナップショット (既定値) のいずれかに設定できます。 RecordsetType プロパティがスナップショットに設定されている場合、フォームにある連結フィールドはまったく編集できません。だたし、 RecordsetType プロパティが更新可能なスナップショットに設定されている場合、連結フィールドは編集可能です。更新可能なスナップショット と、一般的なデータの更新に関する詳細については、この章で説明する「データを更新する」を参照してください。

RecordsetType プロパティの詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで「RecordsetType」と入力し、[検索] をクリックしてください。

MaxRecButton

[最大レコード数を制限する] ボタン」セクションで説明したとおり、 MaxRecButton プロパティは、フォームに [最大レコード数を制限する] ボタンを表示するかどうかを指定します。このプロパティを No (false) に設定すると、ボタンが非表示になります。[最大レコード数を制限する] ボタンを非表示にすると、[ツール] メニューの [オプション] ダイアログ ボックスにある [詳細] タブで、[既定の最大レコード数] の値を変更した場合のみ、1 度に 10,000 個を超えるレコードを表示することができます。

MaxRecButton プロパティの詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで「MaxRecButton」と入力し、[検索] をクリックしてください。

MaxRecords

MaxRecords プロパティには、クライアントに返される最大レコードを数を設定します。このプロパティに設定される値は、[ツール] メニューの [オプション] ダイアログ ボックスにある [詳細] タブで指定されている [既定の最大レコード数] よりも優先的に使用されます。プログラミング コードの中で MaxRecords プロパティの値を設定する場合、レコードセットを更新するには、フォームの Requery メソッドを呼び出す必要があります。

MaxRecords MaxRecords プロパティの詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで「MaxRecords」と入力し、[検索] をクリックしてください。

ServerFilter

ServerFilter プロパティにより、データベース サーバーから取得され、Access プロジェクト フォームに表示されるデータがフィルタにかけられます。SQL ステートメントの WHERE 句で条件を指定するのと同じ構文を ServerFilter プロパティに使用します。たとえば、 ServerFilter プロパティの値を次のように設定して、Instructors フォームに取得される行数を制限することができます。

State='NV'

この場合、ネバダ州に住むインストラクタのみが Instructors フォームに表示されます。コード内で ServerFilterプロパティを設定する場合は、次の構文を使用します。

Me.ServerFilter = "State='NV'"
Me.Requery

フォームの Requery メソッドを呼び出すと、基になるレコードセットが更新されます。ServerFilter プロパティを設定しても、フィルタは自動的に適用されないため、この呼び出しが必要です。

注意 :    The ServerFilter プロパティは、レコード ソースとしてストアド プロシージャを使用するフォームには影響を与えません。

ServerFilter プロパティの詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで「ServerFilter」と入力し、[検索] をクリックしてください。

ServerFilterByForm

ServerFilterByForm プロパティには、フォーム サーバー フィルタ モードでフォームを開くかどうかを指定します。このプロパティを Yes に設定すると、フォームはフォーム サーバー フィルタ モードで開かれます。つまり、フォームが最初に開かれたときに、フォームのレコードソースから取得される行はありません。このモードでは、フォームのフィールドにフィルタ条件が入力できます。その後、ツール バーの [サーバー フィルタの適用] をクリックして、フィルタを適用します。プログラミング コードで ServerFilterByForm プロパティを設定するには、次の構文を使用します。

Me.ServerFilterByForm = True

注意 :    The ServerFilterByForm プロパティは、レコードソースとしてストアド プロシージャを使用するフォームには影響を与えません。

ServerFilterByForm プロパティの詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで**「ServerFilterByForm」と入力し、[検索]** をクリックしてください。

UniqueTable

UniqueTable プロパティは、フォームが複数テーブルのビューやストアド プロシージャに連結されるときに更新されるテーブルを指定します。フォームのフィールドを、テーブルを結合してデータを取得するレコードソースに連結する必要がある場合、Access に対して、どのテーブルにレコード ソースの行が重複せずに含まれているかを指示しなければなりません。重複しないテーブルはリレーションシップの "多" サイドにあり、 UniqueTable プロパティを設定すると、重複しないテーブルにある値のみが更新できます。このプロパティの詳細については、この章の「更新可能なスナップショットを使用する 」で説明しています。

注意 :    ビューとストアド プロシージャについては、この章の「 そのほかのレコード ソース 」で説明します。

UniqueTable プロパティの詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで**「UniqueTable」と入力し、[検索]** をクリックしてください。

ResyncCommand

ResyncCommand プロパティには、フォームのレコード ソースが複数テーブルのビューやストアド プロシージャに基づいている場合に、リレーションシップの "一" サイドにあるフィールドを更新するために、Access で使用される SQL ステートメントを指定します。このプロパティは、リレーションシップの "多" サイドにある更新可能なテーブルで確立された UniqueTable プロパティと共に動作します。 ResyncCommand プロパティを使用するには、フォームのレコードソースで使用されている SQL ステートメントとまったく同じ SQL ステートメントを構築する必要があります。ただし、特定の値やパラメータの代わりに疑問符 (?) を使用して、 UniqueTable プロパティで指定されたテーブルのキー列を指定する新しい WHERE 句を追加する必要がある場合は例外です。 ResyncCommandプロパティの目的は、サーバー データベースにデータが保存された後の、更新されたデータの取得方法を指定することです。

たとえば、State University データベースに、すべての講座名と共に、講座を担当するインストラクタに関する情報が表示されたフォームを構築するとします。このためには、次のような SQL ステートメントを持つストアド プロシージャを記述します。

SELECT A.FirstName, A.LastName, B.*
    FROM Instructors AS A RIGHT OUTER JOIN Courses AS B
    ON A.InstructorID = B.InstructorID

レコード ソースとしてこのストアド プロシージャを使用する新しいフォームを作成する場合、このステートメントに結合が含まれているため、フォームの UniqueTable プロパティを Courses テーブルに指定する必要があります。Access では、 UniqueTable プロパティで指定されたテーブルにあるフィールドのみが更新できるので、フォームを開くと、Courses テーブルから得られたフィールドのみが更新可能で、Instructors テーブルから得られたフィールドは更新できないことがわかります。さらに、InstructorID フィールドの値を変更した場合、変更は受け付けられますが、レコードを更新したり保存したりしても、インストラクタの姓名に変更は反映されません。これは、 ResyncCommand プロパティに SQL ステートメントを設定することにより、Access にフォームを更新する方法を指示する必要もあるためです。この SQL ステートメントでは、次のように、"?" に等しい Courses テーブル (CourseID) のキー フィールドを指定する WHERE 句が追加されたレコード ソースを指定します。

SELECT A.FirstName, A.LastName, B.*
    FROM Instructors AS A RIGHT OUTER JOIN Courses AS B
    ON A.InstructorID = B.InstructorID
    WHERE B.CourseID = ?

注意 :    State University のサンプル データベースにおける CourseWithInstructorInfo フォームは、この章で後に説明する概念を実証するために使用します。

ResyncCommand プロパティの詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで**「ResyncCommand」と入力し、[検索]** をクリックしてください。

InputParameters

フォームの基になるレコード ソースとして、1 つ以上の入力パラメータを必要とする SQL ステートメントやストアド プロシージャを使用する場合、 InputParameters プロパティを、フォームから返されるレコードをフィルタするために使用される値を持つフィールドに設定する必要があります。また、代わりに、ユーザーに値を入力させるためのプロンプトとなるテキストをこのフィールドに指定することもできます。

注意 :    このほかの Access プロジェクトのフォームのレコード ソースについては、この章の「 そのほかのレコード ソース 」で説明します。

フォームのレコード ソースとして SQL ステートメントを使用している場合、 InputParameters プロパティの構文は次のとおりです。

FieldName DataType=[PromptingText]|FormFieldName

FieldName は SQL ステートメントでパラメータとして使用されているフィールド名、 DataType はパラメータのデータ型です。ユーザーに対してパラメータ値の入力を促すプロンプト文字列を指定するか、またはパラメータ値として、フォームにあるフィールド (FormFieldName) を指定することができます。

たとえば、ユーザーに InstructorID の入力を促す Instructors フォームを作成し、この InstructorID に対応するレコードを 1 つのみ、このフォームに表示するとします。このためには、フォームの RecordSource プロパティに次の SQL ステートメントを設定します。

SELECT *
    FROM Instructors
    WHERE InstructorID = ?

次に、フォームの InputParameters プロパティを次のように設定します。

InstructorID int=[Enter the InstructorID:]

ユーザーが初めてフォームを開くと、図 3.4 のようなメッセージ ボックスが表示されます。

図 3.4 [パラメータの入力] ダイアログ ボックス

注意 :    State University のサンプル データベースにある Instructors (SQL) フォームは、レコード ソースとしてパラメータを持つ SQL ステートメントの使用方法を説明しています。

フォームのレコード ソースとして、ストアド プロシージャを使用している場合、 InputParameters プロパティで使用される構文は次のようになります。

ParameterName DataType=[PromptingText]|FormFieldName

ParameterName には、先頭の @ 記号と共に、ストアド プロシージャで使用される実際のパラメータ名を指定します。また、 DataType はパラメータのデータ型です。フォームのレコード ソースとして SQL ステートメントを使用している場合、ユーザーにパラメータ値の入力を促すプロンプト文字列を指定するか、またはパラメータ値としてフォームのフィールド (FormFieldName) を指定することができます。

たとえば、ユーザーに対し InstructorID 値の入力を促す Instructors フォームを作成し、この InstructorID に一致するレコードを 1 つのみフォームに表示するとします。このためには、フォームの RecordSource プロパティにインストラクタ名を取得するストアド プロシージャ名を設定します。この例では GetInstructor となります。GetInstructor ストアド プロシージャは次のとおりです。

CREATE PROCEDURE GetInstructor

    (
        @InstructorID int
    )

AS

    SELECT *
    FROM Instructors
    WHERE InstructorID = @InstructorID

    RETURN

次に、フォームの InputParameters プロパティを次のように設定します。

@InstructorID int=[InstructorID を入力します:]

注意 :    State University のサンプル データベースにある Instructors (ストアド プロシージャ) フォームでは、レコード ソースとしてパラメータを持つ SQL ステートメントの使用方法を説明しています。

InputParameters プロパティの詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで「 InputParameters 」と入力し、[検索] をクリックしてください。

データを更新する

クライアント側のレコードセットをキャッシュするために、Access によりスナップショットを使用する方法に関連して、データへの更新がどのように処理されるかという疑問が起こります。更新処理は "更新可能なスナップショット" を使用して管理されます。更新可能なスナップショットは、更新可能なレコードセットのローカル コピーです。ここでは、更新可能なスナップショットの使用に関連するさまざまな問題について説明します。

データ更新の一般規則

Access プロジェクトで Access がデータを更新する方法は、.mdb ファイルでデータを更新する方法とはさまざまな面で異なります。

Access プロジェクトのデータを更新する場合、次の規則が適用されます。

  • 1 つのテーブル、または結合の基本テーブルで、主キー列を含む列を更新するには、主キー制約、一意制約、またはこのテーブルで重複しないインデックスとして定義された重複しない列や、列の組み合わせが必要です。

  • フォームで一対多結合に基づいたデータ更新は可能ですが、結合の "多" サイドにある列のみが更新されます。データシート ビューに結合を含むビューを開くか、このようなストアド プロシージャを実行する場合、データは読み取り専用になります。ただし、フォームの UniqueTable プロパティが設定されている場合、レコード ソースとして、フォームにビューやストアド プロシージャが含まれていても、このフォームからデータを更新することができます。次のセクション「更新可能なスナップショットを使用する」を参照してください。

  • ビューやストアド プロシージャを更新するには、ビューに対する SELECT 権限や、プロシージャに対する EXECUTE 権限と共に、このビューやプロシージャで参照されている基本テーブルの UPDATE、INSERT、DELETE 権限が必要です。

  • Northwind SQL Access プロジェクト ファイル (NorthwindCS.adp) のサンプル アプリケーションにある Employees テーブルの全従業員 (EmployeeID) と、報告先マネージャ (ReportsTo) とのリレーションシップのような自己結合から取得されたデータは、どのような場合も更新できません。

また、Access データベース (.mdb ファイル) と Access プロジェクトの両方で、データの更新には次の規則が適用されます。

  • レコード ソースの基になる SQL ステートメントに GROUP BY 句、または COMPUTE 句が含まれている場合、フォームやデータシートは更新できません。

  • "price * quantity AS extended_price" などの式に基づいて、列を更新することはできません。

  • 多対多結合に基づいて、フォームやデータシートを更新することはできません。

更新可能なスナップショットを使用する

ビュー、行を返すストアド プロシージャ、または SQL ステートメントを使用する一対多結合により作成された更新可能なスナップショットでは、Access プロジェクトにおいて、フォームの UniqueTable プロパティで指定されたテーブルの列にあるデータのみの挿入、削除、および更新することができます。 UniqueTable プロパティには、各行が、結合されたテーブルに返される行セットの 1 行に対応するような結合のテーブルを指定します。たとえば、Customers テーブルと Orders テーブルを結合するビューでは、Orders テーブルの 1 行はビューにある 1 行のみに対応しますので、Orders テーブルは重複しないテーブルです。対称的に、Customers テーブルの 1 行は、ビューにある複数の行に対応します。もっと簡単に言うと、 UniqueTable は、結合の "多" サイドを表し、このテーブルの列のみが更新可能になります。Access では、結合の "一" サイドにある列を更新することはできません。

この動作を実際に確かめるには、Northwind SQL Access プロジェクト ファイルのサンプル アプリケーション (NorthwindCS.adp) を開き、[Alphabetical List of Products] ビューを選択して、ツール バーの [オートフォーム] をクリックし、単純なフォームを作成します。この時点では、編集可能なフォームの列はなく、[新しいレコード] は無効になっています。フォームを更新可能にするには、ビューにあるテーブルのどれが重複しないテーブルであるかを指定する必要があります。[Alphabetical List of Products] ビューにより、Categories テーブルと Products テーブルが結合されますが、Products テーブルは結合の "多" サイドになるので、重複しないテーブルとして設計されていなければなりません。このためには、フォームをデザイン ビューへ切り替え、フォームのプロパティ シートを表示し、[データ] タブで UniqueTable プロパティを Products テーブルに設定します。フォームをフォーム ビューに切り替えると、CategoryName 列 (Categories テーブルから表示される唯一の列) 以外の列がすべて編集可能になり、行の追加や削除ができるようになります。

更新可能なスナップショットでは、保存が正常に行われた後にのみ、編集された行や、新たに挿入された行に最新の値を表示することができます。たとえば、Northwind SQL Access プロジェクト ファイルのサンプル アプリケーションの Orders テーブルには、主キーとして ID 列が含まれます。このテーブルに行を挿入した場合、この行を保存するか、または別の行に移動 (結果として、行が保存されます) した後に、新しい OrderID 値が表示されます。同様に、Customers と Orders を結合するビューに基づくフォームで、OrderID 列を異なる CustomerID 列の値に更新しても、この行が保存されるまで、新しい顧客の住所は Address 列には表示されません。

そのほかのレコード ソース

最初の練習で行ったように、レコード ソースとしてテーブルを使用することに加え、ビューやストアド プロシージャを使用することもできます。ビューとストアド プロシージャの両方とも Access 環境の中で開発できますが、Access (.adp) ファイルではなく、サーバーの MSDE または SQL Server データベース ファイル (.mdf) に保存されます。

注意 :    フォームの Recordset プロパティが ActiveX® データ オブジェクト (ADO) の "レコードセット" オブジェクトをポイントするように設定して、Visual Basic® for Applications (VBA) コードでフォームのレコード ソースを指定することもできます。方法については、この章の「 フォームの Recordset プロパティ 」を参照してください。

ビュー

Microsoft Access 2000 クライアント/サーバー開発の理解 」で説明したとおり、ビューは Microsoft Jet データベース アプリケーションの選択クエリに似ていて、1 つ以上のテーブルから取得されたデータの結果セットです。特定のビューにフォームを連結すると、結果セットは更新可能になります。ビューを使用することにより、結果セットから得られた特定の列をフィルタして、必要な列のみにアクセスできるようにすることができます。また、データベースにある基本テーブルから抽出するレベルも指定できるので、基本テーブルにアクセスするにはビューを使用しなければならないように、権限を設定することもできます。

ビューを作成するには、データベース ウィンドウで [オブジェクト] にある [ビュー] をクリックし、[新規作成] をクリックして、Query Designer を使用します。Access プロジェクトの Query Designer は、Access データベースのクエリ デザイン ウィンドウと外観も使い勝手も非常によく似ています。Query Designer を使用して、ビュー構築の元となるテーブルやビュー、これらのソースからのフィールド、返された結果をさらにフィルタするための追加条件を指定できます。また、ツール バーの [SQL] をクリックして、SQL ペインを開くと、Query Designer により生成される SQL ステートメントを表示したり、ビューを視覚的に構築する代わりに直接 SQL ステートメントを入力したりすることができます。

注意 :    Access プロジェクトの Query Designer の外観については、「 Microsoft Access 2000 クライアント/サーバー開発の理解」の図 1.5 を参照してください。

ビューの詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで「ビューの操作」と入力し、[検索] をクリックしてください。または、『SQL Server Books Online』の [索引] タブで "ビュー, 概要" について検索してください。HTML ヘルプ形式の『SQL Server Books Online』は https://support.microsoft.com/download/support/mslfiles/sqlbol.exe からダウンロードできます。

注意 : 『SQL Server Books Online』では MSDE のことはあまり説明されていませんが、『SQL Server Books Online』の資料は、SQL Server と同様に MSDE にも適用されます。

ストアド プロシージャ

ストアド プロシージャは、おそらく SQL Server や MSDE データベースで最も強力な機能の 1 つでしょう。ストアド プロシージャでは、サーバー データに保存されるあらかじめコンパイルされたプロシージャを構築するために、ANSI-92 SQL 構文、フロー制御プログラミング ステートメント、組み込み関数を合わせて使用することができます。この結果、サーバーでよりデータベースに特化したプログラミングロジックの一部をカプセル化できるため、クライアント アプリケーションでは、どのように結果が生成されるかに関係することなく、ストアド プロシージャの呼び出しを管理することのみできるようになります。

第 2 章 : Microsoft Access 2000 クライアント/サーバー データベースの実行」でトリガを作成した際に、ストアド プロシージャ プログラミングを既に行っています。また、この章でも、フォームのレコード ソースとしてストアド プロシージャを使っています。この章の「Access プロジェクトにおける Transact-SQL プログラミング 」で、Transact-SQL とストアド プロシージャによりできることについて、さらに詳しく検討します。

ストアド プロシージャの詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで「ストアド プロシージャ」と入力し、[検索] をクリックしてください。または、『SQL Server Books Online』の [索引] タブで "ストアド プロシージャ, 概要" について検索してください。

Courses フォームを作成する

これまで Access プロジェクト フォームで使用されるさまざまな種類のレコード ソースについて説明してきましたが、ここではこの知識を State University のサンプル アプリケーションに適用してみましょう。

Courses フォームの作成

この練習では、Courses テーブルへのビューを構築し、次に、このビューをレコード ソースとして使用するフォームを構築します。

  1. データベース ウィンドウで、[オブジェクト] にある [ビュー] をクリックし、[新規作成] をクリックして、Query Designer を開きます。

  2. ツール バーの [SQL] ボタンをクリックして SQL ペインを開き、次の SQL ステートメントを入力します。

    SELECT *
        FROM Courses
    
  3. Query Designer を閉じ、ビューに「vwCourses」と名前を付けて保存します。

  4. 7データベース ウィンドウで、[オブジェクト] の下にある [フォーム] をクリックし、Template フォームのコピーを作成して、このコピーの名前を「Courses」に変更します。

  5. 新しく作成した Courses フォームを選択して、データベース ウィンドウのツール バーで [デザイン] をクリックします。

  6. [ビュー] メニューの [プロパティ] をクリックし、Courses フォームのプロパティ シートを開きます。

  7. [レコード ソース] プロパティ ボックスで、ドロップダウンの矢印をクリックし、"vwCourses" を選択します。Courses フィールド リストが自動的に表示されます。

  8. Courses フィールド リストで、CourseID フィールドをクリックし、Shift キーを押したまま EndTime フィールドをクリックして、フィールド リストにある全フィールドを選択します。フィールド リストの全フィールドを、Courses フォームの詳細セクションにドラッグします。

  9. フィールドを適切に並べ替えたら、Courses フォームを閉じて、変更を保存します。

データベース ウィンドウで新しく作成した Courses フォームを選択し、データベース ウィンドウのツール バーで [開く] をクリックして、このフォームを表示します。このフォームは図 3.5 のようになります。

図 3.5 Courses フォーム

注意 :    上の図にある Courses フォームでは、Instructors フィールドと Quarter フィールドでコンボ ボックスが使用されています。コンボ ボックスの作成方法は、Access (*.mdb) データベースでコンボ ボックスを作成する方法と同じです。

レポートを作成し、使用する

フォームと同様、Access プロジェクトのレポートは、Access (*.mdb) データベースと同じ動作をします。ただし、レポートに表示されたデータのフィルタに使用可能な 2 種類のレポート プロパティが追加されています。さらに、Access 2000 の新機能 "条件付き書式設定" を使用して、レポートの外観を動的に変更することもできます。

クライアント/サーバー レポート プロパティ

クライアント/サーバー アプリケーションでは、ネットワーク負荷を軽減し、サーバーでのデータ処理の大半を扱う必要があります。したがって、レポートに表示されるデータをできるだけフィルタし、ネットワーク トラフィックを軽減して、パフォーマンスを向上させます。この目標を達成するには、Access プロジェクト レポートの InputParameters プロパティと ServerFilters プロパティを使用します。図 3.6 にあるように、これらのプロパティはレポートのプロパティ シートに表示されます。

図 3.6 Access プロジェクトの追加プロパティが表示された [レポート] プロパティ シート

次のセクションでは、これらのプロパティの概要と用途を説明します。

InputParameters

InputParameters レポート プロパティの動作は InputParameters フォーム プロパティの動作と同じです。このプロパティを使用してプロンプトを表示させ、サーバーから返され、レポートに表示される結果セットをフィルタするための情報をユーザーに入力させることができます。InputParameters レポート プロパティで使用される構文も InputParameters フォーム プロパティと同じです。このプロパティの使用方法について、詳細はこの章で先に説明した「 クライアント/サーバー フォーム プロパティ」の「InputParameters 」を参照してください。

ServerFilter

ServerFilter レポート プロパティの動作は ServerFilter フォーム プロパティの動作と同じです。このプロパティを使って、データベース サーバーから取得し、Access プロジェクトのレポートに表示されるデータをフィルタすることができます。ServerFilter プロパティの構文は、SQL ステートメントの WHERE 句で条件を指定するときに使用した構文と同じです。このプロパティの使用方法に関する詳細については、この章で先に説明した「 クライアント/サーバー フォーム プロパティ 」の「 ServerFilter 」を参照してください。

条件付き書式設定を使用する

Access データベースと Access プロジェクトの両方で使用できる新しい Access 2000 の機能に "条件付き書式設定" があります。この機能を使って、レポートにあるデータを評価し、式や条件の結果に基づいて動的にデータの外見を変更するための式を指定することができます。条件付き書式設定は、次の点に基づいて行われます。

  • コントロールの値

  • ほかのコントロールを参照する任意の式

  • ユーザー定義の VBA 関数

条件付き書式設定を使用するには、動的に変更する必要のあるレポートのコントロールを選択して、[書式] メニューで [条件付き書式] をクリックします。この結果、図 3.7 のような [条件付き書式設定] ダイアログ ボックスが表示されます。

図 3.7 [条件付き書式設定] ダイアログ ボックス

上の図にあるダイアログ ボックスで、条件で使用される評価基準と条件に一致した場合に行われる書式設定を指定します。次の「Student Transcript レポートを作成する」では、レポートに対する条件を構築します。

条件付き書式設定の詳細については、Office アシスタント、または [Microsoft Access ヘルプ] ウィンドウの [質問] タブで「条件付き書式設定」と入力し、[検索] をクリックしてください。

Student Transcript レポートを作成する

Student Transcript レポートの作成

この例では、非常に簡単な Student Transcript レポートを構築します。

  1. データベース ウィンドウで [オブジェクト] にある [レポート] をクリックし、[新規作成] をクリックします。[新規レポート] ダイアログ ボックスで [デザイン ビュー] を選択し、[OK] をクリックします。

  2. [表示] メニューの [プロパティ] をクリックして、レポートのプロパティ シートを開きます。

  3. RecordSource プロパティに CourseEnrollment ストアド プロシージャを設定します。CourseEnrollment フィールド リストが自動的に表示されます。

  4. InputParameters プロパティを次のように設定します。

    @StudentID int = [Enter the StudentID:]
    
  5. Caption プロパティを Student Transcriptに設定し、プロパティ シートを閉じます。

  6. フィールドリストから CourseID フィールド、Name フィールド、Quarter フィールド、Year フィールドをレポートの詳細セクションにドラッグします。

  7. フィールドのラベルを削除し、レポートのページ ヘッダー セクションで新しい名前を作成します。

  8. レポートのレポート ヘッダー セクションにテキスト ボックスを作成し、このテキスト ボックスの ControlSource プロパティを次のように設定します。

    =[FirstName] & " " & [LastName]
    
  9. フッターなど、そのほかの必要なアイテムを追加します。

  10. レポートの詳細セクションでコントロールをすべて選択し、[書式] メニューで [条件付き書式] をクリックします。

  11. [条件付き書式設定] ダイアログ ボックスで [条件 1][式] に設定してから、次の式をテキスト ボックスに入力します

    [Year]>=Format(Date(),'yyyy')
    
  12. [太字] をクリックして、書式設定の条件を太字に設定してから、[OK] をクリックして、条件付き書式設定を保存します。

  13. レポートを閉じて、**「Student Transcript」**と名前を付けて保存します。

レポートをテストするには、データベース ウィンドウでレポートを選択してから、データベース ウィンドウのツール バーで [プレビュー] をクリックします。要求されたら学生 ID を入力します。図 3.8 のようなレポートが表示されます。

図 3.8 Student Transcript レポート

Access プロジェクトにおけるプログラミング

ここでは、SQL Server および MSDE のネイティブな SQL 言語である Transact-SQL 言語の概要について説明します。また、VBA を使用して、Access 2000 クライアント/サーバー アプリケーションにおいてアプリケーションおよびデータ オブジェクトで作業を行う際に使用できるさまざまなオートメーション プログラミング モジュールについてもここで説明します。これについて詳しく説明することは、この記事や State University のサンプル アプリケーションの範囲を超えていますが、Access プロジェクトでのプログラミングに特有のさまざまな問題を指摘し、さらに詳しい情報を得るための重要な情報源への参照をご紹介します。

Access プロジェクトにおける Transact-SQL プログラミング

Transact-SQL 言語は SQL Server と MSDE の両方で使用されるネイティブな SQL 言語です。SQL はリレーショナル データベースで動作する標準対話型プログラミング言語です。SQL の標準は、米国規格協会 (ANSI) と国際標準化機構 (ISO) の両方で定義されています。Transact-SQL では、最新 SQL 標準である Entry Level of ANSI SQL-92 (1992 年発行) がサポートされ、通常の言語専用の拡張機能も含まれます。SQL 標準の詳細については、JCC SQL 標準ページ (英語)、 www.jcc.com/SQLPages/jccs\_sql.htm を参照してください。

Transact-SQL は強力なプログラミング言語で、SQL Server や MSDE で広い範囲にわたるタスクを実行するために使用できますが、主要な機能は次の 3 つに分類されます。

  • データ定義言語 (DDL) --- リレーショナル データを含み、構成する、テーブル、インデックス、リレーションシップなどのオブジェクトの作成に使用されるステートメント。

  • データ操作言語 (DML) --- リレーショナル データベース テーブルのデータ取得、追加、修正、削除に使用されるステートメント。

  • 管理--- セキュリティ グループとユーザー アカウントを作成し、データベースでデータに対するさまざまなレベルのアクセスを定義することにより、アクセス コントロールを定義するために使用されるステートメント。Transact-SQL を使用して、データベースのバックアップ、削除、復元や、レプリケーションの構成といった管理的なタスクを自動化するためにも使用できます。

Access と、Access から SQL Server や MSDE へ接続するために使用される OLE DB コンポーネントでは、Transact-SQL を使用して、データベースとの対話の大半が制御できます。ユーザーと開発者は、次の方法で、Access プロジェクトから SQL Server や MSDE データベースで動作する Transact-SQL コードを入力することができます。

  • Query Designer の SQL ペインでビューを作成

  • Stored Procedure Designer でストアド プロシージャを作成

  • [テーブルのトリガ : "TableName"] ダイアログ ボックスでトリガを作成

  • フォーム、またはレポートの RecordSource プロパティで、基になるデータ ソースを指定

  • ADO コードと、Transact-SQL を使用できるオートメーション オブジェクト モジュールのコードで、DLL、DML、管理機能などを実行

注意 :    Transact-SQL コードを記述した位置と、作業の対象となるデータベース オブジェクトによっては、使用できる Transact-SQL ステートメントが制限されます。たとえば、トリガを作成する場合、データベース オブジェクトを変更、作成、削除するようなステートメントは使用できません。特定のタスクに対する適切な Transact-SQL コードについては、『SQL Server Books Online』を参照してください。

たとえば、テーブル、ビュー、データベース ダイアグラムなどのデザインのためにツールを使用する場合など、Access プロジェクトにおけるそのほか多数の操作で、データベースと共に動作する Transact-SQL コードが生成され、使用されます。同様に、レポート、データシート、フォーム、データ アクセス ページなどで作業する場合、Transact-SQL を使用して、レコードの表示、追加、修正、削除ができます。

この記事シリーズ全体にわたって、Transact-SQL ステートメントの記述例を紹介してきました。Microsoft Access ヘルプ システムでは、Transact-SQL キーワードと SQL Server/MSDE エラー メッセージへの参照がアルファベット順に並べられています。トピックを読むには、Access ヘルプのトピックを表示し、[表示] をクリックして [目次] タブをクリックします。どのトピックが目次のどの位置に表示されるかは、Office Update Answer Wizard Extension for Office 2000 (英語) を http://officeupdate.microsoft.com/2000/downloadDetails/ouawe.htm からインストールしたかどうかによって変わります。

アンサー ウィザード拡張機能がインストールされていない場合、目次に表示される本は 3 冊のみで、クリックできるのは『Transact-SQL Help』または『SQL Server Error Messages Help』です。この拡張機能がインストールされている場合、使用可能なヘルプ トピックが追加され、Transact-SQL とエラー メッセージに関するトピックが見えなくなることがあります。これらのトピックを探すには、下方向にスクロールして、『Working with Microsoft Access Projects』をクリックします。次に『Working in Microsoft Access Projects』をクリックし、最後に『Transact-SQL Help』または『SQL Server Error Messages Help』をクリックします。

実際、Transact-SQL、およびエラー メッセージに関するヘルプ トピックは、『SQL Server Books Online』と呼ばれるさらに広い範囲にわたる SQL Server リファレンスのサブセットです。『SQL Server Books Online』には Transact-SQL の使用に関する追加情報が含まれています。『SQL Server Books Online』は SQL Server 本体と共にインストールされますが、 https://support.microsoft.com/download/support/mslfiles/sqlbol.exe から HTML ヘルプ ファイルとしてダウンロードすることもできます。また、Data Access Services SDK の一部である MSDN? Library で Web の『SQL Server Books Online』を参照することも可能です。Data Access Services SDK では、『SQL Server Books Online』は『Microsoft SQL Server Programmer's Toolkit』と呼ばれ、 https://msdn.microsoft.com/library/psdk/sql/8_gs_00.htm (英語) で参照できます。

Access プロジェクトにおいて VBA プログラミングを行う

Access プロジェクトにおける VBA プログラミング タスクは、クライアント/サーバー アプリケーションで作業しているという事実に関連して、次の 3 つの標準エリアに分けられます。

  • データ アクセス プログラミング--- アプリケーションのサーバー側の一部であるデータ オブジェクト、つまりデータベース自身 (テーブル、ビュー、およびストアド プロシージャ) で動作します。

  • Access 特有のプログラミング --- アプリケーションのクライアント側の一部であるオブジェクト、つまり実際に .adp ファイルに保存されたオブジェクト (フォーム、レポート、データ アクセス ページへのリンク、マクロ、およびモジュール) で動作します。Access プログラミング モデルでは、Access 自身でデータの読み書きに使用される接続で動作する方法や、データを持つオブジェクトに関する情報の取得方法が提供されていますが、これらのオブジェクトが表すデータで直接作業する方法はありません。

  • サーバー管理プログラミング--- サーバー自体で動作し、データベースのバックアップや復旧、セキュリティ設定の変更、レプリケーション タスクの管理などの管理的タスクを実行します。

データ アクセス プログラミング

Access プロジェクトの VBA データ アクセス プログラミングでは、2 種類のプログラミング モデルが使用されます。

  • ActiveX データ オブジェクト (ADO)

  • ActiveX Data Objects Extensions for DDL and Security (ADOX)

次のセクションでは、これらのプログラミング モデルについて簡単に説明し、ほかの参考文献を提示します。

ADO

ADO は SQL Server や MSDE などの OLE DB 準拠のデータ ソースとの通信に使用されるデータ アクセス インターフェイスです。データ アプリケーションでは ADO を使用して、SQL Server や MSDE に接続したり、これらのデータ ソースからのデータを取得、操作、更新することができます。SQL Server データベースや MSDE データベースで ADO を使用する際に、もっとも一般的に行われる操作は次のとおりです。

  • MSDE データベース、および SQL Server データベースへの接続を開く

  • Recordset オブジェクトを使用してレコードを開き、作業する

  • Command オブジェクトを使用することによる、パラメータ化されたストアド プロシージャの実行

  • Command オブジェクトを使用することによる、その時点でのみ有効な Transact-SQL ステートメントの実行

  • ADO イベントへのシンク

  • Errors コレクションを使用することによる、ADO エラーへの対応

この章の「 Access 特有のプログラミング 」では、Access プログラミング モデルにあるオブジェクト特有の一部の ADO 機能について説明します。

SQL Server と MSDE における ADO の使用については、『SQL Server Books Online』の「Building SQL Server Applications」に含まれる「ADO and SQL Server (英語)」を参照してください。

ADO に関する参考情報については、ActiveX データ オブジェクトのヘルプ ファイルを参照してください。このファイルは、既定では C:\Program Files\Common Files\System\ado\ado210.chm に保存されています。また、MSDN ライブラリに含まれる、使用しているプラットフォームに対応した SDK の「Microsoft Data Access Component (MDAC) (英語)」 https://msdn.microsoft.com/library/psdk/dasdk/mdac3sc7.htm にも、ADO に関する参考情報があります。

ADO に関する一般的な情報については、「 Microsoft Office 2000/Visual Basic プログラマーズ ガイド 」の「第 14 章 Office ソリューションのデータ アクセス コンポーネントを使用する 」を参照してください。

技術的な問題、既知の問題、ADO および MDAC のその他の部分にかかる制限については、MDAC Readme ファイルを参照してください。このファイルは、既定で C:\Program Files\Common Files\System\ado\MDACReadme.htm に保存されています。

ADOX

ADOX は ADO オブジェクトとプログラミング モデルへの拡張機能です。ADOX では、テーブルやプロシージャなどのスキーマ オブジェクト オブジェクトを作成、修正、変更するための追加オブジェクトが公開されています。また、ユーザー アカウントやグループを維持管理し、オブジェクトに対する権限を付与、撤回するためのセキュリティ オブジェクトも含まれます。ただし、Microsoft OLE DB Provider for SQL Server では、それほどたくさんの ADOX 機能はサポートされていません。サポートされていない機能をオブジェクト、またはコレクション別にまとめると、次のようになります。

  • Catalog オブジェクト : Create メソッド

  • Tables コレクション : 既存のテーブルに関するプロパティは読み取り専用です。新しいテーブルのプロパティは読み書き可能です。

  • Views コレクション : サポートされていません。

  • Procedures コレクション : Append メソッド、 Delete メソッド、 Commandプロパティ

  • Keys コレクション : Append メソッド、 Deleteメソッド

  • Users コレクション : サポートされていません。

  • Groups コレクション : サポートされていません。

SQL Server データベースや MSDE データベースでは ADOX は適切にサポートされていないため、代わりに ADO Command オブジェクトに対して Transact-SQL ステートメントを実行するか、SQL 分散管理オブジェクト (SQL-DMO) プログラミング モデルを使用して、より完成した DDL や管理的プログラミング タスクを実行することができます。

ADOX の参考情報については、C:\Program Files\Common Files\System\ado\ado210.chm を参照してください。また、 https://msdn.microsoft.com/library/psdk/dasdk/adod50s7.htm(英語) にある MSDN ライブラリで Data Access SDK の ADOX 参考情報にアクセスすることもできます。

技術的な問題、既知の問題、ADOX および MDAC のその他の部分にかかる制限については、MDAC Readme ファイルを参照してください。このファイル (MDACReadme.htm) は、既定で C:\Program Files\Common Files\System\ado に保存されています。

SQL-DMO の使用に関する参考情報については、「Developing SQL-DMO Applications」を参照してください。これは、『SQL Server Books Online』の「Building SQL Server Applications (英語)」に含まれます。また、MSDN ライブラリに含まれる Data Access SDK で SQL-DMO 参考情報 https://msdn.microsoft.com/library/psdk/sql/9\_dmoc01.htm (英語)) も参照してください。

Access 特有のプログラミング

このセクションでは、Access プロジェクトで作業ができるようにするために、Microsoft Access 9.0 オブジェクト ライブラリに追加された新しいオブジェクト、プロパティ、およびメソッドの概要について説明します。Access オブジェクト モデルに関する完全な文書については、Microsoft Access Visual Basic リファレンス ヘルプを参照して、情報が必要なアイテムを検索してください。

Access プロジェクトの作成や、オープン/クローズを行う

通常、Access プロジェクトでは、Access ユーザー インターフェイスを使用して作成、オープン/クローズが行われますが、Access 2000 オブジェクト モデルは、VBA をサポートしているアプリケーションや、アドイン、ウィザードなどから自動的にこれらの作業が行えるように拡張されています。 OpenAccessProject メソッド、 NewAccessProject メソッド、または CreateAccessProject メソッドを使用して、Access プロジェクト ファイルを開いたり、作成したりすることができます。 NewAccessProject メソッドでは、新しい Access プロジェクトが作成され、Access の現在のインスタンスでこのプロジェクトがアクティブになります。また、CreateAccessProject メソッドはディスクに Access プロジェクト ファイルを作成します。既存の Access プロジェクト ファイルを開くには OpenAccessProject メソッドを使用します。また、 CloseCurrentDatabase メソッドを使用して、現在の Access プロジェクト ファイルを閉じることができます。

State University サンプル アプリケーションの modADO モジュールにある以下のコードは、どのような Office アプリケーションでも動作するように設計されています。このコードは、新しい Access プロジェクト ファイルを作成し、閉じる方法を示した例です。

Sub CreateADP()
    Dim appAccess As Variant

    ' Microsoft Access の新規インスタンスを作成
    Set appAccess = CreateObject("Access.Application.9")

    appAccess.Visible = True

    ' Microsoft Access でデータベースを開く
    appAccess.NewAccessProject "c:\new.adp"

    ' Access の新規インスタンスに切り替えて
    ' 新規プロジェクトファイルを表示
    Stop

    ' 開いているデータベースを閉じる
    appAccess.CloseCurrentDatabase

    ' これはデモなので、ファイルを削除
    Kill "c:\new.adp"

    ' Application オブジェクトのインスタンスを閉じて、破棄
    appAccess.Quit
    Set appAccess = Nothing
End Sub

新しい Access プロジェクトを作成して開いたら、 Application オブジェクトのほかのメソッドを使用して、新しい Access オブジェクトを作成することができます。たとえば、 CreateForm メソッドと CreateControl メソッドを使用して、フォームやフォームのコントロールを作成できます。また、 CreateReport メソッドや CreateReportControl メソッドを使用して、レポートや、レポート上のコントロールを作成できます。

ウィザードやアドインの作成については、「 Microsoft Office 2000/Visual Basic プログラマーズ ガイド 」の「第 11 章 アドイン、テンプレート、ウィザード、およびライブラリ」を参照してください。

Access プロジェクトでオブジェクトを操作する

Access の現バージョン、および旧バージョンでは、データ アクセス オブジェクト (DAO) である Container オブジェクトと Document オブジェクト、およびこれらのメソッドとプロパティを使用して、Access データベース (.mdb) にあるフォーム、レポート、マクロ、テーブル、フィールド、リレーションシップ、クエリに関する情報を取得することができます。DAO を使用して、Access プロジェクト ファイルにあるオブジェクトと対話することはできませんが、Access 2000 には CurrentDataCurrentProject という新しいオブジェクトが 2 つあり、これらのオブジェクトには AccessObject オブジェクトのコレクションが含まれます。AccessObject は、旧バージョンの DAO で使用できた Container オブジェクトと Document オブジェクトの代わりに使用されます。

Access 2000 では、データベース ダイアグラム、ストアド プロシージャ、テーブル、ビューなどの、データベース エンジン (MSDE、または SQL Server) で管理される AccessObject のコレクションの格納に CurrentData オブジェクトが使用されます。オブジェクトの各コレクションに関する情報はコレクションに格納され、ここでは各オブジェクトは AccessObject オブジェクトで表されます。たとえば、テーブルに関する情報は AllTables コレクションに含まれ、 AllViews コレクションにはビューに関する情報が格納されます。 CurrentData オブジェクトにアクセスするには、 Application オブジェクトの CurrentData プロパティを使用します。

注意 : AccessObject オブジェクトには、データを含むオブジェクトに関する情報が含まれますが、データ自体へのアクセスは提供されません。データで作業するには、ADO を使用する必要があります。ADO を使用したデータ処理については、この章の「 データ アクセス プログラミング 」を参照してください。

これらの AccessObject オブジェクトのコレクションを使用して、ADOX にある制約の一部を回避することができます。たとえば、Microsoft OLE DB Provider for SQL Server (SQLOLEDB) に対して ADOX オブジェクト ライブラリを使用している場合、 Catalog オブジェクトの Views コレクションから情報にアクセスすることはできません。Access プロジェクトでは、State University のサンプル アプリケーションの modADO モジュールにある以下のコード例のように、CurrentData オブジェクトの AllViews コレクションを使用して、この制約を回避することができます。

Sub ListViews()
    Dim objView As AccessObject

    For Each objView In CurrentData.AllViews
        Debug.Print objView.Name
    Next

    Debug.Print "すべてのビュー : " & CurrentData.AllViews.Count
End Sub

ADOX の使用に関する詳細については、この章の「 データ アクセス プログラミング 」を参照してください。

Application オブジェクトの CurrentProject プロパティを使用して、データ アクセス ページ、フォーム、マクロ、モジュール、レポートなど、Access プロジェクト ファイルにある Access 特有のオブジェクトに関する情報を取得することができます。CurrentProject プロパティは、CurrentProject オブジェクトを返します。このプロパティには Access プロジェクトにある Access 特有のオブジェクトに関する情報を提供する AccessObject オブジェクトのコレクションが含まれます。たとえば、 AllFormsコレクションにはデータベースにあるフォームすべてに関する情報が含まれ、 AllReports コレクションには、データベースにあるレポートすべてに関する情報が含まれます。これらのコレクションに加え、 CurrentProject オブジェクトには、Access プロジェクト ファイル自体の名前、パス、コレクション情報も含まれています。

AccessObject オブジェクトでは、オブジェクトに関する情報を取得するために使用できる IsLoadedNameParentProperties、 and Type プロパティが公開されています。これらのプロパティについてまとめると、次の表のようになります。

表 3.1 CurrentProject オブジェクトの AccessObject オブジェクト プロパティ

AccessObject プロパティ 説明
IsLoaded 現在、オブジェクトがロードされているかどうかを表す "ブール" 値。どのビューでも、オブジェクトが開かれていれば、このプロパティは True になります。
Name オブジェクトの名前を表す "文字列" 値。
Parent 指定されたオブジェクトの親オブジェクトが返します。たとえば、 AllForms コレクションにあるアイテムの親は AllForms コレクション オブジェクトです。CurrentProject オブジェクトの親は Application オブジェクトです。
Properties AccessObjectProperties コレクションを返します。このコレクションには、特定の AccessObject オブジェクトと関連するカスタム プロパティがすべて含まれます。Properties コレクションが格納できるのは "文字列" 値、または "長整数" 値のみです。

たとえば、Access の旧バージョンでは、Access データベース (.mdb) にある全レポートのリストを表示する必要がある場合は、DAO で Containers("Reports") コレクションを使用して、レポート名を取得することができます。フォームの Load イベントにある以下のイベント プロシージャで例示されているとおり、State University のサンプル アプリケーションの Reports フォームに lstReports コントロールを入れるために、 CurrentProjectAllForms コレクションが使用されています。

Private Sub Form_Load()
    Dim strFill As String
    Dim objReport As AccessObject

    ' 現在のプロジェクトにあるレポートすべてを
    ' セミコロンで区切って、文字列としてリストに構築
    For Each objReport In CurrentProject.AllReports
        strFill = strFill & objReport.Name & ";"
    Next

    ' コントロールの RowSourceType プロパティが
    ' Value List に設定されていることを確認
    lstReports.RowSourceType = "Value List"

    ' RowSource プロパティを strFill に設定してリストを埋める
    lstReports.RowSource = strFill

    ' リスト ボックスへフォーカスを移動
    lstReports.SetFocus

    ' 既定では、リスト ボックスの先頭アイテムを選択
    lstReports.Selected(0) = True
End Sub

Access プロジェクトで CurrentProject オブジェクトの Connection プロパティを使用する

Access データベース (.mdb) にある CurrentProject オブジェクトの Connection プロパティを使用すると、Access により、Microsoft Jet 4.0 OLE DB Provider を使用する接続が返されます。しかし、Access プロジェクト (.adp) にある CurrentProject オブジェクトの Connection プロパティを使用しても、SQL Server データベースへの直接接続は返されません。その代わりに、データ プロバイダの最上部で実行される OLE DB サービス コンポーネントである Microsoft Data Shaping Service for OLE DB が使用されます。Access プロジェクト ファイルでは、Microsoft Data Shaping Service for OLE DB と共に使用されるデータ プロバイダは Microsoft OLE DB Provider for SQL Server です。Access プロジェクトのフォームにあるデータを更新するためには、シェイプ サービスが必要であるため、このプロバイダが必要になります。Access プロジェクトにあるフォームの Recordset プロパティを使用して、フォームのデータ ソースをプログラム的に指定する場合は、このプロバイダが必要です。Access プロジェクトにあるフォームの Recordset プロパティの使用に関する詳細については、この章の「 フォームの Recordset プロパティ 」を参照してください。

Connection プロパティにより、Microsoft Data Shaping Service for OLE DB を使用する Connection オブジェクトが返されるという事実から、次のような結果が生じます。

  • Recordset オブジェクトでは、常に、クライアント側のカーソル エンジン (CursorLocation=adUseClient) が使用されます。Connection オブジェクトの Execute メソッド、Command オブジェクトの Execute メソッド、または Recordset オブジェクトの Open メソッドを使用して、Recordset オブジェクトを作成する前に、 Recordset オブジェクトの CursorLocation プロパティが adUseServer に設定されていたとしても、常にクライアント側のカーソルが取得されます。

    注意 :    カーソルとカーソル エンジンの詳細については、「 Microsoft Office 2000/Visual Basic プログラマーズ ガイド」 の「第 14 章 Office ソリューションのデータ アクセス コンポーネントを使用する」を参照してください。

  • Recordset オブジェクトでは、常に Static カーソル (CursorType=adOpenStatic) が使用されます。 Recordset オブジェクトを開くときに、 CursorType プロパティに何を設定したかは関係ありません。

  • Recordset オブジェクトの LockType プロパティを定数 adLockOptimisticadLockBatchOptimistic、 または adLockReadOnly に設定することができます。 LockType プロパティを adLockPessimistic に設定すると、この設定は adLockOptimistic に変換されます。ほかの接続で作成された Recordset オブジェクトの場合と同様、 LockType プロパティの設定を指定しなかった場合、このプロパティは既定では adLockReadOnly に設定されます。

  • Microsoft Data Shaping Service for OLE DB を使用して確立した Connection オブジェクトでは、Microsoft OLE DB Provider for SQL Server を通した直接接続の使用により確立されたConnection オブジェクトでサポートされる ADOX 操作はすべてサポートされていません。特に、Column オブジェクトの Properties コレクションでの操作はサポートされていません。

    注意 :    Microsoft Data Shaping Service for OLE DB、または Microsoft OLE DB Provider for SQL Server のどちらかを使用した接続を使用している場合、SQL サーバーに対する ViewsUsersGroups コレクションはサポートされません。

  • Connection オブジェクトの Properties コレクションでは、直接接続と同じプロパティはサポートされていません。たとえば、 DBMS Version プロパティはサポートされていません。

Command オブジェクトの CommandType プロパティが指定されていない場合、 CommandText プロパティがストアド プロシージャを参照していなければ、接続が、テーブルとして、Command オブジェクトを開こうとすることはありません。この問題を回避するには、テーブルを開くための SQL ステートメント (たとえば、SELECT * FROM Students) を指定します。または、State University のサンプル アプリケーションの modADO モジュールから次の手順を実行しても、この問題を回避できます。

Sub OpenCurrentProjectConnection()
    Dim rst As New ADODB.Recordset
    Dim cmd As New ADODB.Command

    ' Command オブジェクトのプロパティを指定
    With cmd
        .ActiveConnection = CurrentProject.Connection
        .CommandText = "Students"
        .CommandType = adCmdTable
    End With

    ' Command オブジェクトを使用して Recordset オブジェクトを開く
    Set rst = cmd.Execute

    ' 接続文字列の表示
    Debug.Print rst.ActiveConnection

    ' オブジェクトを閉じて、破棄
    rst.Close
    Set cmd = Nothing
    Set rst = Nothing
End Sub

シェイプ サービスを使用しない接続を別に作成することにより、上記の制約や、Microsoft Data Shaping Service for OLE DB を使用しているときに発生する可能性のあるそのほかの制約を回避することもできます。 CurrentProject オブジェクトの BaseConnectionString プロパティを使用することにより、独立した接続を作成できます。 BaseConnectionString プロパティからは、Microsoft OLE DB Provider for SQL Server (Provider=SQLOLEDB.1) のみを使用する接続文字列が返されます。State University のサンプル アプリケーションの modADO モジュールにある以下のプロシージャは、 BaseConnectionString プロパティを使用して、 Recordset オブジェクトを開く方法を表しています。

Sub OpenBaseConnectionString()
    Dim rst As New ADODB.Recordset
    Dim cmd As New ADODB.Command

    ' Command オブジェクトのプロパティを指定
    With cmd
        .ActiveConnection = CurrentProject.BaseConnectionString
        .CommandText = "Students"
    End With

    ' Command オブジェクトを使用して、Recordset オブジェクトを開く
    Set rst = cmd.Execute

    ' 接続文字列を表示
    Debug.Print rst.ActiveConnection

    ' オブジェクトを閉じて、破棄
    rst.Close
    Set cmd = Nothing
    Set rst = Nothing
End Sub

Microsoft Data Shaping Service for OLE DB の機能の詳細については、ADO ヘルプで "データ シェイプ" について検索してください。

フォームの Recordset プロパティ

Access プロジェクト ファイルでは、Access Form オブジェクトの Recordset プロパティを使用して、フォームのレコード ソースとして使用される ADO Recordset オブジェクトを指定することができます。レコード ソースを更新可能にするには、以下の 3 つの作業を行わなければなりません。

  • Recordset オブジェクトを開くために使用される Connection オブジェクトで Microsoft Data Shaping Service for OLE DB プロバイダが使用されるように指定する必要があります。このためには、 Connection オブジェクトを開くために使用される接続文字列の Provider プロパティを MSDataShape に設定します。

  • 接続文字列の Data Provider プロパティで Microsoft OLE DB Provider for SQL Server (Data Provider=SQLOLEDB) 列を更新することはできません。

  • そのほかの接続文字列プロパティを表 3.2 のとおりに設定します。

表 3.2 更新可能なレコード ソースに対する接続文字列プロパティの設定

接続文字列のプロパティ 説明
Provider Microsoft Data Shaping Service for OLE DB を指定するには、このプロパティを MSDataShape に設定する必要があります。
Data Provider Microsoft OLE DB Provider for SQL Server を指定するには、このプロパティを SQLOLEDB に設定する必要があります。これ以外の OLE DB プロバイダを使用すると、読み取り専用接続が返されます。
Data Source このプロパティにはサーバー名を指定します。このサーバー名は、SQL Server が実行されているコンピュータのネットワーク名と同じです。この名前は、Windows® のコントロール パネルを開き、[ネットワーク] アイコンをクリックして、[識別情報] タブの [コンピュータ名] ボックスに表示されます。Access プロジェクトが実行されているのと同じコンピュータにインストールされているサーバーで作業している場合は、Data Source プロパティを (local) に設定することもできます。
Initial Catalog このプロパティには、開くデータベースの名前を指定します。
User ID SQL Server 認証を使用している場合、このプロパティを使用して、ユーザー アカウント名を指定します。たとえば、既定のユーザーアカウントを表す場合は、 "sa" を指定します。Windows NTR 認証を使用している場合は、このプロパティを設定しないでください。
Password SQL Server 認証を使用している場合、このプロパティを使用して、 User ID プロパティで指定したユーザー アカウントへのパスワードを指定します。Windows NT 認証を使用している場合は、このプロパティを設定しないでください。
Trusted_Connection SQL Server 認証ではなく、Windows NT 認証を使用している場合は、このプロパティを Yes に設定します。

Recordset プロパティを使用して、フォームのレコードセットを Access プロジェクトの ADO Recordset オブジェクトに連結する方法を例を使って表すために、Northwind Traders サンプル アプリケーションのバック エンド データベースにある Customers テーブルから得られたデータを表示するフォームを StateU.adp に作成してみましょう。

注意 :    以下の練習では、Northwind Traders サンプル Access プロジェクト (NorthwindCS.adp) がインストールされていて、ローカル サーバーで使用可能になっていることを前提にしています。Northwind Traders サンプル Access プロジェクトのインストールについては、「第 1 章 : Microsoft Access 2000 クライアント/サーバー開発の理解」の「Northwind Traders サンプル Microsoft Access プロジェクトをインストールする」を参照してください。

Customers フォームの作成

  1. データベース ウィンドウで、[オブジェクト] にある [フォーム] をクリックします。

  2. Template フォームのコピーを作成し、このコピーに「Customers (レコードセット プロパティ)」という名前を付けます。

  3. 新しく作成した Customers フォームを選択して、データベース ウィンドウのツール バーで [デザイン] をクリックします。

  4. [表示] メニューで [ツール バー] をクリックし、次にツールボックスを使用して、フォームにテキスト ボックスを 4 つ追加します。

  5. 最初のテキスト ボックスをクリックし、[表示] メニューの [プロパティ] をクリックします。

  6. このコントロールの Nameプロパティを「txtContactName」に設定します。残りのテキスト ボックス コントロールについても、この作業を繰り返して、それぞれの Name プロパティに「txtCompanyName」、「txtAddress」、「txtCity」という名前を付けます。

  7. 各ラベル コントロールの Caption プロパティを、ラベルが付属するテキスト ボックス コントロールに対応させて、「Contact Name:」、「Company Name:」、「Address:」、「City:」と入力します。 .

  8. フォームにコードを入力するには、[ビュー] メニューの [コード] をクリックします。

  9. コード ウィンドウの Object Box で、[Form] をクリックして、空の Form_Load イベント Sub プロシージャを作成します。Sub プロシージャには以下のコードを貼り付けてください。

    Private Sub Form_Load()
        Dim rst As ADODB.Recordset
        Dim strConnect As String
        Dim strSQL As String
    
        ' Microsoft Data Shaping Service for OLE DB プロバイダを使用して
        ' NorthwindCS データベースに接続するための接続文字列を作成
        strConnect = "Provider=MSDataShape;Data Provider=SQLOLEDB;" _
            & "User ID=sa;Password=;Data Source=(local);" _
            & "Initial Catalog=NorthwindCS"
    
        ' スペインからの顧客を選択するための SQL ステートメントを作成
        strSQL = "SELECT ContactName, CompanyName, Address, " & _
            "City FROM Customers WHERE (Region = 'SP')"
    
        ' Recordset オブジェクトを初期化し、開く
        Set rst = New ADODB.Recordset
        With rst
            .ActiveConnection = strConnect
            .LockType = adLockOptimistic
            .Open strSQL
        End With
    
        ' 新しい Recordset オブジェクトを使用できるように
        ' フォームの Recordset プロパティを設定
        Set Me.Recordset = rst
    
        ' Recordset オブジェクトのフィールドにコントロールが連結されるように
        ' フォームにあるこれらのコントロールの ControlSource プロパティを設定
        txtContactName.ControlSource = "ContactName"
        txtCompanyName.ControlSource = "CompanyName"
        txtAddress.ControlSource = "Address"
        txtCity.ControlSource = "City"
    End Sub
    
  10. コード ウィンドウを閉じて、変更を保存します。

  11. フォームを実行するには、[表示] メニューの [フォーム ビュー] をクリックします。

手順 9 で Customers フォームの Load イベントに追加されたコードにより、 Open メソッドの引数 ActiveConnection に接続文字列が渡され、ADO Recordset オブジェクトが開かれます。この接続文字列には、Microsoft Data Shaping Service for OLE DB プロバイダを指定する必要があります。その後、フォームの Recordset プロパティに Recordsetオブジェクトが割り当てられ、 Recordset オブジェクトのフィールドに、このフォームのテキスト ボックス コントロールが連結されます。 Recordset オブジェクトは Microsoft Data Shaping Service for OLE DB プロバイダを使用して開かれているので、フォームのレコードセットは更新可能となり、表示されたレコードの追加、削除、修正ができるようになります。

この章の「 Access プロジェクトで CurrentProject オブジェクトの Connection プロパティを使用する」で説明したように、Microsoft Data Shaping Service for OLE DB を通じて確立された接続では、常にクライアント側のカーソル エンジン (CursorLocation=adUseClient) が使用され、Static カーソル (CursorType=adOpenStatic) が返されます。また、 LockType プロパティは adLockOptimisticadLockBatchOptimisticadLockReadOnly の 3 つの定数以外には設定できません。プロパティを adLockPessimistic に設定すると、 adLockOptimistic が返されます。

注意 :    現在のデータベースに接続された更新可能な Recordset オブジェクトをフォームの Recordset プロパティに割り当てるには、次のコードにあるように、 CurrentProjectConnection プロパティを使用して、 Recordset オブジェクトを開くことができます。

   rst.ActiveConnection = CurrentProject.Connection
   

Connection プロパティにより、Microsoft Data Shaping Service for OLE DB プロバイダを表す接続文字列が返されるので、このコードは正しく動作します。

ADO Recordset オブジェクトを開くことの詳細については、「 Microsoft Office 2000/Visual Basic プログラマーズ ガイド 」の「第 14 章 Office ソリューションのデータ アクセス コンポーネントを使用する」を参照してください。

サーバー管理プログラミング

VBA を使用して、SQL Server や MSDE に対するサーバー管理タスクを実行するには、SQL 分散管理オブジェクト (SQL-DMO) プログラミング ライブラリを使用します。SQL 分散管理オブジェクト (SQL-DMO) はデータベースやレプリケーション管理に使用されるオブジェクトの集まりです。

SQL-DMO を使用して自動化できるものは次のとおりです。

  • データベースのバックアップや復旧など、頻繁に繰り返される SQL Server および MSDE の管理タスク

  • SQL Server および MSDE オブジェクトの作成と管理

  • SQL Server Agent ジョブ、警告、オペレータの作成と管理

  • SQL Server および MSDE のレプリケーション インストールと構成

SQL-DMO の使用に関する参考情報については、『Developing SQL-DMO Applications』を参照してください。これは、『SQL Server Books Online』の「Building SQL Server Applications (英語)」に含まれます。また、MSDN ライブラリに含まれる Data Access SDK で SQL-DMO 参考情報 ( https://msdn.microsoft.com/library/psdk/sql/9\_dmoc01.htm (英語)) も参照してください。

Access プロジェクトにおける管理

ほとんどの場合、Access クライアント/サーバー アプリケーションの管理と、ほかの SQL Server や MSDE アプリケーションの管理に違いはありません。主な違いは、どの管理ツールが使用できるかによって変わります。

  • MSDE のみがインストールされていて、使用可能な SQL Server がインストールされていない場合、アプリケーションの管理のために使用できるツールの選択肢は、MSDE でインストールされた小さなツール セット、Access ユーザー インターフェイスで使用可能なもの、または Transact-SQL や SQL-DMO コードを使って自分で作成したものに限られます。

  • SQL Server がインストールされている場合、より広い範囲にわたって強力なツールを使用できます。Enterprise Manager は主要なツールの 1 つです。SQL Server データベースとの使用に加え、Enterprise Manager を使用して、MSDE データベースに対する管理タスクを実行することもできます。

次のセクションでは、MSDE および Access 2000 のみがインストールされている場合に、使用可能な管理ツールの概要について説明します。Enterprise Manager と、SQL Server と共にインストールされているその他のツールについては、『SQL Server Books Online』を参照してください。

管理用ツール

Microsoft Access プロジェクトから、ローカル コンピュータで実行されている MSDE データベース上で、Access 2000 ユーザー インターフェイスで使用可能なデータベース ユーティリティ コマンドを使用し、データベースのバックアップや復旧など、もっとも一般的に行われる管理タスクを実行することができます。ただし、使用しているコンピュータに MSDE もインストールされていなければ、これらのコマンドは使用できません。

Access 2000 ユーザー インターフェイスで、ローカル データベースに対する管理タスクを実行するために必要なコマンドをまとめると、次の表のようになります。

表 3.3 ローカル データベースで実行可能な管理タスク

管理タスク コマンド
MSDE データベースのバックアップ [バックアップ] ([ツール] メニューの [データベース ユーティリティ])
以前のバックアップを使用した MSDE データベースの復旧 [復旧] ([ツール] メニューの [データベース ユーティリティ])
MSDE データベースの削除 [SQL Server の削除] ([ツール] メニューの [データベース ユーティリティ])
レプリケーション設定の管理 [同期] ([ツール] メニューの [レプリケーション])

[パブリケーションの作成] ([ツール] メニューの [レプリケーション])

[プル サブスクリプション] ([ツール] メニューの [レプリケーション])

[プッシュ サブスクリプション] ([ツール] メニューの [レプリケーション])

[サブスクリプション プロパティ] ([ツール] メニューの [レプリケーション])

[発行者のプロパティ] ([ツール] メニューの [レプリケーション])

[競合の解決] ([ツール] メニューの [レプリケーション])

[パブリケーションの作成] コマンド、[プル サブスクリプション] コマンド、[プッシュ サブスクリプション] コマンド、[サブスクリプション プロパティ] コマンド、および [発行者のプロパティ] コマンドのどれを実行してもウィザードが起動します。このウィザードを使って、MSDE サーバーと、そのほかの SQL Server や MSDE サーバーとの間にパブリケーションやサブスクリプションを構成することができます。これらのウィザードのユーザー インターフェイスにはヘルプ情報があります。また、[ヘルプ] で追加情報を表示することもできます。サブスクリプションやパブリケーションの構成が完了するまで、[同期] コマンドや [競合の解決] コマンドは使用しません。

Access を通して使用可能なツールに加えて、MSDE をインストールすると、MSDE サブメニュー (Windows [スタート] メニューの [プログラム]) で使用可能なツール セットがもう 1 つインストールされます。次の表はツールと、ツールを使用して実行できる管理タスクについてまとめたものです。

表 3.4 MSDE により追加される管理タスク ツール

管理タスク ツール
クライアント コンピュータにより、ほかのコンピュータにある SQL Server や MSDE インストールと通信するために使用される既定のネットワーク ライブラリやそのほかの構成設定の指定 クライアント ネットワーク ユーティリティ

このツールの使用方法に関する詳細については、作業対象となるタブをクリックして、そのタブにある [ヘルプ] をクリックしてください。

クライアント コンピュータとの通信のために、ローカル SQL Server や MSDE によって使用されるネットワーク ライブラリの指定 サーバー ネットワーク ユーティリティ

このツールの使用方法に関する詳細については、作業対象となるタブをクリックして、そのタブにある [ヘルプ] をクリックしてください。

SQL Server インストールと MSDE インストールの間、もしくは Access、dBASE、Paradox データベース、Microsoft Excel、テキスト形式などの多様なデータ形式間において、データをインポート、エクスポート、変換 データのインポートとエクスポート

このコマンドを実行すると、データ変換サービスのインポート ウィザードおよびエクスポート ウィザードが起動します。このウィザードのユーザー インターフェイスには、ヘルプ情報が含まれています。このウィザードで [列マッピングと変換] ダイアログ ボックスを使用している場合に、詳しい情報を表示するには、[ヘルプ] をクリックします。データ変換サービスのインポート ウィザードおよびエクスポート ウィザードの詳細については、『SQL Server Books Online』の [索引] タブで「データ変換サービス, 概要」と入力して検索を行ってください。Access データベースから SQL Server、もしくは MSDE へのデータのインポート例については、「 第 2 章 : Microsoft Access 2000 クライアント/サーバー データベースの実行」の「データ変換サービス ウィザードを使ってデータをインポートする 」を参照してください。

MSDE サーバーの開始、中止、一時停止 サーバー マネージャ

このコマンドにより、SQL Server サービス マネージャが起動されます。[サーバー] ボックスには、ローカルにインストールされている MSDE の名前が表示されます (この名前は、Windows 95、98、および Windows NT 4.0 では、コントロール パネルの [ネットワーク] アイコンから調べることのできるコンピュータ名と同じです。Windows 2000 では、この情報はコントロール パネルの [システム] アイコンで調べることができます)。このツールを使用して、MSDE の一部であるサービスを開始、中止、一時停止することができます。最も重要なのはデータベース サーバー自体で、これは [サービス] ボックスでは MSSQLServer サーバーと表示されます。また [OS 起動時にサービスを自動的に開始] チェック ボックスをオンにして、コンピュータが起動されたときは必ず、MSDE が実行されるようにすることができます。

セキュリティの管理

SQL Server と MSDE のセキュリティ システムでは、ユーザーとグループ アカウントのシステムが使用されます。このシステムは、既存の Windows NT、または Windows 2000 のセキュリティ アカウントの統合、ネイティブ SQL Server セキュリティ アカウントの作成、もしくは両方のシステムを組み合わせた使用の 3 種類の方法いずれかにより定義することができます。その後、これらのユーザーやグループには権限が割り当てられ、ユーザーがアクセスできるデータ オブジェクト、およびこれらのオブジェクトに対してユーザーがしてもよい操作が決められます。このセキュリティ システムには、Access データベース (.mdb) で使用されるユーザー レベルのセキュリティ システムのアーキテクチャとの共通点がたくさんありますが、たとえば、Windows セキュリティ アカウントの使用を統合する能力など、大きく異なる面もあります。

Access 2000 ユーザー インターフェイスには、SQL Server Enterprise Manager で使用できるものと同じセキュリティ ツールが用意されています。これらのツールを使用するには、作業の対象となる MSDE または SQL Server データベースに接続している Access プロジェクトを開き、[ツール] メニューの [セキュリティ] をクリックし、次に [データベースのセキュリティ] をクリックします。セキュリティ ツールの呼び出し方は、Enterprise Manager のセキュリティ ツールとは異なりますが、機能はまったく同じです。SQL Server セキュリティ システムと、セキュリティの構成方法に関する詳細ついては、『SQL Server Books Online』の「SQL Server の管理」にある「セキュリティの管理」を参照してください。

重要 :    Access プロジェクトのバック エンド データベースで作業するために Access 2000 により提供されているほかの管理ツールとは異なり、セキュリティ ツールはローカル MSDE データベースと、リモート MSDE および SQL Server データベースの両方で動作します。しかし、Access 2000 のセキュリティ ツールは MSDE によってインストールされるコンポーネントに依存しているので、ローカルに MSDE をインストールしておかなければ、これらのツールは使えません。また、Windows 95、または 98 で MSDE を実行した場合、これらのツールで Windows NT/2000 の統合セキュリティ アカウントはサポートされませんが、ネイティブ SQL Server のセキュリティ アカウントはサポートされます。

Access プロジェクトの展開

Access プロジェクト アプリケーションはさまざまな方法で展開できます。

  • Access プロジェクト (.adp) ファイルをユーザーに配布し、ファイルを開いて、[ファイル] メニューで [接続] を選択し、データベース (.mdf) ファイルのあるサーバーに接続する方法を指示します。[接続] コマンドの使用に関する詳細については、Microsoft Access ヘルプを参照してください。

    注意 :    Access プロジェクト アプリケーションを配布する前に、ローカル コンピュータで実行されている MSDE から、別のコンピュータで実行されている MSDE や SQL Server にバック エンド データベース (.mdf) を移動する必要がある場合、データ変換サービスのインポート ウィザードおよびエクスポート ウィザードを使用してこの作業を実行します。MSDE をインストールしたら、Windows の [スタート] メニューの [プログラム][MSDE] をクリックすると表示される [データのインポートとエクスポート] コマンドを使用してデータ変換サービスのインポート ウィザードおよびエクスポート ウィザードを実行します。データ変換サービスのインポート ウィザードおよびエクスポート ウィザードの詳細については、『SQL Server Books Online』の [索引] タブで、「データ変換サービス, 概要」と入力して検索を行ってください。

  • Access プロジェクト (.adp) ファイルと データベース (.mdf) ファイルをユーザーに配布することができます。このとき、データベース (.mdf) ファイルのコピー先と、Access プロジェクト ファイルを開き、[ファイル] メニューの [接続] を使用して、直接データベース ファイルに接続する方法を指示しておきます。この方法については、「 第 2 章 : Microsoft Access 2000 クライアント/サーバー データベースの実行 」の「サンプル アプリケーションをインストールする」で説明しています。

  • ・ MSDE、データベース (.mdf)、およびクライアント アプリケーション (.adp) がすべて同じコンピュータに存在するときに Access プロジェクト アプリケーションを作成すると、データベースのバックアップを使用して、アプリケーションを展開することができます。データベースのバックアップを作成するには、[ツール] メニューの [データベース ユーティリティ] をポイントし、次に [バックアップ] をクリックします。バックアップ ファイルの作成が完了したら、ユーザーに Access プロジェクト ファイル (.adp) のコピーと、このバックアップ ファイル (.dat) を渡します。このとき、MSDE がまだインストールされていない場合はインストール方法、およびバックアップ ファイルからデータベースを復元する方法についての指示も与えます。

    重要   この展開方法は、Access プロジェクト ファイル、MSDE データベース、それに MSDE 自体がすべて同じコンピュータにインストールされている場合のみ有効です。配布するファイルを作成する前に、この構成が行われている必要があります。したがって、配布ファイルを作成する前に、ローカルで MSDE をインストールし、Access プロジェクト ファイルの接続情報で、サーバー名として [(ローカル)] を選択する必要があります。接続情報を設定するには、Access の [ファイル] メニューで [接続] をクリックします。

  • MSDE、データベース (.mdf)、クライアント アプリケーション (.adp) がすべて同じコンピュータに存在するときに Access プロジェクト アプリケーションを作成する場合、ユーザーに対し、.adp ファイルと .mdf ファイルと共に、MSDE がまだインストールされていない場合はインストール方法、および sp_attach_db システム ストアド プロシージャを使用してデータベース ファイルをコピーし、添付する方法について指示します。sp_attach_db システム ストアド プロシージャの詳細については、『SQL Server Books Online』の [索引] タブで、**「sp_attach_db」**と入力して検索を行ってください。

  • Microsoft Office 2000 Developer を使用している場合、ディストリビューション ウィザードを使用して、Access プロジェクト アプリケーションと MSDE を 1 回の操作でインストールするようなプログラムを作成できます。このウィザードを持つ Access クライアント/サーバー アプリケーションの展開については、 www.microsoft.com/SQL/productinfo/ にあるホワイト ペーパー「Creating and Deploying Microsoft Access Solutions with the Microsoft Data Engine (MSDE) (英語)」を参照してください。

  • Northwind Traders サンプル Access プロジェクト (NorthwindCS.adp) では、NorthwindCS.SQL スクリプト ファイルに含まれる Transact-SQL コードを使用して、バック エンド データベースを構築するために、Startup モジュールで VBA コードを使用しています (Startup モジュールは、Startup フォームの OnOpen イベントからの関数の呼び出しを使用して呼び出されます)。次に、データベースがローカルにインストールされた MSDE、または SQL Server にアタッチされます。Startup モジュールの VBA コードでは、Access オブジェクト、ADO オブジェクト、SQL-DMO オブジェクトを組み合わせて、これらの操作が実行されます。このプロセスの仕組みを解説することは、この記事の範囲を超えていますが、VBA や Transact-SQL に精通したユーザーは、このコードを検討するといいでしょう。Northwind サンプル Access プロジェクトのインストールについては、「 第 1 章 : Microsoft Access 2000 クライアント/サーバー開発の理解」の「Northwind Traders サンプル Microsoft Access プロジェクトをインストールする」を参照してください。

要約

この章では、フォームやレポートの構築、および Access 2000 プロジェクトのプログラミング、管理、展開について説明しました。詳細については、『SQL Server Books Online』、および「 Appendix 2: Additional Resources for Working with Microsoft Access 2000 Projects (英語)」にあるリソースの一覧を参照してください。

-----------------------------------------

特に記載していない場合、ここに記載されている会社、製品、人物、キャラクタ、およびデータなどは架空のものです。実在する個人名、会社名、イベント名などとは一切関係ありません。