ActiveX クイック スタート
 
このページをシェアする                  
ActiveX クイック スタート
以下のトピックでは、ActiveX アクセス方法に付属するファイルのディレクトリ構造を示すほか、コントロールを使用するアプリケーションの開発に関わる基本的作業手順について説明します。
ActiveX で使用されるファイルとディレクトリ
ActiveX アクセス方法を使用したアプリケーションの作成
(主な作業のリストについては、上記のトピックを参照してください)
Zen ActiveX ファイルの配布と登録
ActiveX アクセス方法に関する追加情報
ActiveX で使用されるファイルとディレクトリ
ActiveX アクセス方法のファイルとディレクトリを表 2 に示します。この表は、デフォルトの場所にインストールされていることを前提としています。Zen ファイルのデフォルトの保存場所については、『Getting Started with Zen』のファイルはどこにインストールされますか?を参照してください。
アプリケーションの実装に必要なファイルについては、Zen ActiveX ファイルの配布と登録を参照してください。サンプル ファイルは ActiveX SDK ダウンロードで入手できます。
 
表 2 ActiveX アクセス方法ファイル
ファイル
場所
説明
ACBtr732.ocx
file_path\Zen\bin
Zen データ ソース コントロール
Acctr732.ocx
file_path\Zen\bin
Zen バウンド コントロール
*.ddf、*.mkd
ProgramData\Actian\Zen\Demodata
データ辞書ファイル(.DDF)と MicroKernel エンジンのテーブル(.MKD ファイル)
readme_zensdk.htm
file_path\Zen\Docs
リリース ノート情報
*.exe
file_path\Zen\bin
Zen の実行可能ファイル
psql.jar
file_path\Zen\bin
Zen Java アクセス ライブラリ用 JAR ファイル
ActiveX アクセス方法を使用したアプリケーションの作成
ここでは、ActiveX アクセス方法を使用したアプリケーションの作成に関連する主な作業を行う方法について説明します。作業項目は以下のとおりです。
プロジェクトへの ActiveX アクセス方法の追加
VAccess コントロールの使用
プロパティへのアクセス
プロパティの設定
Zen ファイルへの接続
インデックスの選択
自動と手動のファイル オープンの設定
データ ソースへのバウンド コントロールのリンク
レコードの取得
特定のレコードの検索
レコードの追加、更新、および削除
レコードのロック
ファイルの結合
Extended オペレーションの有効化
プロジェクトへの 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 データ ファイルへ接続するための重要なプロパティとして、DdfPathTableName、および 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 インデックス 0ID を選択し、[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 は設計時のみのプロパティです)。
AutoOpenTrue に設定されている場合、VAccess コントロールは DdfPathTableName、および Location プロパティの設定に基づいて、実行時にファイルがロードされるとき、そのファイルを自動的に開きます。コントロールは、ファイルがアンロードされるときに自動的にファイルを閉じます。
AutoOpenFalse に設定されている場合、コントロールは Open メソッドが呼び出されるまでファイルを開きません。DdfPathTableName および Location プロパティはプロパティ ウィンドウで設定するほか、Open の前にコードで設定できます。したがって、同じ VAccess コントロールで異なる時間に異なるファイルを開いたり、ファイルを選択するためにユーザー入力を受け入れることができます。Close メソッドは、開いているデータ ファイルを閉じます。
も参照してください。
AutoOpen プロパティを設定するには
プロパティ ウィンドウで AutoOpen プロパティを設定するには、ドロップダウン リストから True または False を選択します。
次のように、プロパティ ページから AutoOpen を設定することもできます。
1 コントロールを右クリックしてプロパティ ページを呼び出します。
2 Settings]タブをクリックします。
3 AutoOpen チェック ボックスを選択または選択解除します。チェック ボックスを選択すると、AutoOpenTrue に設定されます。チェック ボックスを選択解除すると、AutoOpenFalse に設定されます。
この例は、AutoOpenFalse に設定されている場合に、ファイルを閉じ、別のファイルを開く方法を示したものです。
'現在開いているファイルを閉じる
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
 
 
' 人の名前を表示
' データ辞書情報を設定
   'VAccess1.DdfPath = "file_path\Zen\Demodata\"
'VAccess1.TableName = "Person"
'VAccess1.IndexNumber = 1 (Last_Name + 'First_Name)
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 コントロールの ExtendedOpsAutoMode プロパティを True に設定して、Extended オペレーションを使用可能にし、コントロールを自動モードに切り替えます。
2 コントロールの SelectedFieldsSelectedRecords プロパティを設定して、取得するレコード セットを指定します。
3 取得オペレーションごとに取得する最大レコード数を CacheRows プロパティに設定します。
4 ユーザーがスキャンを終了する前にスキャンを取り消せるようにする場合は、CancelDialog プロパティを True に設定します。
AutoMode は環境によっては Extended オペレーションを使いやすくしますが、使用可能メモリの制限を受けます。AutoMode を無効(デフォルト)にして、明示的な Extended Fetch メソッドの GetNextExtendedGetPreviousExtendedStepNextExtended、または StepPreviousExtended を使用すれば、考慮したブロックでデータ セットを返すことができます。
Extended Fetch メソッドの使用
Extended Fetch メソッドの GetNextExtendedGetPreviousExtendedStepNextExtended および 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 つのプロセスが制御を引き受けるということに留意してください。したがって、拡張クエリを計画し最適化すれば、アプリケーションのパフォーマンスに大きな差が出てくる可能性があります。
' 奨学金を受けているすべての学生の ID を出力
Q = Chr$(34)
' Student ID はインデックスなので、レコードの並べ替えに使用できます。
' しかし、選択条件にはインデックスがありません。したがって、データベース全体を
' スキャンする必要があります。効率を上げるため、Extended オペレーションを使用します。
VAccess1.ExtendedOps = True
' レコード選択条件を指定することにより、Zen がサーバーで
' レコードにフィルターをかけるようにできます。
VAccess1.SelectedRecords = "Scholarship_Amount > " & Q & "0" & Q
' 必要なのは金額と Student ID だけなので、
' この情報を返すだけで、一度により多くのレコードを取得することができます。
VAccess1.SelectedFields = "ID,Scholarship_Amount"
' データの並べ替えは不要なので、Step オペレーションを使用します。
' Step オペレーションは物理位置に基づいているので、
' データベースを最も速く読むことができます。
VAccess1.StepFirst
VAccess1.Init
Do
  Stat = VAccess1.StepNextExtended
  ' 注意:Extended フェッチは、ファイルの終わり(9)のようなステータス値を
  ' 返しても有効なデータを返すことがあります。
   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-このガイドでは、データベース コンポーネントを使用しているときに発生する可能性のある各ステータス コードとメッセージについて説明しています。