ActiveX クイック スタート
以下のトピックでは、ActiveX アクセス方法に付属するファイルのディレクトリ構造を示すほか、コントロールを使用するアプリケーションの開発に関わる基本的作業手順について説明します。
(主な作業のリストについては、上記のトピックを参照してください)
ActiveX で使用されるファイルとディレクトリ
ActiveX アクセス方法のファイルとディレクトリを表
2 に示します。この表は、デフォルトの場所にインストールされていることを前提としています。Zen ファイルのデフォルトの保存場所については、『
Getting Started with Zen』の
ファイルはどこにインストールされますか?を参照してください。
アプリケーションの実装に必要なファイルについては、
Zen ActiveX ファイルの配布と登録を参照してください。サンプル ファイルは ActiveX SDK ダウンロードで入手できます。
表 2 ActiveX アクセス方法ファイル
ファイル | 場所 | 説明 |
---|
ACBtr732.ocx | C:\Program Files (x86)\Actian\Zen\bin | Zen データ ソース コントロール |
Acctr732.ocx | C:\Program Files (x86)\Actian\Zen\bin | Zen バウンド コントロール |
*.ddf、*.mkd | C:\ProgramData\Actian\Zen\Demodata | データ辞書ファイル(.DDF)と MicroKernel エンジンのテーブル(.MKD ファイル) |
*.exe | C:\Program Files (x86)\Actian\Zen\bin | Zen 実行可能ファイル |
psql.jar | C:\Program Files (x86)\Actian\Zen\bin | Zen Java アクセス ライブラリ用 JAR ファイル |
ActiveX アクセス方法を使用したアプリケーションの作成
ここでは、ActiveX アクセス方法を使用したアプリケーションの作成に関連する主な作業を行う方法について説明します。作業項目は以下のとおりです。
プロジェクトへの ActiveX アクセス方法の追加
►ActiveX アクセス方法のデータ ソースとバウンド コントロールを Visual Basic プロジェクトに追加するには
1 [プロジェクト]メニューから[コンポーネント]を選択するか、またはツールボックスを右クリックして[コンポーネント]を選択します。
2 コントロール リストをスクロールさせて、"Zen ActiveX Data Source" および "Zen Bound Controls" チェック ボックスをオンにします。
3 [OK]をクリックします。
ツールボックスに青色の Zen ActiveX アイコンが表示されます。
VAccess コントロールの使用
VAccess コントロールはデータをポイントするもので、ほかすべての Zen コントロールがバインドするマスター コントロールです。このコントロールは、Zen とのすべての通信を処理します。
►Visual Basic フォームにデータ ソース コントロールを追加するには
1 Zen ActiveX コントロールを含んでいる Visual Basic のツールボックスをクリックします。
2 VAccess コントロール アイコンをクリックします。
3 フォームにカーソルを置いてドラッグし、コントロールを保持するための四角形を作成します。マウスを離すと、四角形の中に ActiveX アクセス方法が表示されます。このコントロールは、設計時にはアイコンとして表示されますが、実行時には表示されません。
また、Zen の起動画面には、Zen ワークステーション エンジンが起動されたことが表示されます。
4 デフォルトでは、フォームに配置する最初の VAccess コントロールには VAccess1 という名前が付きます。必要であれば、Name プロパティに新しい名前を入力してこの名前を変更できます。
次に、この VAccess コントロールのプロパティを設定する必要があります。
プロパティへのアクセス、
プロパティの設定、および
Zen ファイルへの接続をお読みください。
プロパティへのアクセス
コントロールのプロパティは次の 3 つの場所で設定できます。
•プロパティ ページ ダイアログ ボックス
•Visual Basic のプロパティ ウィンドウ
•Visual Basic コード エディター
プロパティ ページ
コントロールを右クリックし、ショートカット メニューから[
プロパティ]を選択すると、プロパティ ページが表示されます。これは、コントロールの Zen ActiveX プロパティを設定できるタブ付きのダイアログ ボックスです。詳細については、図
2 を参照してください。
図 2 プロパティ ページ ダイアログ ボックス
Visual Basic のプロパティ ウィンドウ
Visual Basic のプロパティ ウィンドウには、Visual Basic に固有のプロパティなど、選択したオブジェクトのすべてのプロパティ セットが表示されます。
図 3 VAccess プロパティを表示するプロパティ ウィンドウ
Visual Basic コード エディター
フォームまたはコントロールをダブルクリックすると、Visual Basic のコード エディターが開きます。コード エディターの使用方法については、Visual Basic ドキュメントを参照してください。各プロパティの構文などの詳細については、本ドキュメントを参照してください。
プロパティの設定
►コントロールのプロパティを設定するには
1 プロパティを設定するコントロールを選択します。
2 プロパティ ページ、Visual Basic プロパティ ウィンドウまたはコード エディターで変更するプロパティを検索します。プロパティへのアクセスについては、
プロパティへのアクセスを参照してください。
3 追加または変更する各プロパティの値を設定するには、テキスト ボックスにその値を入力するか、フィールドをクリックしたときに表示されるドロップダウン リストから値を選択するか、あるいは、値の設定が行えるダイアログ ボックスを呼び出す省略記号をクリックします。
メモ:プロパティには、設計時または実行時に設定できるものと、設計時または実行時にしか設定できないものがあります。
Zen ファイルへの接続
VAccess コントロールには、このコントロールを Zen データ ファイルへ接続するための重要なプロパティとして、DdfPath、TableName、および Location という 3 つのプロパティがあります。これらのプロパティにアクセスする最も簡単な方法は、コントロールを右クリックしてショートカット メニューから[プロパティ]を選択したときに表示されるプロパティ ページからアクセスする方法です。プロパティ ウィンドウからも、これらのプロパティにアクセスできます。
図 4 データに接続するためのプロパティの設定
データに接続するための 3 つの重要なプロパティを以下に示します。
•DdfPath – このプロパティは、VAccess コントロールで使用する DDF(データ辞書ファイル)の位置を決定します。プロパティには、DDF が置かれている有効なドライブとパスが含まれていなければなりません。
•TableName – このプロパティは、DDF のどのテーブル(データ ファイル)が VAccess コントロールで使用されるかを決定します。DdfPath で指定された DDF に含まれている有効なテーブル名に設定する必要があります。メニューからテーブル名を選択できます。
•Location – このプロパティは、どの Zen テーブルが VAccess コントロールで使用されるかを決定します。ファイル用の DDF に含まれるテーブルの場所(Table Location)に対応しています。デフォルトでは、TableName プロパティで指定されたテーブルの Table Location になりますが、必要に応じてテーブルへの代替パスを指定することもできます。
►データを指定するプロパティを設定するには
1 データに接続する VAccess コントロールを選択します。
2 VAccess コントロールの DdfPath を設定します。
3 TableName リストからテーブル名を選択します。このリストには、手順
2 で指定した DDF で使用できるテーブル名が含まれています。
この VAccess コントロールにバインドするバウンド コントロールはすべて、このテーブルを参照します。
4 手順
3 でテーブル名を選択すると、
Location プロパティはそのテーブルを含んでいる .mkd ファイルに変更されます。
データへの接続を完了するには、IndexNumber プロパティをアクセスしたいインデックスに設定します。
メモ:実行時にコードからこれらのプロパティを設定しても、同じ順序が適用されます。
インデックスの選択
VAccess コントロールの IndexNumber プロパティは、レコード取得メソッドを呼び出すときに VAccess コントロールで使用されるインデックスを決定します。このインデックスは、設計時に VAccess コントロールのプロパティ ウィンドウで設定するか、あるいは、実行時にコードで設定できます。
►設計時にインデックス番号を設定するには
プロパティ ウィンドウでは、IndexNumber プロパティのドロップダウン リストから値を選択してプロパティを設定できます。
次のように、プロパティ ページから IndexNumber を設定することもできます。
1 インデックス番号を設定する特定の VAccess コントロールを選択します。
2 右クリックしてプロパティ ページ ダイアログ ボックスを開きます。
3 VAccess1 プロパティ ページ ダイアログ ボックスの[Settings]タブをクリックし、IndexNumber フィールドをクリックします。選択したテーブルに定義されているインデックスのリストが表示されます。
4 インデックス
0-
ID を選択し、[
OK]をクリックします。図
5 に設定を示します。
図 5 IndexNumber プロパティの設定
実行時にインデックス番号を設定する方法として、コードによる方法と VAComboBox コントロールによる方法があります。
►実行時にコードによりインデックス番号を設定するには
1 インデックスを設定する VAccess コントロールをダブルクリックします。コード エディターが呼び出されます。
2 以下の例に倣って、コードを入力します。
VAccess1.IndexNumber = 0 '
►実行時にコンボ ボックスでインデックス番号を設定するには
1 フォームに VAComboBox を配置して選択します。
2 VAccessName プロパティを VAccess コントロールの名前に設定し、VAFieldName プロパティを[Index List]に設定します。VAComboBox にはファイルからインデックスのリストが自動的に設定され、このリストからの選択によって、VAccess コントロールで使用されるインデックスが設定されます。
自動と手動のファイル オープンの設定
VAccess コントロールは AutoOpen プロパティの設定状態に基づいて、2 つの方法のいずれかで Zen データ ファイルを開きます(AutoOpen は設計時のみのプロパティです)。
•AutoOpen が True に設定されている場合、VAccess コントロールは DdfPath、TableName、および Location プロパティの設定に基づいて、実行時にファイルがロードされるとき、そのファイルを自動的に開きます。コントロールは、ファイルがアンロードされるときに自動的にファイルを閉じます。
•AutoOpen が False に設定されている場合、コントロールは Open メソッドが呼び出されるまでファイルを開きません。DdfPath、TableName および Location プロパティはプロパティ ウィンドウで設定するほか、Open の前にコードで設定できます。したがって、同じ VAccess コントロールで異なる時間に異なるファイルを開いたり、ファイルを選択するためにユーザー入力を受け入れることができます。Close メソッドは、開いているデータ ファイルを閉じます。
►AutoOpen プロパティを設定するには
プロパティ ウィンドウで AutoOpen プロパティを設定するには、ドロップダウン リストから True または False を選択します。
次のように、プロパティ ページから AutoOpen を設定することもできます。
1 コントロールを右クリックしてプロパティ ページを呼び出します。
2 [Settings]タブをクリックします。
3 AutoOpen チェック ボックスを選択または選択解除します。チェック ボックスを選択すると、AutoOpen が True に設定されます。チェック ボックスを選択解除すると、AutoOpen が False に設定されます。
例
この例は、AutoOpen が False に設定されている場合に、ファイルを閉じ、別のファイルを開く方法を示したものです。
VAccess1.Close
VAccess1.DdfPath = "file_path\Zen\Demodata\"
VAccess1.TableName = "Student"
VAccess1.Open
データ ソースへのバウンド コントロールのリンク
VAccess コントロールをフォームに追加してプロパティを設定した後、必要なバウンド コントロールを追加し、この VAccess コントロールにバインドすることができます。これにより、それらのバウンド コントロールは VAccess コントロールが指定するデータにリンクされます。特定のバウンド コントロールについては、
ActiveX コントロール リファレンスを参照してください。
►Zen バウンド コントロールのどれかをデータにリンクするには
1 バウンド コントロールの VAccessName プロパティを、既にデータをポイントしている VAccess データ ソース コントロールの名前に設定します。
2 VATextBox や VAOptionButton などのフィールド バウンド コントロールの場合は、VAFieldName プロパティをデータ ソース コントロール内のフィールドのうちの 1 つの名前に設定する必要もあります。
レコードの取得
以下の 3 つの方法でレコードを取得できます。
•VAHScrollBar または VAVScrollBar による方法
•VACommandButton による方法
•コードによる方法
►スクロール バーでレコードを取得するには
1 VAHScrollBar または VAVScrollBar をフォームに追加して選択します。
2 VAccessName プロパティを使用する VAccess コントロールに設定します。
►コマンド ボタンでレコードを取得するには
1 フォームに VACommandButton を追加して選択します。
2 VAccessName プロパティを使用する VAccess コントロールの名前に設定し、VAOperation プロパティを希望の取得オペレーションに設定します。
使用可能な Zen オペレーションの一覧については、
VAOperation を参照してください。
►コードでレコードを取得するには
•表
3 のメソッドのうちの 1 つを使用します。Get メソッドは、
IndexNumber プロパティで指定されたインデックスを使用します。Step メソッドはインデックスを使用しません。
表 3 個々のレコードを取得するためのメソッド
GetDirect | GetLast | StepFirst |
GetEqual | GetLess | StepLast |
GetFirst | GetLessOrEqual | StepNext |
GetGreater | GetNext | StepPrevious |
GetGreaterOrEqual | GetPrevious | |
例
file_path\\\
Stat = VAccess1.GetFirst
While Stat = 0
List1.AddItem VAccess1.FieldValue("Last_Name") _
& " " & VAccess1.FieldValue("First_Name")
Stat = VAccess1.GetNext
Wend
特定のレコードの検索
以下の 2 つの方法で特定のレコードを検索できます。
•バウンド コントロールによる方法
•コードによる方法
►テキスト ボックスで特定のレコードを検索するには
1 フォームに VATextBox を配置します。
2 VATextBox の VASearch プロパティを True に設定します。これにより、テキスト ボックスにテキストが入力されると、一致するレコードを取得するために VAccess コントロールで GetGreaterOrEqual メソッドが実行されるようになります。
►コードで特定のレコードを取得するには
1 VAccess コントロールをダブルクリックします。
2 IndexNumber プロパティを設定して適切なインデックスを選択します。
3 FieldValue メソッドを使用して、検索する値をインデックス フィールドに設定します。複数のフィールドを使用するインデックスの場合は、必ず各フィールドに値を代入してください。
4 次に、表
4 のメソッドのうちの 1 つを実行して目的のレコードを取得します。
表 4 特定のレコードを取得するためのメソッド
GetEqual | キーと一致する最初のレコードを返します。 |
GetGreater | キーより後の次のレコードを返します。 |
GetGreaterOrEqual | キー レコード、またはキーより後のレコードを返します。 |
GetLess | キーより前のレコードを返します。 |
GetLessOrEqual | キー レコード、またはキーより前のレコードを返します。 |
5 IndexNumber プロパティが、検索が行われるフィールドに対応するインデックスに設定されていることを確認してください。
例
VAccess1.FieldValue("last_name") = "Reich"
VAccess1.FieldValue("first_name") = "Steve"
VAccess1.IndexNumber = 1
stat = VAccess1.GetEqual
If stat = 0 Then
MsgBox "レコードが見つかりました。"
Else
MsgBox "ファイルには該当するレコードがありません。"
End If
レコードの追加、更新、および削除
レコードを追加、更新または削除する方法として、以下の 2 つの方法があります。
•VACommandButton による方法
•コードによる方法
►コマンド ボタンでレコードを追加、更新、または削除するには
1 フォームに VACommandButton を配置します。
2 VAccessName プロパティを対応する VAccess コントロールの名前に設定します。
3 VAOperation プロパティを希望のオペレーションに設定します。可能なオペレーションのリストについては、本書の「プロパティ リファレンス」の VAOperation プロパティを参照してください。
►コードでレコードを追加、更新、または削除するには
以下の VAccess コントロール用カスタム メソッドの 1 つを使用し、コードからデータベースへの書き込みを行います。
表 5 レコードを追加、更新および削除するためのカスタム メソッド
Delete | 現在のレコードを削除します。 |
Insert | メモリ内のレコードを新しいレコードとして挿入します。 |
Update | 現在のレコードをメモリ内のレコードで更新します。 |
例
VAccess1.TableName = "Student"
VAccess1.IndexNumber = 1
VAccess1.FieldValue (ID) = 2001100
stat = GetEqual
If stat = 0
VAccess1.FieldValue ("Major") = "Music"
VAccess1.Update
End If
レコードのロック
Zen には、ActiveX アクセス方法でサポートされる次の 2 種類のロックがあります。単一レコード ノーウェイト ロックと複数レコード ノーウェイト ロックです。
ActiveX アクセス方法でこれらのロックを適用するには、以下のアプローチのうちの 1 つを使用します。
•VACommandButton を使用してレコードの取得とロックを行う場合は、VALockBias プロパティを設定します。
•Get または Step メソッドを呼び出すときは、オプション パラメーターとして対応するロック バイアス(単一レコードの場合は 200、複数レコードの場合は 400)を含めます。
レコードをロック解除するには、Unlock メソッドを使用します。
レコード ロックと並行制御の詳しい説明については、『
Zen Programmer's Guide』の
データ整合性を参照してください。
例
Const SINGLE_NOWAIT_LOCK = 200
Const MULTIPLE_NOWAIT_LOCK = 400
VAccess1.FieldValue("ID") = "<valid #>"
stat = VAccess1.GetEqual SINGLE_NOWAIT_LOCK
If stat = 0
VAccess1.FieldValue("Major") = "Astronomy"
VAccess1.Update
End If
ファイルの結合
VAccess コントロールの Join プロパティを使用すると、2 つのファイルをキー値でリンクし、第 1 ファイルのレコード位置におけるあらゆる変更が、第 2 ファイルから取得されるレコードにも反映されるようにすることができます。Join プロパティは、リレーショナル データベースを参照するための簡単なメカニズムを提供します。
スレーブ コントロール内の結合済みフィールドはインデックス フィールドである必要があり、また、マスター コントロール内の対応するフィールドと同じ生データが含まれていなければなりません。マスター コントロール内のフィールドは、インデックスである必要はありません。スレーブ コントロールの IndexNumber プロパティは、結合に関係するインデックスに設定されたままにしておく必要があります。そうしないと、結合が断たれます。
1 対 1、多対 1、1 対多、多対多の結合はすべてサポートされます。VAListBox の VAccessName プロパティをスレーブ コントロールの名前に設定し、VAFieldName プロパティを表示されるフィールドに設定することによって、データをレコード リスト モードで表示できます。
►2 つの VAccess コントロールを結合するには
1 スレーブ コントロールとする VAccess コントロールを選択します。
2 プロパティ ウィンドウで、[Join]ボタンをクリックして[Join Controls]ダイアログ ボックスを開きます。ダイアログ ボックスの左側には、結合元のスレーブ コントロールのテーブルとそのテーブルの選択したインデックスが表示されます。右側には、結合先のマスター コントロールとそのコントロールで使用できるフィールドが表示されます。
3 マスター コントロールをスレーブ コントロールのテーブルに結合するには、マスター コントロールのフィールドをクリックします。そうすると、Equals 列の下にフィールドが表示され、そのフィールドが結合されていることを示します。
Extended オペレーションの有効化
Extended オペレーションを使用すると、複数のレコードに対するリクエストの処理を MicroKernel エンジンにさせることが可能になります。ネットワーク サーバー ベースの Zen システムでは、Extended オペレーションによってネットワーク トラフィックを大幅に削減し、データ取得を高速化することができます。
Extended オペレーションは、複数のレコードを一度に読み取る際に最も有効です。たとえば、統計データを収集して表に記入するためにファイルをスキャンしたり、表、レポートまたはグリッドを作成するために多数のレコードを一度に要求したり、必要なレコードを照合するための適切なインデックスを持たないデータベースに対する一度限りの検索を実行するのに適しています。
Extended オペレーションは個々のレコードにアクセスするためのインデックス付きレコード取得に代わるものではなく、データ セットを高速に取得するための強力なツールになります。
►Extended オペレーションを使用可能にするには
1 Extended オペレーションで使用する VAccess コントロールを選択します。
2 プロパティ ウィンドウを使用している場合は、ExtendedOps プロパティを True に設定します。プロパティ ページを使用している場合は、[Extended Operations]タブをクリックし、[ExtendedOps]チェック ボックスをオンにして、[OK]をクリックします。
ActiveX アクセス方法は以下の Extended Fetch メソッドをサポートします。
•Get Next Extended は、現在のキーの論理位置より後続のレコードのうち、指定されたフィルター条件を満たすレコードを取得します。
•Get Previous Extended は、現在のキーの論理位置より前にあるレコードのうち、指定されたフィルター条件を満たすレコードを取得します。
•Step Next Extended は、ファイル内における物理位置より後続のレコードのうち、指定されたフィルター条件を満たすレコードを取得します。
•Step Previous Extended は、ファイル内における物理位置より前にあるレコードのうち、指定されたフィルター条件を満たすレコードを取得します。
Init メソッドの使用
Init メソッドは、SelectedFields または SelectedRecords プロパティを変更した後、あるいは、単一レコードのフェッチ メソッドを使ってファイル内の現在のカーソル位置を再設定してから Extended Fetch メソッドを呼び出すまでの間に使用します。
AutoMode プロパティによるデータ「スナップショット」の構築
AutoMode を有効にすると、VAccess データ ソースは選択基準を満たす行が取得されるときにそれらをすべてメモリにキャッシュして、データの「スナップショット」を構築できるようにします。Row プロパティを使用して返されたレコード セットを走査したり、RowColumnValue メソッドを使用してレコード セット内の任意の行と列における値を取得することができます。
►AutoMode を使用するには
1 VAccess コントロールの ExtendedOps と AutoMode プロパティを True に設定して、Extended オペレーションを使用可能にし、コントロールを自動モードに切り替えます。
2 コントロールの SelectedFields と SelectedRecords プロパティを設定して、取得するレコード セットを指定します。
3 取得オペレーションごとに取得する最大レコード数を CacheRows プロパティに設定します。
4 ユーザーがスキャンを終了する前にスキャンを取り消せるようにする場合は、CancelDialog プロパティを True に設定します。
AutoMode は環境によっては Extended オペレーションを使いやすくしますが、使用可能メモリの制限を受けます。AutoMode を無効(デフォルト)にして、明示的な Extended Fetch メソッドの GetNextExtended、GetPreviousExtended、StepNextExtended、または StepPreviousExtended を使用すれば、考慮したブロックでデータ セットを返すことができます。
Extended Fetch メソッドの使用
Extended Fetch メソッドの GetNextExtended、GetPreviousExtended、StepNextExtended および StepPreviousExtended はファイル内の現在のカーソルの位置から始まり、指定された選択基準を満たす一連の行(レコード)と列(フィールド)を返します。Get メソッドは、現在のインデックスを使用してインデックス順にレコードを返します。Step メソッドは、物理位置の順序で並べられたレコードを返します。Step メソッドは一般にほかのメソッドより高速なので、返されるレコードの順序が重要でない場合に使用してください。
特定の Extended Fetch オペレーションから返される最大レコード数の設定には、いくつかのプロパティが関与します。
•単一の Extended Fetch オペレーションから返されるデータの総量は、MaxBufferSize プロパティで指定するデータ通信バッファーのサイズによって制限されます。このバッファーは最大 64 KB ですが、Zen MicroKernel データベース エンジンの設定によってはこれより小さくなります。このプロパティに大きすぎる値を指定すると、ステータス コード 97、「データ バッファーが小さすぎます」が返されます。
•SelectedFields プロパティは個々のデータ行のサイズを決定しますが、このサイズは選択されたフィールドの記憶域の長さの合計に 6 バイトを加えた長さです。
•CacheRows パラメーターは、一度に取得する最大行数を指定します。Extended Fetch メソッドは、CacheRows の値か、行のサイズと MaxBufferSize に基づいた計算値のいずれか小さい値を使用します。CacheRows がゼロであれば、計算値が使用されます。
•SelectedRecords プロパティを使用すると、ある基準を満たすレコードだけを取得できます。このプロパティは CacheRejectMax プロパティと結び付いて機能し、検索条件に合わないレコードをスキップします。CacheRejectMax プロパティに値を指定しないと、Zen はシステムで定義された値を使用します。次の 2 つの条件のうちの 1 つが満たされると、レコード セットが返されます。つまり、選択基準を満たす行数が CacheRows プロパティの値に等しくなるか、あるいは、最後の一致を検出して以降にスキャンされたレコード数が CacheRejectMax プロパティの値を超えるという条件です。Status プロパティは、いずれの条件が満たされたかを示します。
•Rows プロパティは、Extended Fetch オペレーションから返された行数を示します。Extended Fetch の後には必ず、このプロパティの値をチェックしてください。オペレーションがゼロ以外のステータス(ファイルの終わりなど)を返しても、有効なデータを返す可能性があるからです。
•Columns プロパティは、SelectedFields プロパティで指定されたフィールド数に対応するか、レコード選択基準を指定しなかった場合は、ファイルに定義されているフィールド数に対応します。
•RowColumnValue メソッドは、Extended Fetch レコード セット内の指定された行および列の位置にあるフィールド値を取得します。
Extended Fetch オペレーション後の現在のカーソル位置は、オペレーションでスキャンされた最後のレコードに対応します。このカーソル位置は、レコード選択基準が指定されているアプリケーションでは不確定です。なぜなら、この位置は実際に取得された最後の行を超えている可能性があるからです。
IncludeCurrent プロパティの設定によって、次の Extended Fetch オペレーションが現在のカーソル位置のレコードをスキャンするか、後続のレコードから開始するかが決まります。ほとんどの場合、このプロパティを設定する必要はありません。このプロパティは自動的に、Init メソッドで True に設定され、Extended Fetch の後に False に設定されます。それ以降の Extended Fetch オペレーションで現在のカーソル位置のレコードを取り込むには、オペレーションの直前にこのプロパティに True を設定します。
結合ファイルに対する ExtendedOps の使用
ExtendedOps プロパティは、典型的な「品目を注文するための注文ヘッダー レコード」などに見られるような、1 対多関係の VAccess データ コントロールの結合を高速化かつ単純化することができます。結合されたデータ ソース(この例では「注文明細行」コントロール)に対して Extended オペレーションを有効にすると、適応するクエリが自動作成され、コントロールは Extended オペレーションを使って結合(Join)を実行し、結合基準に合致する結合ファイルから、すべてのレコードを Extended Fetch のレコード セットとして返します。
Extended Fetch の最適化
Extended Fetch オペレーションを最も効率よく使用するには、まず、検索条件に合う最初のレコードのできるだけ近くにカーソルを置きます。多くの場合、まず GetEqual または GetGreaterOrEqual メソッドをインデックスと併用して、Zen が必要なレコードを返すためにスキャンしなければならないレコードの範囲を制限し、初期位置を確立してから、次に GetNextExtended を使用して後続のレコードを取得できます。
CacheRejectMax プロパティは、SelectedRecords の基準で現在のインデックス上のレコードが制限される場合に有効です。たとえば、CacheRejectMax プロパティの値を 1 に設定すると、Zen サーバー プロセスに対し、基準に合わない最初のレコードを見つけたら停止するよう指示することができます。
ファイル全体をスキャンする必要があってもレコードの順序が重要でない場合は、StepFirst メソッドでファイルの先頭にカーソルを置き、StepNextExtended メソッドでファイルをスキャンすることによって、時間をある程度節約できます。Step メソッドの方が一般に高速なのは、インデックス パスに沿ってレコードを照合する必要がないからです。
SelectedFields プロパティに入手したいフィールドのみを指定することによっても、時間とリソースを節約できます。Extended Fetch オペレーションの制限要因はデータ バッファーのサイズなので、各行に必要なメモリが少ないほど、一度に返せる行が多くなります。
ここで、Extended オペレーションは別のタスク、一般には Zen サーバー プロセスで実行されるため、アプリケーションは拡張クエリを実行するとすぐにプロセスの制御を放棄し、クエリ条件が満たされるまでもう 1 つのプロセスが制御を引き受けるということに留意してください。したがって、拡張クエリを計画し最適化すれば、アプリケーションのパフォーマンスに大きな差が出てくる可能性があります。
例
Q = Chr$(34)
VAccess1.ExtendedOps = True
VAccess1.SelectedRecords = "Scholarship_Amount > " & Q & "0" & Q
VAccess1.SelectedFields = "ID,Scholarship_Amount"
VAccess1.StepFirst
VAccess1.Init
Do
Stat = VAccess1.StepNextExtended
For R = 1 to VAccess1.Rows
List1.AddItem VAccess1.RowColumnValue(R, 1) & Chr$(9) & _
Format(VAccess1.RowColumnValue(R, 2), "Currency")
Next R
Loop While Stat = 0
Zen ActiveX ファイルの配布と登録
Zen アプリケーションの配布については、『
Zen Programmer's Guide』の
Zen アプリケーションの配布を参照してください。
次の表に、ActiveX アクセス方法を使って構築されたアプリケーションの実行に必要なファイルを示します。
表 6 再配布可能なファイル
ファイル | 場所 | 説明 |
---|
ACBTR732.OCX | file_path\Zen\bin | Zen データ ソース コントロール |
ACCTR732.OCX | file_path\Zen\bin | Zen バウンド コントロール |
PEDTCONV.DLL | file_path\Zen\bin | データ変換用 DLL |
PBTRVD32.DLL | file_path\Zen\bin | メタ データ処理用 DLL |
Zen ファイルのデフォルトの保存場所については、『
Getting Started with Zen』の
ファイルはどこにインストールされますか?を参照してください。
Zen ActiveX ファイルと必要な DLL を配布した場合、ActiveX ファイルが正しく機能するように ActiveX ファイルを登録する必要があります。これらのファイルの登録は次の 2 種類の方法で行えます。
•InstallShield などの現行のインストール用ユーティリティの多くは、インストール処理中に ActiveX コントロールを自動的に登録するよう変更することができます(詳細については、お使いになる特定のインストール用ユーティリティのドキュメントを参照してください)。
•再配布可能なファイル Regsvr32.exe をインストールし、インストール処理中またはインストール処理後にこのファイルを実行します。この単純な ActiveX 登録用ユーティリティは、登録する ActiveX の名前をコマンド ライン パラメーターとして受け取ります(たとえば、Regsvr32 C:\MyInstall\Acbtr732.ocx)。
ActiveX アクセス方法に関する追加情報
このドキュメントのほかにも、ActiveX アプリケーションの開発に役立つリソースがあります。
•Actian Web サイトは、Zen 開発者のための多くの種類の情報を提供しています。
•Status Codes and Messages-このガイドでは、データベース コンポーネントを使用しているときに発生する可能性のある各ステータス コードとメッセージについて説明しています。