Comments
Description
Transcript
PDF版はこちら
Beginning Caché for Caché 5 Most Valuable Business for you Welcome to Caché World! ようこそ Caché の世界へ。 Caché とは何でしょうか? Caché の目指すオブジェクト指向とはどういったものなのでしょうか? Caché の特徴は何といっても,処理速度の速さ です。 Caché はいかなる状況でも高速な処理を実現できるように設計されています。Caché 5 で は大量データの検索を高速に実行する仕組みとして Bitmap インデックス 機能も装備され るようになりました。 また,通常はテーブル(Caché オブジェクト指向技術ではクラス)に設定するインデック スをの数は制限されることがありますが,Caché では自由にいくつでも(といっても,実 用レベルでは 10∼15 個程度まででしょう)設定することができます。さらに,アプリケー ション・システムの運用が開始された後でも,インデックスの追加や再編成を実施するこ とができます。 Caché では,DBMS(データベース管理システム)機能として,オブジェクト指向データ ベース機能,リレーショナル・データベース機能,階層型データベース機能の 3 種類の機 能を合わせ持っています。また各機能がバラバラに(排他的に)機能するのではなく,有 機的に連動しながら機能するという非常にユニークなシステムです。下図は Caché の機能 概念を図に示したものです。 オブジェクト指向アクセス VisualBasic,VBA,Delphi, C++,Java,Caché Object Script オブジェクトアクセスコマンドを Caché Object Script に解析して実行 Caché データベース SQLコマンドを Caché Object Script に解析して実行 Caché Object Script を実行 ダイレクトアクセス SQLアクセス VisualBasic,VBA,Delphi, C++, Caché Object Script ODBC,JDBC, VisualBasic,VBA,Delphi,MS-ACCESS C++,Java,Caché Object Script 0-1 Caché を理解するには,まず使ってみることが一番重要です。 Caché は決して特別なものではありません。 リ レーショナル データベースで利用する SQL コマンドももちろん利用できますし, VisualBasic その他のプログラミング言語からのアクセスも可能です。 本書により Caché に関してご興味を持って頂き,皆様の日常の業務に少しでもお役に立 てれば幸いです。 では,Caché の世界を覗いてみましょう。 お願い: 本書は第 1 章から第 8 章へ順番に内容を確認していただくように構成しています。途中の 章からプログラムを作成しても上手く動作しない可能性があります。ご了承ください。 また本書を作成するために使用した各種ソフトウェアは下記のとおりです。 O/S WindowsXP SP1 日本語版 Caché 5.0.3 Unicode 版 VisualBasic Ver6 日本語版 MS-ACCESS 2002(OfficeXP) IIS 6.0(WindowsXP 添付) 0-2 目次 1 Caché インストール 2 アプリケーション開発の準備 3 郵便番号データの概要 4 データベースの定義 5 データベースの操作 6 VisualBasic プログラムの例 7 MS-ACCESS からの ODBC 接続 0-3 [Memo] 0-4 1 Caché のインストール Caché をコンピュータにインストールしましょう。 Caché を既定値で使用する場合には,順次表示される各画面で[Enter]キーを押下する だけでインストールが完了します。 *Caché 接続用の ODBC ドライバは自動的にインストールされます* Caché のインストールを行うと,Caché ODBC ドライバのインストールも行われますので, ODBC 経由で Caché データベースにアクセスすることができるようになります。 (例えば, MS-ACCESS を使用して Caché データベースの内容を表示したり印刷したりすることがで きます。) *CSP で使用するコンポーネントも自動的にインストールされます* Caché をセットアップするコンピュータ上で Web サーバ(IIS など)が稼働中の場合には, CSP(Caché Server Page )に必要なコンポーネント(プログラム)と CSP を稼働するため の構成情報がインストールされます。Web サーバが稼働中のコンピュータに Caché をイン ストールするだけで CSP の評価をすることが可能です。 以下に具体的な Caché のセットアップ手順を解説しています。 1-1 1.1 インストールの開始 Caché の CD-ROM をコンピュータにセットします。すると自動的に Caché のセットアッ プ画面が表示されます。 自動的に Caché セットアップ画面が表 示されない場合には,エクスプローラを使 用して CD-ROM の中の「Setup.exe」を探 して起動してください。 (Setup.exe のアイ コンをダブル クリックするとセットアッ プ・プログラムが起動されます。) 1-2 1.2 製品ライセンス契約の同意 Caché のライセンス契約に関する条項が表示されますので,内容を理解していただき契約 条項に同意できる場合に[はい]ボタンをクリックして下さい。もし,契約条項に同意で きない場合には[いいえ]をクリックして,Caché のセットアップを中止して下さい。 1-3 1.3 インストレーション名の指定 Caché をインストールする名称(インストレーション名)を指定してください。通常は既 定値として表示されている名称(CACHE)で問題ありません。 1-4 1.4 セットアップ方法の選択 Caché をセットアップする方法を下記の項目から選択します。 選択項目 標準 クライアン ト 内容 インストールするコンピュータを Caché データベース サー バとする場合に「標準」を選択してください。 標準を選択すると,下記の機能がインストールされます。 ・Caché のデータベースサーバ機能 ・Caché のクライアント機能 ・Caché の Web アプリケーション(CSP)機能 ・Caché クライアントからのデータベースアクセス機能 ・ODBC ドライバ等の機能 インストールするコンピュータを Caché クライアントとする 場合に「クライアント」を選択してください。 クライアントを選択すると,VisualBasic,Delphi 等のプログ ラム開発ツールから Caché に接続する機能(Vism.ocx,Caché Object Factory)と ODBC ドライバがインストールされます。 1-5 選択項目 内容 任意の必要とされる機能のみを選択してインストールを実施 する場合に「カスタム」を選択してください。 カスタム Caché の機能についての知識がないと正しく動作しない組み 合わせでインストールしてしまうことも考えられますの で, Caché に関する十分な知識を有している場合に選択してくださ い。 [参照…]ボタンをクリックすると,Caché をインストールするフォルダを指定すること ができます。既定値では,C ドライブ(C:¥CacheSys )に Caché をインストールしますが, ディスク容量不足などの問題を回避するために,インストールするフォルダを変更するこ とができます。(なお,実際のデータベースはここで指定したフォルダ以外の場所に作成す ることができます。) ここで指定するフォルダには,Caché システム一式(約 MB)がインストールされます。 希望するインストールの種類を選択して[次へ]ボタンをクリックします。 1-6 1.5 Unicode サポートの確認 Caché をインストールする場合,8 ビットシステムと Unicode システムを選択することが できます。日本語環境の Windows システムを使用する場合,通常は Unicode システムでの インストールとなりますので,下記の画面は表示されません。 Windows システムのロケール指定が「日本語」以外の場合に,下記の画面が表示されます。 あるいは他の理由で表示されることがあるかもしれません。 特別な場合を除いて Unicode システムの Caché のご利用をお勧めします。 言語サポートの種類を選択して[Next >]をクリックして下さい。 1-7 1.6 インストール内容の確認 これまでの Caché のセットアップ画面で指定された内容の確認を行います。 ボタンの種類 [戻る]ボタン [次へ]ボタン [キャンセル]ボタン 説明 表示されている内容に間違い(あるいは変更)があ る場合に選択します。 Caché のセットアップを実施する場合に選択しま す。 Caché のインストールを中止したい場合に選択し ます。 1-8 1.7 利用ライセンスの登録 Caché のセットアップ プログラムがライセンス キーを確認できなかった場合に, 「ライ センスの入力」画面が表示されます。 初めて Caché をセットアップする場合には, 「ライセンスの入力」画面は必ず表示されま すが,一旦 Caché をセットアップした後に Caché を削除した場合や Caché のアップグレー ドを実施する場合には,ライセンス キーが保持されています。このようにセットアップ プ ログラムがライセンス キー情報を確認できた場合には,「ライセンスの入力」画面は表示 されません。 Caché の利用ライセンスは,すぐに登録することもできますが,Caché のインストールが 完了した後に Caché 構成マネージャを使用して入力することもできます。 ボタンの種類 [はい]ボタン [いいえ]ボタン 説明 Caché ライセンスを入力する場合に選択します。 Caché ライセンスを入力しない場合に選択します。 Caché のセットアップ作業には影響はありません。 以下は「ライセンスの入力」画面で[はい]ボタンをクリックして,ライセンスを入力す る場合の手順です。 ([いいえ]ボタンをクリックした場合には, 「1.8 Web サーバ停止確認」 に進んでください。) 1-9 Caché 利用ライセンスの入力は,利用ライセンス入力用ウィザードの誘導に従って実施し ます。 ボタンの種類 [次へ] ボタン [キャンセル] ボタン 説明 「ライセンス ウィザード − ライセンス情報の設 定」画面に移ります。 Caché ライセンスの入力を中止し,Caché のインスト ールを開始します。 「ライセンス ウィザード − ライセンス情報の設定」画面に入手したライセンスの内容 を入力します。ライセンス情報は,大文字・小文字の区別をしていますので,慎重にライ センス情報を入力して下さい。空白も正しく入力して下さい。 ライセンスの内容を入力したら,[次へ]ボタンをクリックして下さい。 1-10 ボタンの種類 [戻る] ボタン [次へ] ボタン [キャンセル] ボタン 説明 「ライセンス ウィザード − 導入」画面に戻ります。 入力されたライセンス情報が正しい場合に「ライセン ス ウィザード − 完了」画面に移ります。 Caché ライセンスの入力を中止し,Caché のインスト ールを開始します。 「ライセンス ウィザード − ライセンス情報の設定」画面で値を入力すべき項目が未入 力のままで[次へ]ボタンをクリックすると,下記の「Caché 入力エラー」画面が表示さ れます。 「ライセンス ウィザード − ライセンス情報の設定」画面で[次へ]ボタンをクリック した時に入力された値のチェックが行われます。もし入力した内容に不備が確認された場 合には,下記の「Caché 入力エラー」画面が表示されます。 1-11 「ライセンス ウィザード − ライセンス情報の設定」画面で正しいライセンス情報を入 力すると「」画面が表示されます。 画面上の[完了]ボタンをクリックして下さい。 1-12 1.8 Web サーバ停止確認 Caché のセットアップ時に,Web サーバ(IIS;Internet Information Server)が実行中の場合 には,IIS 停止の問い合わせがあります。 [はい] ボタンをクリックすると,Web サーバの停止後セットアップを実施します。 [いいえ]ボタンをクリックすると,そのままセットアップを実施します。。 1-13 1.9 Caché セットアップ時の画面の遷移 以上の要領でセットアップ プログラムの処理を実施すると,下記に示す画面が順次表示 されます。(実際に表示されるすべての画面種類を下記に記載していません。) 次ページへ 1-14 「セットアップの完了」画面の[完了]ボタンをクリックすると,Caché のセットアップ 処理は終了です。 「セットアップの完了」画面の「Caché オンライン ドキュメントを表示しますか」をチ ェック[レ]した状態で[完了]ボタンをクリックすると,下図のドキュメント画面が表 示されます。 1-15 1.10 インストール完了時の注意事項 Caché はセットアップ処理が終了した直後から利用できる状態となっています。 Caché インストール時の既定値として使用可能なネームスペースとして「 USER」と 「Samples」を用意しています。 また,この 2 つのネームスペースに対して接続可能な ODBC データソース(システム DNS) が用意されます。 Caché をセットアップした後で ODBC 接続のテストを実施する場合(MS-ACCESS 等を使 用することができます)には,ODBC データソースのシステム DSN「CACHE:Samples」を 使用し,リンクするテーブルとして「Cinema.Film」を指定して下さい。 正常に MS-ACCESS が ODBC 経由で Caché に接続できるとテーブル一覧に「Cinema_Film」 が追加されます。テーブルに含まれるデータやテーブルのデザインを確認することができ ます。 Caché のインストールが正常に終了したかどうかは,コンピュータのタ スクバー(通常,画面の最下位上に表示されるバー)に Caché キューブ が追加されたことで確認できます。 Caché キューブの色により Caché が起動されている状態か,あるいは Caché が停止して いる状態かを確認することができます。 Caché 起動中状態の場合 Caché キューブは, 青色表示です。 Caché 停止中状態の場合 Caché キューブは, 灰色表示です。 1-16 1.11 Caché メニュについて Caché キューブをクリックすることにより, Caché メニュを表示することができます。 メニュ項目 始めに Cache の開始 Cache の停止 スタジオ ターミナル エクスプローラ SQL マネージャ 内容 Caché を使い場合に参考になる情報を参照することができま す。 Caché を起動します。 Caché が起動中の場合には,灰色表示となり選択できません。 Caché を停止します。 Caché が停止中の場合には,灰色表示となり選択できません。 Caché スタジオを起動します。 Caché スタジオでは下記の処理を実施することができます。 ・クラスの定義 ・クラス定義情報のインポート/エクスポート ・ルーチンの作成 ・ルーチンのインポート/エクスポート ・ルーチンのデバッグ ・CSP ファイルの作成・メンテナンス クラスのメソッド・クエリの実行テスト,Caché Object Script プログラムの実行テストをすることができます。 Caché データベースの内容を参照・更新することができます。 Caché システムで管理されているデータベース定義情報,デ ータベース管理情報,Caché ObjectScript プログラム情報を一覧 表示することができる専用のユーティリティを起動します。 Caché に SQL コマンドでアクセスするユーティリティです。 CSV データをテーブルに格納する機能や,テーブルのデータ を CSV ファイルに出力する機能があります。 インデックスの再構築はこの SQL マネージャで実施できま す。 外部データベースへのリンク指定を行うことができます。 1-17 メニュ項目 内容 コントロールパネ Caché の稼働状況に関する各種情報を表示する専用のユーテ ル ィリティを起動します。 構成マネージャ Caché の実行に関する各種パラメータを設定・変更すること ができるユーティリティを起動します。 ドキュメント Caché の提供する各種ドキュメントを確認することができま す。 リモートシステム Caché クライアントサーバシステムの場合に,クライアント アクセス から Caché サーバに接続して利用することができるユーティ リティのメニュを表示します。 優先接続サーバ Caché クライアントサーバシステムの場合に,クライアント が優先して接続する Caché サーバを指定します。 Caché バージョン Caché のバージョン情報を表示します。 情報 終了 Caché キューブを終了し,タスクバーから Caché キューブを 消去します。なお,Caché キューブがタスクトレイから消去さ れても Cach データベースサーバの動作が終了するわけではあ りません。Caché は「Caché の停止」を実施するまで稼動状態 を維持します。 1-18 1.12 Caché の起動方法 Caché をインストールすると,タスクトレイに Caché キューブが表示されます。 Caché が起動されていない場合には,Caché キューブは灰色で表示されています。 Caché キューブが灰色の状態の時に,Caché キューブを クリックすると,メニュが表示されます。 Caché を起動するには,メニュ項目の「Caché の開始」をクリックします。 Caché メニュの中で,項目名が黒色で表示されている項目は,その時点で選択(起動)す ることができる項目であることを示します。逆に,項目名が灰色で表示されている項目は, その時点で選択(起動)することができない項目であることを表します。 この例では, 「Caché の開始(S) [CACHE]」は選択できる項目ですが, 「Caché の停止(O)」 は選択できない項目であることを表しています。(Caché の停止は,Caché が稼動中でなけ れば選択できません。) Caché が正常に起動すると,Caché キューブが青色に変わります。 1-19 Caché が起動されたら,Caché キューブをクリックして みてください。右図では,「Caché の開始」は非表示項目 となりました。これは現時点において Caché メニュでは 指定できない項目であることを示しています。 Caché を使いこなしてゆくためには,右図で表示されて いるメニュ項目をすべて使いこなせるようになる必要が あります。 しかし本書では「Caché を使えるようになること」を目 指していますので,詳細な各メニュ項目の説明は行いませ ん。 以 下にサンプルプログラムを作成していく過程で必要 に応じて解説を記載しています。 1-20 1.13 Caché の終了方法 Caché メニュから「Caché の停止」を起動すると, Caché シャットダウン・ダイアログが表示されます。 処理方法を選択して[OK]ボタンをクリックします。 [オプション>>]ボタンをクリックすると,シャットダウンまでの時間やシャットダウン メッセージの送信区分,送信する場合のメッセージを指定することができます。 Caché が正常に停止すると,Caché キューブは灰色表示となります。 1-21 1.14 アン・インストールの方法 Caché が動作中の場合には,Caché キューブは青色表示されています。 このような場合には Caché の停止を実行する必要が あります。 Caché キューブをクリックして[Caché の停止]を選 択します。 「Caché シャットダウン − CACHE」画面が表示されますので,「シャット ダウン」を 選択し,[OK]ボタンをクリックして下さい。 画面上に Caché 停止中のメッセージが表示されます。このメッセージは Caché の停止処理 が終了すると自動的に消去されます。 1-22 続いて,Windows のタスク トレイに表示されている Caché キューブを消去します。 Caché キューブをクリックして[終了]を選択します。 次に Windows の[スタート]ボタンをクリッ クしてメニュを開き[コントロール パネル] を選択します。 1-23 「コントロール パネル」画面が表示されたら, [プログラミングの追加と削除]アイコン をダブル クリックします。 「プログラミングの追加と削除」画面が表示されたら[Cache in C:¥CacheSys]を探しま す。この項目の[変更と削除]ボタンをクリックします。 (この項目には Caché をセットア ップしたときのフォルダ情報が含まれていますので,ご利用の環境によって表示される内 容が異なる場合があります。) 1-24 この時,Caché キューブが Windows のタスク トレイに表示されていると下記のメッセー ジが表示されます。Caché キューブを終了してからプログラムの削除を実施してください。 「ファイル削除の確認」画面が表示されます。 Caché を削除して良い場合には[はい]ボタンをクリックします。 もし,Caché 削除処理を中止したい場合には,[いいえ]ボタンをクリックします。 1-25 「共有ファイルを削除しますか?」画面が表示されます。 Caché が利用している共有ファイルを削除して良いかの問い合わせがされます。本書では, すべての共有ファイルを削除するように指定していますが,ご利用の環境によって削除し て良い場合と,削除してはいけない場合があると思われますので,システム管理者と相談 してボタンを選択してください。 上記の画面と同様に,システム管理者と相談してボタンを選択してください。 1-26 指定された内容に従って Caché の削除処理が実行されました。下記のように「コンピュー タからプログラムを削除」画面が表示されたら,正常に Caché が削除されています。 画面上の内容を確認後, [OK]ボタンをクリックします。 なお,Caché を削除した場合でも,Caché をセットアップしたフォルダ(本書では, C:¥CacheSys)には Caché の利用したプログラムやデータがそのまま残されています。 下記の画面のメッセージのように,コンピュータを再起動して Caché をセットアップした フォルダを削除することをおすすめします。 画面上の内容を確認後, [OK]ボタンをクリックして下さい。 1-27 [Memo] 1-28 2 アプリケーション開発の準備 Caché をインストールした直後に利用できるデータベース(ネームスペース)として 「USER」が定義されています。本書で作成する郵便番号データベースをこの USER に定義 することができます。 本書では一連のデータベース作成手順を確認することを目的として,新規にデータベース (ネームスペース)を追加してみましょう。 ネームスペースとは・・ Caché はマルチユーザ・サポートシステムであり,各ユーザ(利用者)単位に全く異なる アプリケーションの実行を可能としています。その時,各ユーザはネームスペースという 論理的な単位を指定してアプリケーションの実行とデータベースへのアクセスを行います。 ユーザ A がネームスペース USER を指定し,ユーザ B がネームスペース TEST を指定し たとします。このように異なるネームスペースを指定することにより,実際のアクセス対 象データを制限することができます。このようにしてアプリケーションの処理に関与しな いデータを参照・更新できない仕組みを作ることが可能です。 例えば,ある建物の中に部門単位のオフィスがあるとします。ユーザ(従業員)は,建物 に入ることはできても,自分が関与しない部門のオフィスへは立ち入りができないような ものです。この部門オフィスに相当するのがネームスペースと考えることができます。 ネームスペースとデータベースの関係は・・ ネームスペースは実際の処理実行単位を制御する単位であることを解説しました。では, Caché にとってデータベースとは何を示すものでしょうか? データベースは,アプリケーション・システムによって維持管理されるデータの単位です。 ただし,Caché の場合には 2 つの特徴があります。 1つは,ネームスペースは複数のデータベースを取りまとめて 1 つのデータベースとして 管理することができます。これは,管理するデータが膨大になる場合に,データベースを 分割して管理することを可能とします。 Caché では,1つのネームスペースに対して複数のデータベースを管理対象とすることを マッピングという方法で管理することができます。 もう1つは,Caché のスクリプト(Caché Object Script)もデータベースに格納されるとい うことです。つまり1つのネームスペースにはデータ管理用のデータベースと,スクリプ ト管理用のデータベースが存在することになります。データ管理用のデータベースと,ス クリプト管理用のデータベースは同じものであっても問題ありません。 Caché の初期値はデータと Caché Object Script を同じデータベースで管理するように設定 されています。 2-1 2.1 開発環境の整備 Caché で新しくデータベースを構築したりアプリケーションを開発する環境を整備しま しょう。 開発環境を整備する手順は下記の通りです。 (1) ネームスペースの追加 (2) データベースの追加 以下にそれぞれの手順の詳細について解説しています。 2-2 2.1.1 ネームスペースの追加 Caché キューブをクリックして Caché メニュを表示しま す。 Caché メニュから「構成マネージャ」をクリックし, Caché 構成マネージャを起動します。 構成マネージャが起動されると,下記の画面が表示されます。 2-3 Caché 構成マネージャ「一般」タブの項目についての解説。 データベースキャッシュ用メモリについて データベースキャッシュ用メモリ(MB)には,Caché がデータベースを操作するための メモリ容量を指定します。 この値は,最大で 2040MB(約 2GB)まで指定可能です。 この値を大きくすることで,Caché のレスポンスを向上させることが可能です。ただし, Caché が稼動するコンピュータの実装メモリ量(O/S が利用する部分を除いて)を超えるよ うな値を設定すると,O/S がスワッピングを起こすために Caché のレスポンスは逆に遅くな る可能性があります。 ルーチンキャッシュ用メモリについて ルーチンキャッシュ用メモリ(MB)には,Caché がプログラム(クラス・メソッド,ク ラス・クエリ,SQL コマンド,Caché Object Script )を処理するために使用するメモリ容量 を指定します。 この値は,最大で 2040MB(約 2GB)まで指定可能です。 この値を設定する場合の注意点は,データベースキャッシュ用メモリの場合と同じです。 Caché を自動的に起動する方法について Caché が稼動する O/S が WindowsNT,Windows2000,WindowsXP の場合,O/S の起動時に Caché を自動的に開始することができます。O/S 起動時に Caché を開始したい場合には, 「シ ステムブート時に Caché を開始する」をチェック[レ]します。この指定をすると,O/S の サービスとして Caché の自動起動が設定されます。 2-4 ネームスペースを追加するために,Caché 構成マネージャ画面の「ネームスペース」タグ をクリックします。 [追加]ボタンをクリックしてネームスペースの追加を行います。 ネームスペース欄に「YUBIN」と入力して[次へ]ボタンをクリックします。 2-5 「ネームスペース ウィザード − ネームスペース名の設定」画面に, 「このネームスペー スで CSP を有効にする」という項目があります。 CSP とは,Caché で提供されている WEB アプリケーション開発・実行環境です。追加す るネームスペースを CSP で利用できるようにしておくと,CSP を利用した WEB アプリケ ーションの開発を実施するときに CSP アプリケーションの構成情報を設定する手順を省く ことができます。 (もちろん,CSP 開発時に手動で CSP アプリケーションの構成情報を設定 することが可能です。) 特別な問題がなければ, 「このネームスペースで CSP を有効にする」という項目をチェッ ク[レ]しておくことをお勧めします。 ネームスペース「YUBIN」は,新規にデータベースを定義(作成)して利用しますので, [新規データベースの定義]ボタンをクリックします。 もし,すでに定義されているデータベースを新規に作成するネームスペースで利用する場 合には,画面上に表示されている「現在定義されているデータベース」一覧表から選択し て[次へ]ボタンをクリックして下さい。 2-6 2.1.2 データベースの追加 データベースの追加画面は,Caché 構成マネージャ画面の「データベース」タブで[追加] ボタンをクリックした時にも利用されます。 データベース欄に「YUBINDB」と入力してください。 「データベースがリモートの場合にチェック」は空欄のままとします。 画面上で設定した値を確認後,[次へ]ボタンをクリックしてください。 ※ Caché データベースについての補足説明 ※ Caché のデータベースは,CACHE.DAT という名前のファイルです。この CACHE.DAT という名前は Caché 内部で固定されていて変更することができません。 Caché が複数のデータベースを取り扱う場合に,CACHE.DAT を複数作成して管理する必 要があります。このような場合に対応するために,Caché ではデータベースの指定をする場 合に,CACHE.DAT の格納されているフォルダ名までを指定する約束となっています。 例えば,Caché をセットアップした時に自動的に作成されるネームスペース User,Samples で使用されるデータベースは,それぞれ下記のフォルダに格納されています。(既定値でセ ットアップを実施した場合。) ネームスペース User C:¥CacheSys¥Mgr¥User ネームスペース Sampels C:¥CacheSys¥Mgr¥Samples 2-7 「データベース ウィザード − ローカルディレクトリの選択」画面では,「データベース ウィザード − データベース名の設定」画面で指定したデータベースを作成する場所を指 定する必要があります。 この画面でデータベースを作成する場所を選択することができます。 また,新規にデータベースを作成する場所を指定することができます。 作成するデータベース「YUBINDB」を,利用するコンピュータのどこに作成するかを指 定します。今回は C ドライブの YUBIN とします。ディレクトリ選択入力欄で「c:¥YUBIN」 と入力して下さい。(大文字小文字はどちらでもかまいません。) 画面上で設定した内容を確認後,[次へ]ボタンをクリックして下さい。 「ディレクトリ選択」欄で指定されたフォルダがコンピュータ内に存在しない場合には, 下記の確認画面が表示されます。 指定したフォルダを作成する場合には, [はい]ボタンをクリックして,次の画面 に進んで下さい。 フォルダ指定を変更する場合には, [いいえ]ボタンをクリックして前の画面 に戻って下さい。 2-8 データベースの選択を実施すると, 「データベース ウィザード − 完了!」画面が表示さ れます。 「データベース ウィザード − 完了!」画面の項目について下記の表に記載しています。 項目 規定の照合順 ブロック サイ ズ 初期サイズ 説明 「Caché Standard」(既定値)を選択して下さい。 Caché 5 で新規にデータベースを作成する場合には,8KB (既定値)を選択して下さい。 Caché 4 以前のバージョンで作成したデータベースを Caché 5 で利用したい場合には,2KB を選択して下さい。 ※ 8KB モードの方がパフォーマンスは良いです ※ ある程度のデータベースの大きさを最初から確保したい 場合には,適切な容量を設定して下さい。 Caché はデータベース領域が不足すると,自動的にデータ ベースの拡張を実施します。従って,初期の大きさについて あまり神経質になる必要はありません。 ブロック サイズに 8KB を選択した場合,1つのデータベ ースの最大容量は,32TB です。 画面上の設定内容を確認後,[完了]ボタンをクリックして下さい。 2-9 データベース ウィザードで指定された内容でデータベースの設定(新規作成)が完了す ると,「ネームスペース ウィザード − 完了」画面が表示されます。 作成するデータベースの容量が小さい場合には,すぐに下記の画面が表示されます。 大きなデータベースを作成する場合には,「Caché − ジョブ ステータス」画面が表示さ れます。 画面の内容を確認後,[完了]ボタンをクリックして下さい。 2-10 「データベース ウィザード − 完了!」画面で指定した「初期サイズ」の値が大きい場 合には,「Caché − ジョブ ステータス」画面が表示されます。 この「Caché − ジョブ ステータス」画面では,指定された容量のデータベース作成の進 捗状況を利用者に通知します。 画面右下にある[止める]ボタンをクリックすると,データベースの作成を中止します。 データベースの作成が完了すると,画面上に「Job Completed …」というメッセージが表 示されます。 このメッセージを確認後,この画面を閉じて下さい。 [×]ボタンをクリックして下さい。 2-11 ネームスペースの追加(データベースの追加)が正常に終了すると, 「Caché 構成マネー ジャ画面」に戻ります。 この時点では,今回追加したネームスペース「YUBIN」はまだ利用できる状態になって いません。ネームスペース タブの YUBIN の左横のキューブが灰色表示されています。 「Caché 構成マネージャ画面」の[OK]ボタンをクリックして下さい。 「構成マネージャの終了」画面が表示されます。 今回登録した内容を Caché に反映させるために, [有効に]ボタンをクリックして下さい。 ※ 注意事項 ※ 「構成マネージャの終了」画面では,ボタンの既定値が[終了]ボタンになっています。 画面上のどちらかのボタンをクリックするではなく,[Enter]キーを押下すると,[終了] ボタンがクリックされたことになり,設定した内容が Caché に反映されません。 このような場合には,Caché の再起動を行うことで変更した内容が反映されます。 2-12 追加したネームスペースが有効になったかどうかを確認するために,もう一度 Caché 構成 マネージャを起動して下さい。 ネームスペース タブを表示した時に,「YUBIN」の左横のキューブが青色で表示されて いればネームスペースが有効になっています。 「YUBIN」の左横のキューブが青色で表示されていない(灰色で表示されている)場合 には下記の内容について確認して下さい。 (1) ネームスペース YUBIN で指定したデータベースの格納位置に問題はないか? (2) ネームスペース YUBIN で使用するデータベース(CACHE.DAT)が書き込み禁止 になっていないか? (3) その他,ネームスペース追加時の設定を誤っていないか? 2-13 [Memo] 2-14 3. 郵便番号データの概要 本書では,ある程度のデータ容量があり,また公共性のあるデータを利用して Caché の 技術を習得して頂こうと考えています。 そこで,日本郵政公社が一般公開している郵便番号データを利用して,郵便番号データベ ースの作成を行います。 また,作成した郵便番号データベースに対して VisualBasic などのプログラム言語からデ ータベースにアクセスする方法について解説をしています。 3-1 郵便番号データの概要 3.1 本書で使用する郵便番号データは,日本郵政公社がホームページ上で公開しているデータ を使用します。日本郵政公社のホームページでは,全国の都道府県別郵便番号データと全 国一括郵便番号データが提供されています。(これらのデータは本書に添付されている CD-ROM に格納されています。) なお,郵便番号データは随時更新されているようですので,必要に応じて日本郵政公社の ホームページにて更新状況を確認して下さい。 日本郵政公社のホームページ … http://www.post.japanpost.jp/zipcode/download.html 郵便番号データのレコードレイアウト No. 1 項目 説明 全国地方公共団体コード JIS X0201,5 桁 半角数字 2 現郵便番号(5 桁) 半角数字 3 新郵便番号(7 桁) 半角数字 4 都道府県名 半角カタカナ(コード順に掲載) (注 1) 5 市区町村名 半角カタカナ(コード順に掲載) (注 1) 6 町域名 半角カタカナ(五十音順に掲載) (注 1) 7 都道府県名 漢字(コード順に掲載) (注 1,2) 8 市区町村名 漢字(コード順に掲載) (注 1,2) 9 町域名 漢字(五十音順に掲載) (注 1,2) 10 一町域が二以上の新郵便番号 「1」は該当,「0」は該当せず で表される場合の表示 11 小字毎に番地が起番されてい 「1」は該当,「0」は該当せず る町域の表示 12 (注 3) (注 4) 丁目を有する町域の場合の表 「1」は該当,「0」は該当せず 示 13 一つの新郵便番号で二以上の 「1」は該当,「0」は該当せず 町域を表す場合の表示 14 更新の表示 15 変更理由 (注 6) (注 5) 「0」は変更なし,「1」新規追加,「2」変更 「0」は変更なし 「1」市政・区政・町政・分区・政令指定都市施行 「2」住居表示の実施 「3」区画整理 「4」郵便区調整,集配局新設 3-2 No. 項目 説明 「5」訂正 「6」廃止(廃止データのみ使用) 注 1 文字コードには,MS 漢字コード(SHIFT JIS)を使用しています。 注 2 文字セットとして,JIS X0208-1983 を使用し,規定されていない文字はひらがなで表記しています。 注 3 「一町域が二以上の新郵便番号で表される場合の表示」とは,町域のみでは新郵便番号が特定できず, 丁目,番地,小字などにより番号が異なる町域のことです。 注 4 「小字毎に番地が起番されている町域の表示」とは,新郵便番号を設定した町域(大字)で,複数の小 字を有し,小字毎に番地が起番されていることにより,異なる小字に同一番地が付定されている場 合があり,町域(新郵便番号)と番地だけでは住所が特定できない町域のことです。 No.11.の例 <小字に同一番地が存在する住所 ○○市△△町が新郵便番号の表す範囲であり,町域(新郵便番 > 号)と番地だけでは住所が特定できません ○○市△△町字 A100 番地 ○○市△△町字 B100 番地 ○○市△△町字 C100 番地 注 5 「一つの新郵便番号で二以上の町域を表す場合の表示」とは,一つの新郵便番号で複数の町域をまと めて表しており,新郵便番号と番地だけでは住所が特定できないことを示すものです。 3-3 3.2 郵便番号データファイル一覧 添付 CD-ROM に格納されているファイルの内容は下記の通りです。 ファイル名 内容 KEN_ALL.CSV 全国一括のデータファイル 01HOKKAI.CSV 北海道版新郵便番号データ 02AOMORI.CSV 青森県版新郵便番号データ 03IWATE.CSV 岩手県版新郵便番号データ 04MIYAGI.CSV 宮城県版新郵便番号データ 05AKITA.CSV 秋田県版新郵便番号データ 06YAMAGA.CSV 山形県版新郵便番号データ 07FUKUSH.CSV 福島県版新郵便番号データ 08IBARAK.CSV 茨城県版新郵便番号データ 09TOCHIG.CSV 栃木県版新郵便番号データ 10GUMMA.CSV 群馬県版新郵便番号データ 11SAITAM.CSV 埼玉県版新郵便番号データ 12CHIBA.CSV 千葉県版新郵便番号データ 13TOKYO.CSV 東京都版新郵便番号データ 14KANAGA.CSV 神奈川県版新郵便番号データ 15NIIGAT.CSV 新潟県版新郵便番号データ 16TOYAMA.CSV 富山県版新郵便番号データ 17ISHIKA.CSV 石川県版新郵便番号データ 18FUKUI.CSV 福井県版新郵便番号データ 19YAMANA.CSV 山梨県版新郵便番号データ 20NAGANO.CSV 長野県版新郵便番号データ 21GIFU.CSV 岐阜県版新郵便番号データ 22SHIZUO.CSV 静岡県版新郵便番号データ 23AICHI.CSV 愛知県版新郵便番号データ 24MIE.CSV 三重県版新郵便番号データ 25SHIGA.CSV 滋賀県版新郵便番号データ 26KYOUTO.CSV 京都府版新郵便番号データ 27OSAKA.CSV 大阪府版新郵便番号データ 28HYOGO.CSV 兵庫県版新郵便番号データ 29NARA.CSV 奈良県版新郵便番号データ 30WAKAYA.CSV 和歌山県版新郵便番号データ 3-4 ファイル名 内容 31TOTTOR.CSV 鳥取県版新郵便番号データ 32SHIMAN.CSV 島根県版新郵便番号データ 33OKAYAM.CSV 岡山県版新郵便番号データ 34HIROSH.CSV 広島県版新郵便番号データ 35YAMAGU.CSV 山口県版新郵便番号データ 36TOKUSH.CSV 徳島県版新郵便番号データ 37KAGAWA.CSV 香川県版新郵便番号データ 38EHIME.CSV 愛媛県版新郵便番号データ 39KOCHI.CSV 高知県版新郵便番号データ 40FUKUOK.CSV 福岡県版新郵便番号データ 41SAGA.CSV 佐賀県版新郵便番号データ 42NAGASA.CSV 長崎県版新郵便番号データ 43KUMAMO.CSV 熊本県版新郵便番号データ 44OITA.CSV 大分県版新郵便番号データ 45MIYAZA.CSV 宮崎県版新郵便番号データ 46KAGOSH.CSV 鹿児島県版新郵便番号データ 47OKINAW.CSV 沖縄県版新郵便番号データ 3-5 3.3 郵便番号データベースのクラス定義内容 郵便番号データベースを定義する際の項目名,備考,属性は次の通りとします。 Caché では,クラス名に日本語(漢字)を利用できるようになりました。しかし,クラス に対応するグローバル変数名が日本語(漢字)をサポートしていないために,内部コード のグローバル変数名に変換されてしまいます。 クラス名,プロパティ名,メソッド名,クエリ名はアルファベット(英数文字)で命名さ れることをお勧めしています。 クラス定義に関する内容 クラス名 User.ZIPTBL クラスの説明 郵便番号データベース クラスタイプ Persistant(永続オブジェクト) プロパティ定義に関する内容 プロパティ名 プロパティの説明 属性 1 JisCode 全国地方公共団体コード %String 2 Zip5 現郵便番号(5 桁) %String 3 Zip7 新郵便番号(7 桁) %String 4 PrefKN 都道府県名(カナ) %String 5 CityKN 市区町村名(カナ) %String 6 TownKN 町域名(カナ) %String 7 PrefKG 都道府県名(漢字) %String 8 CityKG 市区町村名(漢字) %String 9 TownKG 町域名(漢字) %String 10 Code1 一町 域が二以上の新郵便番号で %Integer No. 表される場合の表示 11 Code2 小字 毎に番地が起番されている %Integer 町域の表示 12 Code3 丁目を有する町域の場合の表示 13 Code4 一つ の新郵便番号で二以上の町 %Integer %Integer 域を表す場合の表示 14 Code5 更新の表示 %Integer 15 Code6 変更理由 %Integer 16 AddDate データを登録した日付 %Date 3-6 備考 4. データベースの定義 Caché スタジオを使用して郵便番号データベースのクラス定義,プロパティ定義を行いま しょう。 ※ 参考 ※ 本書では,Caché スタジオを使用してオブジェクト指向でのクラス定義を実施します。 Caché では,クラスとして定義した内容は,特別な操作をすることなくテーブルとして利 用することができます。 逆に,Caché に対してテーブルの定義をした場合には,特別な操作をすることなくクラス として利用することができます。 本書に記載されている Caché スタジオを使用する手順以外にも,Caché に対して SQL コ マンド(Create Table コマンド)を実行することでテーブルが作成されます。(同時にクラ スとしても利用できます。) Create Table コマンドは,各種ツールから ODBC 経由で実行することができます。また, Caché SQL マネージャの「クエリの実行」画面でも Create Table コマンドを実行することが できます。 4-1 4.1 Caché スタジオの起動 Caché スタジオを起動しましょう。 Caché キューブをクリックして Caché メニュを表示し て「スタジオ」をクリックします。 ※ Caché が停止中の場合 ※ Caché キューブが灰色の場合には,Caché キューブをクリックしてください。Caché キュ ーブをクリックして表示されるメニュの「Caché の開始」を選択すると Caché が起動します。 ※ Caché がタスク トレイに表示されていない場合 ※ もし , Caché キュ ーブが コンピュータのタスク トレイに表 示されて いな い 場合には, Windows スタートボタンをクリックし「すべてのプログラム」の中の「Caché」を選択し, 「Caché 」→「Caché の起動」を選択して起動してください。 Caché の起動が確認できたら,Caché スタジオを起動しましょう。 ※ Caché スタジオに関する詳細な情報 ※ Caché スタジオには非常に多くの機能があります。本書では Caché スタジオの機能のす べてについて詳細な解説はしていません。 Caché をインストールすると,オンライン ドキュメントを利用することができます。下 記のアドレスをブラウザで入力することで Caché スタジオに関する詳細な情報を確認する ことができます。(Caché がセットアップされていれば,Web サーバは必要ありません。) http://127.0.0.1:1972/csp/docbook/DocBook.UI.Page.cls?KEY=GSTD または,「Caché キューブ」→「ドキュメント」→「Caché ツールとユーティリティ」→ 「Caché スタジオの利用法」を選択することで Caché スタジオに関する詳細な情報を確認 できます。 4-2 4.2 ネームスペース YUBIN への接続 Caché スタジオを起動すると下記の画面が表示されます。 Caché スタジオ画面のタイトルには「Caché スタジオ − LOCALTCP/USER」と表示され ています。これは,Caché スタジオが動作しているコンピュータ上の Caché(LOCALTCP) のネームスペース「USER」に接続されている状態である,ということを意味しています。 本書では,新しく設定したネームスペース 「 YUBIN 」 に 対 し て 郵 便 番 号 デ ー タ ベ ー ス (User.ZIPTBL)を作成します。 そこで,接続先をネームスペース「YUBIN」に変 更する必要があります。 メニュから「ファイル」→「ネームスペース変更」 を選択します。 4-3 「Caché 接続マネージャ」画面が表示されます。 「Caché 接続マネージャ」画面上の項目に関する解説は下記のとおりです。 項目 サーバ接続 ネームスペース ユーザ名 パスワード 値 LOCALTCP(127.0.0.1) YUBIN _system(既定値) (空白) 画面上で指定した値を確認後,[OK]ボタンをクリックします。 ※ 補足 ※ Caché スタジオが接続すべき Caché が「サーバ接続」リストに無い場合には, [新規]ボ タンをクリックして接続先情報を追加します。 (次ページの「接続プロパティ」画面を参照。) 同様に,「サーバ接続」リストに表示されている接続先情報を変更したい場合には,対象 となる項目を選択し[編集]ボタンをクリックして接続先情報を変更します。(次ページの 「接続プロパティ」画面を参照。既に設定されている情報が表示されます。) 4-4 ・[新規]ボタンをクリックした場合の「接続プロパティ」画面 ・[編集]ボタンをクリックした場合の「接続プロパティ」画面 「接続プロパティ」画面の項目に関する解説は下記のとおりです。 項目 接続先名 サーバ ポート Telnet ポート 解説 サーバ接続先リストに表示される値に利用されます。 接続対象となる Caché サーバの IP アドレス,または DNS で確認できるコンピュータ名を指定することができます。 1972(既定値) この値を変更する場合には,Caché 構成マネージャでの変 更作業も必要になります。本書ではこの方法について解説し ていません。 23(規定値) 例えば,1台のコンピュータで Caché サーバと Caché スタジオが動作している時には, 「サーバ」に「127.0.0.1」を指定することができます。 この「サーバ」の値を他のコンピュータのアドレス「192.168.1.1」に変更すると,すぐに クライアント・サーバ システムとして動作させることができます。(接続先コンピュータ で Caché が動作中であり,指定したネームスペースが定義されていることが前提条件とな ります。) 4-5 「Caché 接続マネージャ」画面でネームスペース「YUBIN」を選択して[OK]ボタンを クリックすると,下記のように画面の表示内容が変わります。(ネームスペース「YUBIN」 に正常に接続できた場合。) 4-6 4.3 郵便番号クラスの定義 Caché スタジオを使って郵便番号クラスの定義を行いましょう。 「クラス」とは,リレーショナル データベース(RDBMS)のテーブルに相当するもので, オブジェクト指向データベース(OODB)でのデータ管理単位のことです。 クラスにはプロパティ(RDBMS のフィールドに相当します)とメソッド(オブジェクト 指向データベース特有の概念です)を定義することができます。 RDBMS と OODB の大きな違いは,このメソッドの有無にあるといえます。メソッドの詳 細に関しては後述します。 なお,Caché にはクエリというメソッドの発展した機能も装備されています。 Caché スタジオでクラスを作成する場合には,3 つの方法が用意されています。 (それぞ れの方法の詳細な手順は別項で解説しています。) (1) メニュ バーから作成開始する方法 4.3.1 項でご確認下さい。 (2) メニュ アイコンから作成開始する方法 4.3.2 項でご確認下さい。 (3) ワーク スペースから作成開始する方法 4.3.3 項でご確認下さい。 上記(1)から(3)のいずれの方法を利用することもできます。Caché スタジオを使っていく 過程で自分に合った方法を選択して下さい。 上記(1)から(3)のいずれの方法を実行すると, 「新規クラスウィザード」画面が表示されま す。 4-7 4.3.1 メニュ バーから作成開始する方法 Caché スタジオのメニュ バーから「ファイル」→「新規作成」を選択します。 「新規作成」画面で[Caché クラス定義]を選択し画面上の[OK]ボタンをクリックし ます。 4-8 4.3.2 メニュ アイコンから作成開始する方法 Caché スタジオのメニュ アイコンから「ファイル」→「新規作成」を選択します。 「新規作成」画面で[Caché クラス定義]を選択し画面上の[OK]ボタンをクリックし ます。 4-9 4.3.3 ワーク スペースから作成開始する方法 Caché スタジオのワーク スペースから「クラス」→「新規クラスを作成」を選択します。 「新規作成」画面で[Caché クラス定義]を選択し画面上の[OK]ボタンをクリックし ます。 4-10 クラス定義を開始しましょう。 定義するクラスの内容は下記の通りです。 下記の表の内容をいくつかの「新規クラス ウィザード」画面を使用して設定します。 パッケージ クラス名 クラスの説明 クラスタイプ User パッケージは,複数のクラス,ルーチン,CSP ファイルをとり まとめる単位です。 ZIPTBL 郵便番号データベース Persistant(永続オブジェクト) (1) 「新規クラス ウィザード」画面 パッケージ名,クラス名,説明を入力し,[次へ]ボタンをクリックします。 「新規クラス ウィザード」画面の[参照]ボタンをクリックすると,その時点で Caché に登録されているパッケージ(Caché システムが提供していると利用者が定義したパッケー ジ)の選択画面が表示されます。表示されて いるパッケージを選択し[OK]ボタンをク リックすると,その内容が「新規クラス ウ ィザード」画面の「パッケージ名を入力」欄 にセットされます。 4-11 (2) 「新規クラス ウィザード クラスタイプ」画面 クラスタイプに「Persistent(データベース内に格納することが可能)」を選択し[次へ] ボタンをクリックします。 各クラスタイプに関する解説を下記に記載しています。 クラスタイプ Persistent Serial Registered 抽象 (Abstract) データタイプ CSP Extends 解説 永続クラスの定義を生成します。永続オブジェクトはデータ ベースに保存できます。 シリアル・クラスの定義を生成します。シリアル・オブジェ クトは、アドレスなどの複雑なデータ型を生成するために、永 続オブジェクト内に組み込まれます。 Registered クラスの定義を生成します。Registered オブジェク トは、データベース内に保存されません。 スーパークラスを持たない抽象クラスの定義を生成します。 データタイプ・クラスの定義を生成します。データタイプ・ クラスは、ユーザ定義のデータタイプを生成するのに使用され ます。 %CSP.Page クラスの定義を生成します。CSP クラスは、CSP イベント処理クラスを生成するのに使用されます。これは、CSP ページを生成する、または HTTP イベントに応答するためのプ ログラム的な方法です (例えば XML サーバを作成する)。 既存のクラスを拡張します。[Extends] ラジオ・ボタンをクリ ックし、既存のスーパークラスの名前を入力 (またはリストか ら選択) します。 4-12 (3) 「クラス ウィザード」画面 画面上の項目に適切な値を設定し[完了]ボタンをクリックします。データを格納する通 常のクラスを定義する場合には各項目に値を設定する必要はありません。 画面上の内容を確認後[完了]ボタンをクリックします。 画面上の項目の解説については下記の通りです。 項目 所有者 (オプション) SQL テーブル名 (オプション) 解説 永続クラスの場合、これは新規クラスの所有者から使用 される SQL ユーザ名です。 このユーザ名は、このクラスが SQL 経由で使用される ときに、権限を制御するのに使用されます。 このフィールドが空欄の場合、所有者はデフォルトの “_SYSTEM” が使用されます。 永続クラスの場合、これはこのクラスに対応する SQL テーブルに使用される名前です。 デフォルトでは (このフィールドが空欄の場合)、SQL テーブル名はクラス名と同じものになります。 クラス名とは異なるテーブル名を使用したい場合、また はクラス名が有効な SQL 識別子でない場合は、SQL テ ーブル名を指定します。 4-13 項目 XML のサポート (オプション) 解説 このオプションを選択した場合、新規のクラスは “XML 使用可能” になり、XML ドキュメントとして投 影する機能を持ちます。 Web サービス・メソッド内でも使用されます。これは、 スーパークラス・リストに %XML.Adaptor クラスを追 加するのと同じ操作です。 詳細は、Caché での XML の使用法 と Caché での SOAP と Web サービスの使用法 を参照してください。 データ生成のサポー このオプションを選択した場合、新規クラスは自動的な ト データ生成をサポートします。 (オプション) これは、クラスのスーパークラス・リストに %Library.Populate クラスを追加するのと同じ操作です。 自動データ生成によって、クラスのオペレーションをテ ストするランダムなデータを簡単に生成することができ るようになります。 クラスを生成するには、クラスをコンパイルし、そして クラスの Populate メソッド (%Library.Populate クラ スから継承) を実行します。例えば、Caché ターミナルを 使用して、以下を実行します。 Do ##class(MyApp.Person).Populate(100) 詳細は、Caché オブジェクトの使用法 の Populate ユー ティリティ の章を参照してください。 4-14 (4) 生成されたクラスの内容について 以上の手順でクラスを定義すると、Caché スタジオ画面に指定されたクラスの情報が表示 されます。(この情報は直接変更することができます。ただしクラス定義言語(CDL ; Class Definition Language)に関する知識が必要になります。) 定義されたクラス(User.ZIPTBL)の情報は下記のとおりです。 Class User.ZIPTBL Extends %Persistent [ ClassType = persistent, ProcedureBlock ] { } このクラス定義情報は次のような内容を示しています。 値 意味 Class クラスの定義、を示します。 User.ZIPTBL User.ZIPTBL というクラスは、%Persistent クラスを継承し Extends %Persistent ます。 ClassType = persistent, クラス タイプは Persistent(永続型)であり、クラス内のコ ProcedureBlock ードはブロックとして管理されます。 4-15 ※ クラス定義の編集について ※ 新規に生成したクラス定義、または既存のクラス定義の特性を変更することができます。 (クラス名とパッケージ名は例外です。) これは、以下の 2 つの方法で行うことができます。 (a) 特定のクラス、クラス・メンバ、またはキーワードの値を変更するクラス・インスペ クタを使用する方法 (b) クラス定義のテキスト表示を直接編集するクラス・エディタを使用する方法 さまざまなクラス・キーワードと、それぞれの意味のリストは、Caché クラス を参照し てください。クラス定義のテキスト表示に関する詳細は、クラス定義言語 リファレンスを 参照してください。 4-16 4.4 生成されたクラスのコンパイル 生成されたクラスをコンパイルすると利用できるようになります。 コンパイルは 3 つの方法が用意されています。 (それぞれの方法の詳細な手順は別項で解 説しています。) (1) メニュ バーから作成開始する方法 4.4.1 項でご確認下さい。 (2) メニュ アイコンから作成開始する方法 4.4.2 項でご確認下さい。 (3) ワーク スペースから作成開始する方法 4.4.3 項でご確認下さい。 上記(1)から(3)のいずれの方法を利用することもできます。Caché スタジオを使っていく 過程で自分に合った方法を選択して下さい。 クラスをコンパイルした結果は,「出力」画面に表示されます。下記の例ではコンパイル 時にエラーがなかったことを示しています。 ※ 「出力」画面のメッセージに関する補足 ※ 出力画面に表示されているメッセージの意味は下記のとおりです。 メッセージ 意味 Compilation started on 10/18/2003 10/18/2003 09:09:31 にコンパイルを開始しまし 09:09:31 た。 Compiling class User.ZIPTBL User.ZIPTBL クラスのコンパイルをしています。 Compiling table SQLUser.ZIPTBL SQLUser.ZIPTBL テーブルのコンパイルをしてい ます。 Compiling routine User.ZIPTBL.1 User.ZIPTBL.1 ルーチンのコンパイルをしていま す。 Compilation finished successfully. コンパイルは正常に終了しました。 ところで皆さんは「SQLUser.ZIPTBL」という定義をしたでしょうか? 実は,「SQLUser.ZIPTBL」テーブルは,「User.ZIPTBL」クラスの別の姿なのです。Caché ではクラスはテーブルであり,テーブルはクラスである,と解説していますが,このコン パイルを実施することによって双方の姿でデータを参照できるようにしています。 また,実際にデータベースのデータをアクセスするために「User.ZIPTBL.1」ルーチンが 自動的に生成されます。 (複数のルーチンが生成されることがあります。) 4-17 4.4.1 メニュ バーからコンパイルを開始する方法 メニュ バーから「ビルド」→「コンパイル」を選択します。 4-18 4.4.2 メニュ アイコンからコンパイルを開始する方法 メニュ アイコンから「コンパイル」を選択します。 4-19 4.4.3 ワーク スペースからコンパイルを開始する方法 ワーク スペースから「クラス」→「User」→「ZIPTBL」を選択します。 ZIPTBL を右クリックして表示されるサブメニューから「コンパイル」を選択します。 この方法でコンパイルを実行するときに,下記の画面が表示されることがあります。これ は Caché スタジオで管理されているプロジェクトの内容に変更が確認された時に表示され るメッセージです。今回の例では,User.ZIPTBL クラスを定義しましたので,プロジェクト に変化が確認されたことになります。 Caché ではアプリケーションで利用するクラス,ルーチン,CSP ファイルをひとまとめに して取り扱えるようにプロジェクトとして管理することができます。 プロジェクトとして管理することは必須ではありません。後からクラス,ルーチン,CSP ファイルをプロジェクトに追加することや削除することが可能です。 この画面で[はい]ボタンをクリックすると, 「ファイル ダイアログ」画面が表示されま す。 4-20 「ファイル ダイアログ」画面を利用してプロジェクトに名前を付けて保存します。 項目 参照場所 ファイル名 ファイルの種類 システム アイテムを含む 内容 「YUBIN」(既定値) 参照場所はネームスペースです。 適当なプロジェクト名を指定します。 本書では Project1(既定値)を利用します。 「プロジェクト(*.prj) 」(既定値) 空白とします。 画面上の内容を確認後, [名前を付けて保存]ボタンをクリックします。 ※ 参照場所 についての補足 ※ 参照場所とは,ネームスペースを意味しています。O/S のファイル システムが管理する フォルダではありません。 4-21 4.5 プロパティの定義 郵便番号データベースにデータ項目(プロパティ)の定義をしましょう。 プロパティとは Caché オブジェクト指向データベースで扱う各項目のことです。リレー ショナル データベースではカラムと呼ばれています。 プロパティにはそのデータタイプとして他のクラスを指定することができます。指定でき るクラスは予め Caché が提供しているシステムクラスだけではなく,アプリケーション・ システムの開発者が定義したクラスも指定することができます。 データタイプを文字列型(%String)と指定することがありますが,これは %Library.String という Caché が予め提供しているシステムクラスを指定していることを意味しています。 例えば,アプリケーション・システムの開発者が住所情報に関するクラスを User.Address として定義しているとします。この User.Address を User.Person クラスの ADDR プロパティ のデータタイプとして指定することができます。このように指定した場合には, P.ADDR.Zipcode といった形式でデータにアクセスすることが可能です。(P は User.Person のインスタンスを意味します。) こういった仕組み関しては別冊「Caché Objects 入門 オブジェクト指向データベースを利 用したシステム開発の実践」で詳細に解説しています。 郵便番号データベースに定義するプロパティは下記のとおりです。 プロパティ名 JisCode Zip5 Zip7 PrefKN CityKN TownKN PrefKG CityKG TownKG Code1 Code2 Code3 Code4 Code5 Code6 AddDate プロパティの説明 全国地方公共団体コード 現郵便番号(5 桁) 新郵便番号(7 桁) 都道府県名(カナ) 市区町村名(カナ) 町域名(カナ) 都道府県名(漢字) 市区町村名(漢字) 町域名(漢字) 一町域が二以上の新郵便番号で表される場合の 表示 小字毎に番地が起番されている町域の表示 丁目を有する町域の場合の表示 一つの新郵便番号で二以上の町域を表す場合の 表示 更新の表示 変更理由 データ更新日付 4-22 属性 %String %String %String %String %String %String %String %String %String %Integer %Integer %Integer %Integer %Integer %Integer %Date Caché スタジオでプロパティを追加するには 3 つの方法が用意されています。(それぞれ の方法の詳細な手順は別項で解説しています。 ) (1) メニュ バーから作成開始する方法 4.5.1 項でご確認下さい。 (2) メニュ アイコンから作成開始する方法 4.5.2 項でご確認下さい。 (3) エディタ ウィンドウから作成開始する方法 4.5.3 項でご確認下さい。 上記(1)から(3)のいずれの方法を利用することもできます。Caché スタジオを使っていく 過程で自分に合った方法を選択して下さい。 上記(1)から(3)のいずれの方法を実行すると,「新規プロパティ ウィザード」画面が表示 されます。 4-23 4.5.1 メニュ バーから作成開始する方法 メニュ バーから「クラス」→「追加」→「新規プロパティ」を選択します。 4-24 4.5.2 メニュ アイコンから作成開始する方法 メニュ アイコンから「新規プロパティ」を選択します。 4-25 4.5.3 エディタ ウィンドウから作成開始する方法 エディタ ウィンドウ上で右クリックするとサブメニューが表示されます。 表示されたサブメニューから「追加」→「新規プロパティ」を選択します。 4-26 4.5.4 全国地方公共団体コード プロパティを定義する 「新規プロパティ ウィザード」を利用して,下記の手順で「全国地方公共団体コード プ ロパティ」を定義します。 「全国地方公共団体コード」プロパティは,プロパティ名「JisCode」,データタイプ「%String (%Library.String)」とします。 プロパティの定義は下記の手順で実施します。 (1) (2) (3) (4) (5) プロパティ名の設定 プロパティタイプの設定 プロパティ属性の設定 プロパティ パラメータの設定 アクセサ メソッドの設定 4.5.4.1 項でご確認下さい。 4.5.4.2 項でご確認下さい。 4.5.4.3 項でご確認下さい。 4.5.4.4 項でご確認下さい。 4.5.4.5 項でご確認下さい。 4-27 4.5.4.1 プロパティ名の設定 「新規プロパティ ウィザード」ようこそ 画面が表示されます。 この画面ではプロパティ名称を指定します。 画面上で設定する値は次のとおりです。 項目 プロパティ名 プロパティの説明 値 JisCode 全国地方公共団体コード 画面上の項目に関する解説は次のとおりです。 項目 プロパティ名 (必須) プロパティの説明 (オプション) 解説 新規プロパティの名前。これは、有効なプロパティ名 でなければなりません。また、定義済みの既存のプロパ ティと同じ名前を付けることはできません。 名前に関する一般的な説明は、Caché オブジェクトの 使用法 の Caché クラス の章を参照してください。 新規プロパティに対する説明。この説明は、クラス・ ドキュメントがオンライン・クラス・ライブラリ・ドキ ュメントで表示されるときに、使用されます。 説明には、HTML フォーマット・タグも含まれます。 詳細は、クラス定義言語リファレンスの 解説での HTML の使用法 を参照してください。 画面上の値を確認後,[次へ]ボタンをクリックします。 4-28 4.5.4.2 プロパティタイプの設定 「新規プロパティ ウィザード」プロパティタイプ 画面が表示されます。 この画面ではプロパティのタイプ情報を指定します。 プロパティには、複数のタイプがあります。新規プロパティ・ウィザードは、新規のプロ パティがタイプの 1 つの値、タイプの集合、ストリーム・タイプ、またはリレーションシ ップのいずれになるかを選択するように促します。データタイプなどの、追加の属性を指 定することで、これらの各選択をさらに改良することができます。 画面上で設定する値は次のとおりです。 項目 プロパティタイプ 値 「single value のタイプ」の「%String」とします。 画面上の項目に関する解説は次のとおりです。 項目 single value のタイプ 解説 [single value のタイプ] プロパティは、単独の値を含 みます。 [single value のタイプ] プロパティには、関連するタ イプがあります。このタイプは、Caché クラスの名前で す。 タイプとして使用されているクラスがデータタイ プ・クラスの場合、そのプロパティは単純なリテラル・ プロパティです。 永続クラスの場合、そのプロパティはそのクラスにク ラスに対するリファレンスです。 4-29 項目 collection のタイプ ストリーム・タイプ リレーションシップ 解説 シリアル・クラスの場合、そのプロパティは埋め込み オブジェクトを表します。 クラス名は直接入力するか、[参照]ボタンを使用し て、表示されるクラスのリストから選択することもでき ます。 Caché で提供されている基本的なデータタイプ・クラ スの詳細は、Caché オブジェクトの使用法 の データ型 の章を参照してください。 [collection のタイプ] プロパティには、複数の値が含 まれています。 これには、List (単純な、整列されたリスト) と Array (キー値と関連する要素との単純なディクショナリ) の 2 つのタイプがあります。 [single value のタイプ] プロパティと同様、[collection のタイプ] プロパティにもデータタイプがあります。 この場合、データタイプは集合内に含まれる要素のタ イプを指定します。 [ストリーム・タイプ] プロパティは、大規模なデータ 量 (32 KB 以上) を含みます。 このデータは、ストリーム・インタフェースを使用し て操作されます (詳細は %AbstractStream クラスを 参照してください)。 character ストリーム (テキスト・データを含む) と binary ストリーム (イメージなどのバイナリ・データを 含む) のいずれかを選択することができます。 [リレーションシップ] プロパティは、2 つのオブジェ クト間の関係です。リレーションシップに関する詳細 は、リレーションシップ を参照してください。 画面上の値を確認後,[次へ]ボタンをクリックします。 4-30 4.5.4.3 プロパティ属性の設定 「新規プロパティ ウィザード」プロパティ属性 画面が表示されます。 新規のプロパティを、永続、またはシリアル・オブジェクトに対するクラス定義に追加す る場合、新規プロパティ・ウィザードは追加の属性について問い合わせを実施します。 画面上で設定する値は次のとおりです。 項目 ――― 値 この画面で設定する値はありません。 画面上の項目に関する解説は次のとおりです。 項目 必須 (オプション) インデックス (オプション) ユニーク (オプション) 解説 永続クラス、またはシリアル・クラスに適用されます。 「必須」をチェックした場合,このプロパティが必須 入力項目であることを示します。(SQL 専門用語で NOT NULL)。 プロパティが必要な永続オブジェクト、またはシリア ル・オブジェクトには必ず値が与えられます。 また、オブジェクトの保存を試みると失敗します。 永続クラスに適用されます。 「インデックス」をチェックした時,このプロパティ の値でインデックスが作成されます。 永続クラスに適用されます。 このプロパティの値が、このクラスのエクステント (すべてのセット)・オブジェクト内で一意でなければな 4-31 項目 計算 (オプション) SQL フィールド名 (オプション) 解説 らないことを指定します。 このフィールドを基にした インデックスの作成時に 利用されます。 オブジェクト・インスタンスが作成されるとき、計算 されたプロパティには、割り当てられたメモリ内領域は ありません。その代わり、そのプロパティに対するアク セサ (Get、または Set)メソッドを提供する必要があり ます。このオプションを選択する場合、新規プロパテ ィ・ウィザードは空の Get アクセサ・メソッドを生成 します。 永続クラスの場合にこのプロパティに対応する SQL フィールドに使用される名前です。 既定値では (このフィールドが空欄の場合)、SQL フ ィールド名はプロパティ名と同じものになります。プロ パティ名とは異なるフィールド名を使用したい場合、ま たはプロパティ名が有効な SQL 識別子でない場合は、 SQL フィールド名を指定します。 画面上の値を確認後,[次へ]ボタンをクリックします。 4-32 4.5.4.4 プロパティ パラメータの設定 「新規プロパティ ウィザード」プロパティ パラメータ 画面が表示されます。 すべてのプロパティには、プロパティのタイプによって決定されたパラメータ値のリスト があります。これらのパラメータの値は、プロパティの振る舞いのさまざまな機能を制御 します。新規プロパティ・ウィザードの [プロパティ パラメータ] のページに表示された テーブルを使用して、特定のパラメータの値を設定することができます。 画面上で設定する値は次のとおりです。 項目 ――― 値 この画面で設定する値はありません。 画面上の値を確認後,[次へ]ボタンをクリックします。 4-33 4.5.4.5 アクセサ メソッドの設定 「新規プロパティ ウィザード」アクセサ メソッド 画面が表示されます。 対応するチェックボックスを選択すると、プロパティに対する Set メソッド (プロパティ の値を設定するのに使用される) と Get メソッド (プロパティの値を検索するのに使用さ れる) を上書きすることができます。このオプションのいずれかを選択すると、空の Set メ ソッド、または Get メソッドが作成されます。その内容は、後で入力します。 画面上で設定する値は次のとおりです。 項目 ――― 値 この画面で設定する値はありません。 画面上の値を確認後,[次へ]ボタンをクリックします。 4-34 以上の手順で設定したプロパティの内容は,Caché スタジオのエディタ ウィンドウに表 示されます。この内容は直接修正することもできます。 エディタ ウィンドウに追加されたプロパティ定義に関するコードは下記のとおりです。 /// 全国地方公共団体コード Property JisCode As %String; 以下同様に残りのプロパティを定義してください。 プロパティ名 JisCode (定義済み) Zip5 Zip7 PrefKN CityKN TownKN PrefKG CityKG TownKG Code1 Code2 Code3 プロパティの説明 全国地方公共団体コード 現郵便番号(5 桁) 新郵便番号(7 桁) 都道府県名(カナ) 市区町村名(カナ) 町域名(カナ) 都道府県名(漢字) 市区町村名(漢字) 町域名(漢字) 一町域が二以上の新郵便番号で表される場合の 表示 小字毎に番地が起番されている町域の表示 丁目を有する町域の場合の表示 4-35 属性 %String %String %String %String %String %String %String %String %String %Integer %Integer %Integer プロパティ名 Code4 Code5 Code6 AddDate プロパティの説明 一つの新郵便番号で二以上の町域を表す場合の 表示 更新の表示 変更理由 データ更新日付 属性 %Integer %Integer %Integer %Date ※ 属性 について ※ データタイプ 属性に「%Integer」,「%Date」を指定する場合には,2 つの方法があります。 (1) プロパティタイプ 画面(4.5.4.2 プロパティタイプの設定)の「single value のタイプ」 欄で直接「%Integer」,「%Date」と入力する方法 (2) プロパティタイプ 画面(4.5.4.2 プロパティタイプの設定)の「single value のタイプ」 欄の右横にある[参照]ボタンをクリックして選択する方法 すべてのプロパティを設定すると下記のような画面となります。(下記の画面は紙面の都 合ですべての情報を表示できていません。) すべてのプロパティを設定後,このクラスのコンパイルを実施してください。詳細なコン パイル手順は「4.4 生成されたクラスのコンパイル」を参照してください。 4-36 4.6 クラス定義情報ファイル Caché では Caché スタジオで定義したクラス定義情報を取り出すことができます。 (エク スポート機能) 逆に他の Caché システムで定義されたクラス定義情報を取り込むことができます。 (イン ポート機能) クラス定義情報は Caché スタジオを利用する以外にも使い慣れたエディタを利用してク ラスの内容を編集することができます。 以下に,Caché スタジオでのエクスポート機能とインポート機能についてその手順を解説 しています。 クラス定義情報のエクスポート機能,インポート機能は Caché エクスプローラにも装備 されています。 4-37 4.6.1 エクスポート機能 Caché スタジオでクラス情報をエクスポートする場合には 2 つの方法が用意されていま す。 (1) メニュ バーから開始する場合 4.6.1.1 項でご確認下さい。 (2) ワーク スペースから開始する場合 4.6.1.2 項でご確認下さい。 上記(1),(2)のいずれの方法を利用することができます。Caché スタジオを使っていく過 程で自分に合った方法を選択してください。 4-38 4.6.1.1 メニュ バーから開始する場合 メニュ バーから「ツール」→「エクスポート」を選択します。 「エクスポート」画面で[追加]ボタンをクリックします。 エクスポートするクラスを選択するためです。 4-39 「ファイル ダイアログ」画面が表示されますので,「ファイルの種類」で「クラス定義 (*.cls)」を選択します。 「ファイル ダイアログ」画面に参照場所(ネームスペース)に存在するパッケージ情報 が表示されますので適切なパッケージを選択(ダブル クリック)します。 この例では「User」を選択します。 4-40 「ファイル ダイアログ」画面に選択したネームスペース,パッケージに存在するクラス 情報が表示されます。適切なクラスを選択します。この例では「ZIPTBL」を選択しま す。 クラスを選択後[開く]ボタンをクリックします。 4-41 「エクスポート」画面に戻ります。この画面にはこれまでの手順で選択したクラスの内容 が表示されています。 これら選択したクラスの情報を格納するファイルを指定します。[参照]ボタンを利用 するとファイル選択用ダイアログを表示することができます。 「エクスポート」画面の内容を確認後[OK]ボタンをクリックします。 ※ クラス定義言語 エクスポートファイルについて ※ Caché スタジオのエクスポート機能では,クラス定義言語 を格納する場所としてリモー トかローカルを選択できます。 格納場所 リモート ローカル 解説 Caché スタジオが接続している Caché サーバを示します。 従って,Caché スタジオを利用しているフォルダ情報とは異なるフォ ルダ情報が表示(利用)されます。 例えば,Caché スタジオを利用しているコンピュータが Windows で あり,Caché サーバが Linux(Unix)の場合には,Linux(Unix)が管 理するフォルダ情報が表示されます。 Caché スタジオを利用しているコンピュータのフォルダ情報を利用 します。 4-42 「エクスポート」画面で指定した格納先ファイルがすでに存在する場合には確認メッセー ジが表示されます。 既存のファイルを削除するか,あるいは残すのかを選択します。 エクスポート処理が正常に終了すると下記のメッセージが表示されます。 以上でエクスポート処理は終了です。 4-43 4.6.1.2 ワーク スペースから開始する場合 ワーク スペースから User.ZIPTBL を選択し,右クリックして表示されるサブメニューか ら「エクスポート」を選択します。 以下の処理は「4.6.1.1 メニュ バーから開始する場合」の (6) 以降と同様です。 以上でエクスポート処理は終了です。 4-44 4.6.2 インポート機能 Caché スタジオでクラス情報をインポートする場合には下記の方法が用意されています。 (1) メニュ バーから開始する場合 4.6.2.1 項でご確認下さい。 4-45 4.6.2.1 メニュ バーから開始する場合 Caché スタジオのメニュ バーから「ツール」→「ローカルからインポート」を選択しま す。 メニュ バーのツールからインポートを選択する場合, 「リモートからインポート」と「ロ ーカルからインポート」の 2 種類から選択することができます。 「リモート」と「ローカル」の違いは,エクスポート機能の場合と同じです。詳細は 「4.6.1.1 メニュ バーから開始する場合」の (6) を参照して下さい。 4-46 「ファイルを開く」画面でインポートするファイルを選択します。 上記(1)で「ローカルからインポート」を選択すると, 「ファイルを開く」画面が表示され ます。下記の画面はインポート対象のファイル(ZIPTBL.xml)が画面上に表示されている 例です。 インポート対象のファイルが画面上に表示されていない場合や,表示されているファイル とは異なるファイルをインポートする場合には,「ファイルの場所」をクリックして適切な ファイルを選択します。 指定したファイルを使用してインポート処理を開始します。 インポート対象となるファイルを確認後,[開く]ボタンをクラスします。 4-47 インポート対象クラスを確認します。 インポート対象ファイルに格納されているクラス情報が「インポート」画面に表示されま す。インポートするクラスをチェック([レ] )して[OK]ボタンをクリックします。 下記の項目は必要に応じてチェック([レ])します。 ・インポートしたアイテムをプロジェクトに追加 ・インポートされたアイテムをコンパイル インポート処理が正常に終了すると下記のメッセージが表示されます。 以上でインポート処理は終了です。 4-48 5. データベースの操作 前章で郵便番号データベース(User.ZIPTBL)を定義しました。本章では郵便番号データ ベース(User.ZIPTBL)にデータを登録する方法,その内容を確認する方法,格納したデー タを検索する方法について解説しています。 また,データを検索する場合に効果を発揮するインデックスの設定方法とインデックスデ ータの再構築方法についても解説します。 ※ Caché Object Script について ※ Caché データベースを取り扱う場合,GUI プログラムなどから ODBC,JDBC 経由で SQL コマンドを実行してデータ検索を行い,取得したデータを利用して呼び出し元プログラム 内部で編集処理を行う方法があります。 Caché はこのような方法でも十分な性能を発揮しますが,クラスメソッドやクラスクエリ を利用するとより一層の性能向上を図ることが可能となります。また,非常に柔軟で高速 な処理を実行することができます。 クラスメソッドやクラスクエリを作成,テストするためには Caché が装備している Caché Object Script を利用する必要があります。 そこで本章では Caché ターミナルを利用して実際に Caché Object Script を使用しながら各 種の処理を実行してゆきます。 Caché Object Script は少ない命令数で構成されていますので,Caché Object Script の技術を 習得することにはそれほど時間がかからないと考えられます。また,Caché Object Script は Caché ターミナル上で命令(コマンド)を実行してすぐに結果を確認できますので非常に使 い勝手の良いものです。 Caché Object Script は Caché に付属されている Caché ターミナル以外にも,telnet プログラ ムなどで Caché に接続した場合でも利用することが可能です。 5-1 5.1 データを格納する 郵便番号データベース(User.ZIPTBL)にデータを格納してみましょう。 本章では Caché ターミナル上で Caché Object Script を使用してデータ格納を行います。そ の後 Caché ターミナル上で Caché Object Script を利用して格納したデータの内容を確認しま す。また,Caché エクスプローラを利用した場合のデータ確認方法についても解説していま す。 ※ グローバル変数 ※ Caché がデータを格納する場所は,Caché 構成マネージャのネームスペース設定,データ ベース設定で指定した位置の CACHE.DAT となります。ところで,郵便番号データベース (User.ZIPTBL)に格納したデータはどこにどのように格納されるでしょうか? User.ZIPTBL のデータは,^User.ZIPTBLD というグローバル変数に格納されます。 また,User.ZIPTBL のインデックスデータは,^User.ZIPTBLI というグローバル変数に格 納されます。 あなたが定義したクラスのデータがどのグローバル変数に格納されるかは通常は意識す る必要はありません。しかし,本章で解説しているように Caché ターミナルや Caché エク スプローラで格納したデータの内容を確認する場合には,クラスに対応するグローバル変 数がどれであるかを知っておく必要があります。 (上級テクニックとしてグローバルマッピ ングという設定をする場合には,グローバル変数の特性を良く理解しておく必要がありま す。) 下記は既定のグローバル変数命名基準です。 データ → ^パッケージ.クラス D インデックス → ^パッケージ.クラス I クラスに対応するグローバル変数は変更することが可能です。Caché スタジオでクラスを 選択し,インスペクタ・ウィンドウで「Storage」を表示し確認や変更をすることが可能で す。(本書ではこれらの詳細についての解説はしていません。Caché オンライン・ドキュメ ントでご確認下さい。) 5-2 5.1.1 Caché ターミナルでデータを格納する Caché ターミナルを起動します。 Caché キューブをクリックして表示されるメニュの 「ターミナル」を選択します。 Caché ターミナルが表示されたら,プロ ンプトに表示されているネームスペースを 「YUBIN」に変更します。郵便番号データベース(User.ZIPTBL)がネームスペース「YUBIN」 に作成されているためです。 ネームスペースを「YUBIN」に変更するための Caché Object Script は「zn ネームスペー ス」です。本章の場合には, 「zn “yubin”」です。指定するネームスペースは大文字でも小文 字でも同等に扱われます。 5-3 北海道の郵便番号データ(01hokkai.csv)を参照してデータを User.ZIPTBL クラスに格納 してみましょう。 User.ZIPTBL のプロパティ名,格納データの内容は次の通りです。 プロパティ名 JisCode Zip5 Zip7 PrefKN CityKN TownKN PrefKG CityKG TownKG Code1 Code2 Code3 Code4 Code5 Code6 AddDate 格納データの内容 01101 064 0640941 ホッカイドウ サッポロシチュウオウク アサヒガオカ 北海道 札幌市中央区 旭ケ丘 0 0 1 0 0 0 処理日付($Horolog) 備考 %String %String %String %String %String %String %String %String %String %Integer %Integer %Integer %Integer %Integer %Integer %Date User.ZIPTBL クラスへのデータの格納は次の手順で行います。 No. 1 2 3 手順 内容 User.ZIPTBL ク Caché データベースのデータを操作(追加,参照,更新, ラ ス の イ ン ス タ 削除)する場合には,操作対象データをデータベースから ン ス を 作 成 し ま メモリ領域に読み込む必要があります。 す。 このメモリ領域にデータを読み込む処理を実施するのが 「インスタンスの作成」処理です。 なお,メモリ上に読み込んだデータは解放処理を実施する までメモリ上に存在し続けます。従って,メモリ解放処理 は非常に重要な手続きです。 (インスタンスを作成したプロ セスが終了すると,自動的にメモリを解放します。) User.ZIPTBL ク クラスのインスタンスに対してのデータのセットを行い ラ ス の プ ロ パ テ ます。この処理は,インスタンス(メモリ上の領域)にデ ィ に 値 を セ ッ ト ータをセットするのみで,データベースにデータを格納す します。 る処理ではありません。 User.ZIPTBL ク クラスのインスタンスにセットされているデータをデー ラ ス を デ ー タ ベ タベースに格納します。 ースに格納しま す。 5-4 No. 4 手順 内容 User.ZIPTBL ク メモリ上で操作したデータ(インスタンス)を解放する処 ラ ス の イ ン ス タ 理です。 ンスを解放しま インスタンスに対してデータをセットしていても,そのイ す。 ンスタンスデータをデータベースに格納せずにインスタン スの解放を行ってしまうとデータベースの内容は更新され ません。 Caché ターミナル上で Caché Object Script を使用してデータ操作を行ってみましょう。 ここではテストとして郵便番号データベース(User.ZIPTBL クラス)の新郵便番号(7桁) と都道府県名(漢字)の 2 つのプロパティにデータをセットしてみましょう。 注意事項: 大文字,小文字に注意して入力して下さい。 Caché Object Script でのデータ操作手順は下記のとおりです。 No 1 2 手順 User.ZIPTBL クラスのイン スタンスを作 成します。 User.ZIPTBL クラスのプロ パティに値を セットします。 Caché Object Script と解説 set Y=##class(User.ZIPTBL).%New() 解説 a set は,Caché Object Script でデータを格納するコマンドで す。set a=b は,b の値を a に格納する,という処理を実行 します。 b Y には,インスタンスを識別する id(oref)が格納されま す。 c ##class の括弧の中で,インスタンスを生成するクラスを 指定します。もし,指定したクラスが定義されていない場 合には,エラーメッセージ(<CLASS DOES NOT EXIST>) が表示されます。 クラスを指定する場合,ダブル・コーテーションマークで クラス名を囲む必要はありません。 d %New()は,新規にデータを追加する場合 Caché Object Script のインスタンス生成コマンド(メソッド)です。 set Y.Zip7=”0640941” set Y.PrefKG=”北海道” 解説 a Y.Zip7 は,生成された User.ZIPTBL クラスのインスタンス に含まれる Zip7 プロパティ(新郵便番号(7桁))を示しま す。 5-5 No 3 4 手順 User.ZIPTBL クラスをデー タベースに格 納します。 User.ZIPTBL クラスのイン スタンスを解 放します。 Caché Object Script と解説 b 新郵便番号(7桁)の値は,”0640941”です。Caché Object Script の set コマンドでは,移送対象となるデータ(=の右辺 で指定されるデータ)の妥当性チェックを自動的に行い, もし,移送対象データが数値であると判断される場合には, 先頭から連続するゼロ「0」は削除(ゼロ・サプレス)さ れて格納されます。 ただし,移送対象データをダブル・コーテーションマーク 「“”」で囲むことによって,移送対象データを文字列として 認識し,ゼロ・サプレス処理の実施を防ぐことができます。 set ans=Y.%Save() 解説 a %Save は,インスタンスをデータベースに格納する Caché Object Script のコマンドです。 この%Save コマンドで「どのインスタンスのデータ」を格 納するのか?という疑問が発生しますが,%Save の前に「Y.」 があることに注目してください。 Y は,処理中インスタンスの識別 id(oref)を示していま す。従って,Y の値により特定されるインスタンスのデータ が%Save の処理対象データとなります。 b set ans= で%Save を実施した結果の値を参照することが できます。ans の値が「1」であれば正常終了です。 c %Save コマンドはインスタンスのデータをデータベース に格納しますが,それ以外の処理は何もしません。つま り,%Save で格納したデータは,依然としてインスタンス データとしてメモリ上に存在します。Caché ObjectScript コ マンドを使用してデータを参照することも可能です。イン スタンスデータをメモリ上から解放(消去)するために は,%Close コマンドを実行します。 set ans=Y.%Close() 解説 a %Close コ マ ン ド は イ ン ス タ ン ス の 解 放 を す る Caché Object Script のコマンドです。 b この%Close 処理が正常に終了した時点で処理対象データ はメモリ上から完全に消去されます。 %Close コマンドはインスタンスデータをメモリ上から消 去すること以外の処理は何もしません。例えば,インスタ ンスにデータをセットした状態で,%Save コマンドを実施 せずに%Close を実施すると,インスタンスにセットしたデ ータはデータベースに格納されないままメモリ上から解放 されてしまいます。 5-6 上記の Caché Object Script を Caché ターミナル上で実施した結果は,下記の画面のように なります。 次に郵便番号データベース(User.ZIPTBL)に格納したデータを確認しましょう。 格納されたデータの確認方法として 2 つの方法があります。 (1) Caché Object Script での確認方法 → 5.1.2 項でご確認下さい。 (2) Caché エクスプローラでの確認方法 → 5.1.3 項でご確認下さい。 5-7 5.1.2 Caché ターミナルで格納したデータを確認する Caché ターミナル上で Caché Object Script を利用して格納したデータの確認を行います。 Caché ターミナルでクラスデータ参照ユーティリティ(^%r)を起動し User.ZIPTBL に格 納されているデータを参照します。 クラスデータ参照ユーティリティを実行する命令は「do ^%r」です。 「Array:」でデータ表示対象となるクラス名(正確には,クラスデータを格納している グローバル変数名)を指定します。Caché スタジオで既定値を使用した場合は,クラスデ ータを格納するグローバル変数名は,「^パッケージ.クラス名 D」となります。郵便番号デ ータベース(User.ZIPTBL クラス)の場合は,既定値に従い「^User.ZIPTBLD」となります。 「Device」,「Right margin」は指定する必要がありませんので,何も入力せずに「Enter」 キーを押下します。 上記の画面上に表示されているように,^User.ZIPTBLD の内容が表示されます。今回は新 郵便番号(7 桁)と都道府県名(漢字)の 2 項目のみにデータをセットしましたので,他の プロパティには何もデータが格納されていないことが確認できます。 5-8 5.1.3 Caché エクスプローラで格納したデータを確認する Caché エクスプローラを使用して User.ZIPTBL クラスの データを参照しましょう。 Caché キューブから Caché メニュを表示します。 表示された Caché メニュからエクスプローラを選択し ます。 Caché エクスプローラ画面が表示されたら,画面左側のウィンドウで「ネームスペース」 →「YUBIN」→「グローバル」を選択します。 5-9 ※ グローバル変数の位置 ※ Caché エクスプローラ画面左側で「グローバル」を選択すると,ネームスペース「YUBIN」 で管理されているグローバル変数の一覧が表示されます。 この画面に表示されるグローバル変数には,システム側で使用されるグローバル変数と, 利用者側プログラムで使用されるグローバル変数が混在して表示されます。 あるグローバル変数がシステム側で使用されるものであるのか,あるいは利用者側プログ ラムで使用されるグローバル変数であるのかは,「データ位置」の情報によって判別するこ とが可能です。 例えば,データ位置が「c:¥yubin」と表示されているグローバル変数は利用者側プログラ ムで使用されるものです。この件に関する詳細情報は Caché 構成マネージャの「ネームス ペース」,「データベース」で定義されている内容に基づいて解析できます。 5-10 Caché エクスプローラ画面の右側に表示されている^User.ZIPTBLD をダブルクリックする と,^User.ZIPTBL に格納されているデータが「Caché−グローバル表示」画面に表示されま す。 「Caché−グローバル表示」画面の「結果」欄に表示されている任意の行を選択(クリッ ク)すると,画面下部の「ノードの編集」欄に選択したデータ全体が表示されます。 ・データの削除→ 可能 「ノードの編集」部分の右横に表示されている[×]ボタンをクリックすると,選択され ているデータを削除することが可能です。 ・データの変更→ できません 「ノードの編集」部分に表示される内容を変更することはできません。 5-11 ※ グローバル変数とデータアクセス方法について ※ Caché では,3 種類のデータベースへのアクセス方法を提供しています。 ・Caché をオブジェクト指向データベースとしてデータアクセスする方法 ・Caché をリレーショナルデータベースとしてデータアクセスする方法 ・Caché を階層構造データベースとしてのデータアクセスする方法 これら 3 種類の方法は,1つのアプリケーション・システムの中で組み合わせて利用する ことができます。あるいは1本のプログラムの中で組み合わせて利用することもできます。 例えば,金融機関の業務などトランザクション処理を厳格に実施しなければならない場合 には,オブジェクト指向アクセスが適しています。トランザクション処理で格納されたデ ータを帳票に印刷するような場合には各種市販ツールを利用することができますが,多く の場合このようなケースでは SQL コマンドが利用されます。 別の例として,Web アプリケーション・システム(CSP)では,Caché Object Script を利 用してデータベースにアクセスすることができます。CSP 内部では SQL コマンドを利用す ることもできますし,クラスメソッドやクラスクエリを利用することができます。 このように Caché では Caché に接続する各種ツールに対しての扉(コンポーネント)がい くつも用意されています。どの扉の向こうも同じデータに続いています。 5-12 5.2 データを検索する Caché に登録されたデータは何らかの手段で検索できなければ意味がありません。 一般的にデータを検索する処理のことを「クエリ」と呼びますが,多くの場合「クエリ イ コール SQL Select コマンド」と認識されています。 Caché では SQL Select コマンドを直接実行することも可能ですが,クラスクエリという非 常に優れた機能を装備しています。クラスクエリに関しては,5.2.2 項,5.2.3 項で詳細な解 説をしています。 下記は,郵便番号データベース(User.ZIPTBL)のデータを検索する SQL Select コマンド の例です。 SELECT * FROM SQLUser.ZIPTBL WHERE PrefKG = ‘北海道’ この SQL Select コマンドは CachéSQL マネージャで実行することができます。5.2.1 項で 詳細な解説をしています。 クラスクエリでは上記のような SQL Select コマンドをその内部で実行してデータ検索を 行います。データ検索処理自体を Caché Object Script でプログラミングすることができます。 このようにデータ検索処理を Caché Object Script でプログラミングするメリットは,SQL コマンドでは対応が困難なデータ検索処理を実現できること,またそういったデータ検索 処理を高速に実行できることにあります。 クラスクエリはリレーショナル データベースの「ストアード・プロシジャー」と同じ概 念ですが,「ストアード・プロシジャー」よりも様々なことが実現できます。 ところで,なぜ Caché ではクラスクエリを利用するのでしょうか? その答えは,Caché をオブジェクト指向データベースとして利用する点にあります。オブ ジェクト指向データベースでは,リレーショナル データベースのような「Primary Key」と いう考え方がありません。(インデックスという考え方はあります。) 「Primary Key」の代わりに OID(オブジェクト識別子)でそれぞれのデータが管理され ます。Caché の場合,OID はデータが追加された時点で自動発番され,その後データに対し て変更処理がされても同じ値を使い続けます。 OID を使用するメリットは,Primary Key に相当するデータの値が変更されても問題が発 生しない点にあります。リレーショナル データベースでは Primary Key の値を変更する場 合には,更新前情報で Primary Key を含むデータを削除した後で新しい Priimay Key データ を利用してデータベースにデータを追加する必要があります。 また何らかの理由で Primary Key の構成内容を変更するような場合には,データベースの 再構築が必要になるかもしれません。 オブジェクト指向データベースでは,このようなリレーショナル データベースの Primary Key の特性を回避する目的で OID を利用しています。 5-13 ここで大きな問題があることに気がつきます。 オブジェクト指向データベースで扱う OID は非常に優れた概念ですが,OID はシステム が自動発番する,という点が大きな問題となります。 例えば,プログラム A が Caché に対してオブジェクト指向でデータを格納したとします。 この時に自動裁判された OID は 567 番だとします。 では,プログラム A が格納したデータをプログラム B が参照する場合,どのようにして OID の値(567 番)を取得することができるでしょうか?残念ながらプログラム B には直接 OID の値を取得する方法がありません。 そこでクラスクエリを利用します。 プログラム B は OID を取得するためのクラスクエリを実行します。クラスクエリが指定 された条件に基づいてデータ検索を行った結果として OID をプログラム B に通知すること ができます。 プログラム B はクラスクエリから通知された OID を利用してデータにアクセスしてデー タの更新や削除といった処理を実施します。 クラスクエリは Caché のオブジェクト指向の中で難しい考え方の 1 つです。 しかし,ある条件に該当するデータの OID を取得する共通プログラム,と考えると比較 的馴染みやすいのではないかと考えられます。 クラスクエリはデータの OID を取得するだけではなく,データを検索しその値を呼び出 し元のプログラムに通知する機能もあります。 (SQL Select コマンドと同じです。) 5-14 5.2.1 SQL コマンドでデータを検索する 「5.1.1 Caché ターミナルでデータを格納する」で格納したデータを,SQL Select コマン ドを実行して検索してましょう。下記は検索に使用する SQL Select コマンドです。 SELECT * FROM SQLUser.ZIPTBL WHERE PrefKG = ‘北海道’ ※ 区切り識別子について ※ 上記の SQL Select コマンドでは,WHERE 句で指定する値(北海道)をシングルクオーテ ーション(‘’)で囲んでいます。これは Caché 構成マネージャの「詳細」タブの「SQL」→ 「区切り識別子をサポート」の値を「はい」にした場合に有効になります。 この「区切り識別子をサポート」を「はい」にすると,SQL コマンド中に SQL 予約後が あっても,その予約後をダブルクオーテーションで囲むことでエラーを回避することがで きます。 Caché セットアップ時の既定値は「いいえ」ですが, 「はい」に変更しておくと便利です。 5-15 CachéSQL マネージャを起動します。 Caché キューブをクリックして表示されるメニュから 「SQL マネージャ」を選択します。 CachéSQL マネージャ画面が表示されたら,接続先を確認します。 例えば,接続先として「127.0.0.1[1972]:USER」と表示されている場合には次のような内 容となります。 値 127.0.0.1 1972 USER 意味 接続先 Caché の IP アドレス 127.0.0.1 は CachéSQL マネージャが動作しているコンピュー タです。 接続先ポート番号 1972 は既定値です。 接続先ネームスペース 5-16 CachéSQL マネージャ画面のタイトルに 表示されている接続先(ネームスペース)が 「YUBIN」以外の場合には下記の手順で接続先を「YUBIN」に変更します。 (1) メニュ バーから「ファイル」→「ネームスペース変更」を選択します。 (2) 「Caché 接続マネージャ」画面で,ネームスペースに「YUBIN」を選択後[OK]ボタ ンをクリックします。 5-17 CachéSQL マネージャのクエリ実行機能を利用して SQL Select コマンドのテストを行いま しょう。 CachéSQL マネージャ画面左側のウィンドウで「YUBIN」→「SQLUser」→「テーブル」 →「ZIPTBL」を選択します。画面右側のウィンドウに郵便番号データベース(User.ZIPTBL, テーブル名は SQLUser.ZIPTBL)の内容が表示されます。 画面右側のウィンドウにある「クエリの実行」タブをクリックすると,クエリ(SQL コ マンド)入力画面が表示されます。次の SQL Select コマンドを入力して[クエリ実行]ボ タンをクリックします。 SQL Select コマンド SELECT * FROM SQLUser.ZIPTBL WHERE PrefKG = ‘北海道’ 5-18 正常に SQL Select コマンドが実行されると検索したデータが表示されます。 5-19 もう 1 つの方法としてメニュ バーから「オブジェクト」→「クエリの実行」を選択する 方法があります。 クエリの実行をする画面が表示されますので,SQL Select コマンドを入力して「クエリの 実行」ボタンをクリックします。 正常にクエリが実行されると検索結果が表示されます。 5-20 Caché には入力された SQL Select コマンドがどのように実行されるかを表示する「クエリ プラン表示機能」があります。画面上の「クエリプラン表示」ボタンをクリックします。 入力された SQL Select コマンドを Caché がどのように実行するかを画面上に表示されます。 以上のような手順で SQL Select コマンドの確認を行うことができます。 5-21 5.2.2 クエリを作成する Caché スタジオを使用してクラスクエリを作成しましょう。 作成するクラスクエリの内容は下記のとおりです。 項目 クラスクエリ名 クラスクエリの説明 パラメータ クエリに含むカラム クエリ条件 照合順 内容・値 LookUp1 外部からパラメータとして都道府県名(漢字)を指定し て,該当するデータの OID を取得する。 Fuken %String ID PrefKG = :Fuken (指定しません) (1) Caché スタジオでクラスクエリの作成を開始します。 Caché スタジオのワーク スペースで作成するクラスクエリ(LookUp1)が所属するクラ スを指定します。「クラス」→「User」→「ZIPTBL」を選択しダブル クリックします。 エディタ ウィンドウに User.ZIPTBL クラスのコードが表示されたら,メニュ アイコンの 「新規クエリ」アイコンをクリックします。 クラスクエリの定義を開始する方法として,メニュ バーから開始する方法とエディタ ウ ィンドウから開始する方法があります。 5-22 (2) 「新規クエリウィザード」ようこそ 画面が表示されたら,クエリ名,実装,説明を 入力後,[次へ]ボタンをクリックします。 画面上で設定する値は次のとおりです。 項目 新しいクエリの名前 を入力してください 実装 新しいクエリの説明 値 LookUp1 「このクエリは SQL 文で定義されている」を選択し ます。 外部からパラメータとして都道府県名(漢字)を指定 して,該当するデータの OID を取得する。 画面上の項目に関する解説は次のとおりです。 項目 新しいクエリの名前 を入力してください (必須) 実装 (必須) 値 新規クエリの名前。 これは、有効なクエリ名でなければなりません。 また、定義済みの既存のクエリと同じ名前を付けるこ とはできません。 名前に関する一般的な説明は、Caché オブジェクトの 使用法 の Caché クラス の章を参照してください。 これが SQL 文を基にしたクエリ(ウィザードで生成 された)か、ユーザ記述のコードを基にしたクエリ(ク エリ実装でコードを提供する必要がある)であるかを指 定します。 5-23 項目 新しいクエリの説明 (オプション) 値 新規クエリに対する説明。 この説明は、クラス・ドキュメントがオンライン・ク ラス・ライブラリ・ドキュメントで表示されるときに、 使用されます。 説明には、HTML フォーマット・タグも含まれます。 詳細は、 クラス定義言語リファレンスの 解説での HTML の使用法 を参照してください。 5-24 (3) 「新規クエリウィザード」入力パラメータ画面が表示されたら,パラメータの追加を 行うために[追加]ボタンをクリックします。 5-25 (4) 「引数」画面が表示されたら,引数(パラメータ)の名前,タイプ,既定値を入力後 [OK]ボタンをクリックします。 画面上で設定する値は次のとおりです。 項目 名前 タイプ Default 値 Fuken %String (設定する値はありません) 画面上の項目に関する解説は次のとおりです。 項目 名前 (必須) タイプ (必須) Default (オプション) 値 引数(パラメータ)の名前を設定します。クエリの条 件を設定する時に使用します。 データタイプを指定します。直接入力することも, […]ボタンをクリックしてダイアログから選択するこ ともできます。 引数の初期値を設定することができます。 5-26 (5) 引数の確認後[次へ]ボタンをクリックします。 2 つめ以降の引数を設定する場合には,画面上の[追加]アイコンをクリックして必要分 の引数を定義します。 5-27 (6) 「新規クエリウィザード」カラム画面で,クラスクエリの結果として呼び出し元プロ グラムに通知するカラム(出力カラム)を定義します。 画面上左側の一覧表には選択可能なカラムが表示されていますので,適切なカラムを選択 後[>]ボタンをクリックします。選択されたカラムは画面右側の一覧表にセットされます。 画面上中央のボタンに関する解説は下記のとおりです。 ボタン 解説 > クラスに定義されているカラムを出力カラムに設定します。 < 出力カラムに設定したカラムを出力対象から除外します。 >> クラスに定義されている全てのカラムを出力カラムに設定します。 << 出力カラムに設定されたカラムを全て出力対象から除外します。 5-28 (7) 「新規クエリウィザード」カラム画面で,クラスクエリの結果として呼び出し元プロ グラムに通知するカラム(出力カラム)を定義後,[次へ]ボタンをクリックします。 5-29 (8) 「新規クエリウィザード」条件画面でクラスクエリのデータ検索条件を定義します。 画面上の各項目(フィールド名,条件,表現,複合条件)を選択後, [次へ]ボタンをク リックします。「表現」には値を設定することができます。例えば,‘北海道’ 「新規クエリウィザード」条件画面では,条件を 3 つまでしか定義できませんが,4 つめ 以降の条件については Caché スタジオのエディタ ウィンドウで編集することができます。 5-30 (9) 「新規クエリウィザード」照合順画面でクラスクエリのデータの照合順(並び順)を 定義します。 画面上の項目(照合順項目,昇降順区分)を選択後,[次へ]ボタンをクリックします。 「新規クエリウィザード」照合順画面では,照合順条件を 3 つまでしか定義できませんが, 4 つめ以降の条件については Caché スタジオのエディタ ウィンドウで編集することができ ます。 5-31 (10) 以上の手順でクラスクエリを定義すると,Caché スタジオのエディタ ウィンドウに 定義した内容が表示されます。 今回定義した「LookUp1」の内容は下記のようになりました。 /// 外部からパラメータとして都道府県名(漢字)を指定して,該当するデータの OID を取得する Query LookUp1(Fuken As %String) As %SQLQuery(CONTAINID = 1) { SELECT %ID FROM ZIPTBL WHERE (PrefKG = :Fuken) } SQL Select コマンドの部分はごく一般的な SQL コマンドです。WHERE 句を変更したり Order By 句を追加することができます。 クラスクエリの内容を変更したら必ずコンパイルを実施してください。もしクラスクエリ の SQL Select コマンドに誤りがある場合には,エラー・メッセージが出力されます。 5-32 5.2.3 クエリを実行する Caché スタジオで作成したクエリの動作を確認しましょう。 クラスクエリの動作を確認するのに Caché ターミナルを利用することができます。Caché ターミナルを利用すると各種の Caché Object Script コマンドやクラスメソッド,クラスクエ リを対話的にテストすることが可能です。 (1) Caché ターミナルを起動します。 Caché キューブをクリックして Caché ターミナルを起 動します。 Caché ターミナルが 起動したら ネームスペ ースを 「YUBIN」に変更します。 こ こまでの操作が正常に終了すると下記の画面のよ うになります。 5-33 (2) クラスクエリを実行します。 クエリを実行する場合には,Caché が提供する%ResultSet クラスの RunQuery メソッドを 使用します。 %Resultset クラスの RunQuery メソッドについての詳細は,Caché のドキュメントで確認 することができます。 Caché キューブをクリック→メニュの「ドキュメント」を選択→「Caché Class Reference」 →「%Libray」→「ResultSet」の手順で選択していくと下記の画面が表示されます。 今回定義したクラスクエリ LookUp1 をテストするコマンドは下記のとおりです。 ##class(%ResultSet).RunQuery(“ZIPTBL”,”LookUp1”,”北海道”) %ResultSet クラス(正確には,%Library.ResultSet クラス)の RunQuery メソッドは次のよ うな引数を使用します。 (詳細は先のドキュメントにてご確認下さい。 ) 引数 第 1 引数 第 2 引数 第 3 引数∼ 第 16 引数 意味 実行するクラスを指定します。 実行するクラスクエリを指定します。 実行するクラスクエリに定義されている引数を必要なだけ指定しま す。(最大 14 個まで) 第 3 引数に指定されている「北海道」 はクラスクエリ LookUp1 に定義されている引数 Fuken に引き渡されます。以下同様にクラスクエリに複数の引数が定義されている場合には,そ の定義された順番に従って RunQuery メソッドの括弧の中で指定します。 5-34 このコマンドを実行して結果を表示するために,先頭に「do」コマンドを付加します。 完全なコマンドは下記のとおりです。 do ##class(%ResultSet).RunQuery(“ZIPTBL”,”LookUp1”,”北海道”) このコマンドを実行すると,LookUp1 で指定した「都道府県名(漢字)イコール“北海道”」 に該当するデータが存在しますので,検索結果として ID(内容は OID;オブジェクト識別 子)が画面上に表示されます。 では,クエリパラメータに“沖縄県”を指定したらどうなるでしょうか? 郵便番号データベース(User.ZIPTBL)のデータとして,都道府県名(漢字)に“沖縄県” の値を持つデータは検索できません。従って検索結果としての ID は,空文字列が画面上に 表示されます。 以上のような手順でクラスクエリの動作確認を行うことができます。 クラスクエリは VisualBasic プログラムなどから呼び出されて利用されることがあります が,VisualBasic プログラムとの連携処理をテストする前に,今回のように Caché ターミナ ルでクラスクエリの動作確認をすることをお薦めします。 5-35 5.3 インデックスを利用する 郵便番号データベース(User.ZIPTBL)クラスに対してインデックス(索引)を作成して みましょう。 郵便番号データベース(User.ZIPTBL)クラスに日本全国の郵便番号データを登録すると 約 14 万件のデータを格納することとなります。 約 14 万件のデータに対して検索を行うと,Caché は全てのデータを読み込んで検索条件 を満足するかの確認処理を行います。このような処理は非効率で処理時間がかかります。 そこで,検索処理時間を短縮する目的で,検索対象となる項目を指定してインデックス(索 引)を設定することができます。その項目(プロパティ)が検索項目となるのか予測がで きない場合には,全ての項目をインデックスとして指定することも可能です。ただし実用 面から考えるとインデックス項目が増えるほどデータの追加・更新処理にかかる時間が大 きくなります。経験的には 10 項目∼15 項目までにするべきでしょう。 インデックスには,複数項目を組み合わせたインデックスを指定することも可能です。例 えば,「都道府県名(漢字)と市区町村名(漢字)」でインデックス指定をする,といった ことができます。 インデックス(索引)を作成すると,コンピュータのハードディスクの領域を消費します。 しかし,Caché の場合,インデックス情報を可変長データとして格納すること,構造上デー タの圧縮効果があること,などの特徴により,あまりハードディスクの消費領域について 神経質になる必要はありません。 ※ 既存のデータに対しての注意点 ※ データが格納されているクラスに対して,後からインデックスの指定を行っても,すでに 格納されているデータに対しては遡って自動的にインデックスは作成されません。 (このよ うな場合には,Caché SQL マネージャの「インデックス再構築」ユーティリティを使用して インデックスを作り直すことができます。) 5-36 5.3.1 インデックスを設定する インデックスの設定は Caché スタジオで行います。(もし SQL コマンド Create Index コ マンドでインデックスの設定を実施する場合には,CachéSQL マネージャでクエリを実行し て下さい。) 本章で定義するインデックスの内容は下記のとおりです。 項目 インデックスの名前 インデックスの説明 インデックスのタイプ インデックスの実装 プロパティ 照合 照合パラメータ 値・内容 PrefKGIDX1 都道府県(漢字)プロパティに対するインデックス 「通常:1つ以上のプロパティのインデックスを維持 するために使用される」を選択します。 「標準インデックス」を選択します。 PrefKG (設定しません) (設定しません) 5-37 (1) Caché キューブのメニュから「スタジオ」を起動します。 Caché ス タ ジ オ で ネ ー ム ス ペ ー ス 「 YUBIN 」 を 選 択 し , 郵 便 番 号 デ ー タ ベ ー ス (User.ZIPTBL)クラスをダブル クリックしてそのコードをエディタ ウィンドウに表示し てください。 (この手順の詳細な解説は 5.2.2 項でご確認下さい。) Caché スタジオのメニュ アイコンから「新規インデックス」アイコンをクリックします。 インデックスを設定する画面は,メニュ アイコンで「新規インデックス」ボタンをクリ ックする方法以外に 2 つの方法があります。 1 つはメニュ バーから「クラス」→「追加」→「新規インデックス」を選択する方法で す。 もう 1 つはエディタ ウィンドウ上で右クリックして表示されるサブメニューから「追加」 →「新規インデックス」を選択する方法です。 いずれの方法を実施した場合でも「新規インデックスウィザード」画面(次 Page)が表 示されます。 5-38 (2) 「新規インデックスウィザード」ようこそ画面が表示されます。 画面上に値を入力後[次へ]ボタンをクリックします。 画面上で設定する値は次のとおりです。 項目 インデックスの名前 インデックスの説明 値 PrefKGIDX1 都道府県(漢字)プロパティに対するインデックス 画面上の項目に関する解説は次のとおりです。 項目 インデックスの名前 (必須) インデックスの説明 (オプション) 値 新規インデックスの名前。 これは、有効なインデックス名でなければなりませ ん。また、定義済みの既存のインデックスと同じ名前を 付けることはできません。 名前に関する一般的な説明は、Caché オブジェクトの 使用法 の Caché クラス の章を参照してください。 新規インデックスに対する説明。 この説明は、クラス・ドキュメントがオンライン・ク ラス・ライブラリ・ドキュメントで表示されるときに、 使用されます。 説明には、HTML フォーマット・タグも含まれます。 詳細は、クラス定義言語リファレンスの 解説での HTML の使用法 を参照してください。 5-39 (3) 「新規インデックスウィザード」インデックスタイプ画面が表示されます。 画面上の値を確認後[次へ]ボタンをクリックします。 画面上で設定する値は次のとおりです。 項目 インデックスの タイプ インデックスの実装 値 「通常:1つ以上のプロパティのインデックスを維持 するために使用される」を選択します。 「標準インデックス」を選択します。 画面上の項目に関する解説は次のとおりです。 項目 通常インデックス ユニーク 値 通常インデックスは、プロパティ値のインデックス作 成に使用されます。以下のオプションの 1 つを選択す るとこで、通常インデックスを詳細に定義することがで きます。 このインデックスに関連する一連のプロパティは、こ のクラスのオブジェクトのエクステント内で一意であ る、結合した値を持つ必要があります。 5-40 項目 IDKEY 値 このインデックスに関連する一連のプロパティは、デ ータベースにこのクラスのインスタンスを保存するの に使用される、オブジェクト ID を作成するのに使用さ れます。オブジェクトが一度保存された後は、IDKEY 定 義の一部であるプロパティ値を変更することはできま せん。IDKEY は、プロパティは一意であることを意味 しています。 (ユニーク・インデックスと同様) SQL 主キー このインデックスに関連する一連のプロパティは、こ のクラスに対して投影された SQL テーブルの SQL 主キーとして報告されます。 SQL 主キーは、プロパティは一意であることを意味 しています。 (ユニーク・インデックスと同様) エクステント・ インデックス エクステント・インデックスは、オブジェクトの複数 のクラス・エクステント内で、特定のクラスに属してい るオブジェクトを記録するために使用されます。これ は、追加の属性を指定できない点で、通常インデックス とは異なります。 標準インデックス このインデックスは、指定されたプロパティでの従来 のクロス・インデックスです。 ビットマップ・ インデックス このインデックスは、Caché のビットマップ・インデ ックス・テクノロジーを使用して実装されます。Caché SQL の現在のバージョンは、ビットマップ・インデッ クスの利点を活用することはできません。 5-41 (4) 「新規インデックスウィザード」インデックプロパティ画面が表示されます。 インデックスとして使用するプロパティを定義するために[追加]ボタンをクリックしま す。(最低 1 つのプロパティを定義する必要があります。) 2 つ以上のプロパティを定義した場合には,多階層的なインデックス構造となります。 「属性」画面でプロパティ,照合,照合パラメータを選択(設定)後[OK]ボタンをク リックします。(5) 「新規インデックスウィザード」インデックプロパティ画面に設定した 値が反映され表示されます。 5-42 ※ 照合についての補足 * 「照合」についての詳細は Caché ドキュメントでご確認下さい。ドキュメントのページは 下記のとおりです。 http://127.0.0.1:1972/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_indices#GOBJ_C2935 インデックス照合とは… Attribute インデックス・キーワードで指定された各プロパティは、オプションの照合タイ プを持つこともできます。照合タイプをプロパティに対して指定すると、データが並べ替 えられ、インデックスに格納される前に各インスタンスのプロパティの値が、指定された 方法で変換されます。照合が指定されない場合は、プロパティの照合値が使用されます。 この値は、プロパティのデータ型から継承されます。 Unique インデックス、PrimaryKey インデックス、および IDKey インデックス・キーワ ードが指定されている場合、プロパティ照合はインデックスで上書きできません。また、 IDKey が指定されている場合、照合は常に EXACT と見なされます。(IDKey コンポーネ ントに対するインデックス内、および SQL での比較と並べ替えの両方) 例えば大文字への変換を行う SQLUPPER などの照合変換は、大文字と小文字を区別しな いインデックスを使用した検索を行います。 照合タイプにの解説は下記のとおりです。 項目 ALPHAUP EXACT MINUS 値 お勧めしません。 疑問符(“ ?” )およびコンマ(“,”)以外の句読点文字 をすべて削除し、小文字をすべて大文字に変換します。 何も変換しません。 数値で始まる文字列値がある文字列データ(例えば '123'、'123abc'、または '-123abc')に対しては使用しな いでください。 お勧めしません。 値を数値にし、その符号を変更します。 PLUS お勧めしません。 値を数値にします。 SPACE SQLSTRING SQLUPPER お勧めしません。 値を文字列に変換します。 文字列の変換は行わず、文末の空白(スペースやタブ、 その他)を削除します。空白(スペースやタブ、その他) のみのすべての値を、SQL 空文字列として照合します。 すべてのアルファベット文字を大文字に変換し、文末 の空白(スペースやタブ、その他)を削除します。空白 (スペースやタブ、その他)のみのすべての値を、SQL 空文字列として照合します。 5-43 項目 SQLUPPER STRING 値 すべてのアルファベット文字を大文字に変換し、文末 の空白(スペースやタブ、その他)を削除します。空白 (スペースやタブ、その他)のみのすべての値を、SQL 空文字列として照合します。 お勧めしません。 論理値を大文字に変換し、すべての句読点と空白(コ ンマを除く)を削除します。空白(スペースやタブ、そ の他)のみのすべての値を、SQL 空文字列として照合 します。 UPPER お勧めしません。 小文字をすべて大文字に変換します。 5-44 (5) 「新規インデックスウィザード」インデックプロパティ画面が表示されます。 画面上の値を確認後[次へ]ボタンをクリックします。 5-45 (6) 「新規インデックスウィザード」インデックスデータ画面が表示されます。 画面上の値を確認後[次へ]ボタンをクリックします。 「新規インデックスウィザード」インデックスデータ画面では、インデックスに保存され るすべてのプロパティに対するデータのコピーを作成する場合に指定します。 ビットマップ・インデックスでは、データ値のコピーを保存することはできません。 画面上で設定する値は次のとおりです。 項目 ――― 値 (設定しません) 5-46 以上の手順でインデックスの設定を行うと Caché スタジオのエディタ ウィンドウに下記 のようにインデックス情報が追加されます。 今回定義した「LookUp1」の内容は下記のようになりました。 /// 都道府県名(漢字)プロパティに対するインデックス Index PrefKGINDX1 On PrefKG; インデックスを設定後,コンパイルを実施してください。 5-47 5.3.2 インデックスの再構築をする(Caché ターミナル) Caché キューブをクリックして Caché ターミナルを起 動します。 Caché ターミナルが 起動したら ネームスペ ースを 「YUBIN」に変更します。 こ こ までの操作が正常に終了すると下記の画面のよ うになります。 5-48 インデックスの再構築は,郵便番号データベース(User.ZIPTBL)クラスのスーパークラ スである%Library.Persistent のクラスメソッド%BuildIndices を使用します。 郵 便 番 号 デー タ ベ ー ス( User.ZIPTBL) ク ラ ス は , ス ー パー ク ラ ス (継 承 元 ) と し て%Library.Persistent を宣言しています。 Caché スタジオのエディタ ウィンドウに Class User.ZIPTBL Extends %Persistent [ ClassType = persistent, ProcedureBlock ] と記載されています。この「Extends %Persistent」部分でスーパークラスに%Library.Persistent を宣言しています。 (%Library.Persistent の詳細については Caché ドキュメントでご確認下さ い。( Caché キューブをクリック→メニュのドキュメントを選択→Caché Class Reference →%Libray→Persistent) このようにスーパークラスの宣言されていますので,郵便番号データベース (User.ZIPTBL)では%Library.Persistent のクラスメソッドを利用することができます。 下記のコマンドを実行してインデックスの再構築を行います。 do ##class(User.ZIPTBL).%BuildIndices("") インデックスの再構築が正常に完了したかを確認するためには,実際にクラスクエリや SQL コマンドを利用して動作確認を行う必要があります。 今回のようにインデックスが設定されていない状態から,インデックスの設定を行った場 合には,Caché エクスプローラでインデックスデータが存在することを確認して,インデッ クスの再構築が正常に完了したと見なすことも可能です。 5-49 ※ Caché エクスプローラでのインデックスデータ確認方法 ※ Caché エクスプローラを起動します。(Caché キューブ をクリックして「エクスプローラ」を選択します。) Caché エクスプローラ画面 が表示されたら次の手順で 「^User.ZIPTBLI」を探してみましょう。 Caché エクスプローラ画面左側のウィンドウで「ネームスペース」→「YUBIN」→「グロ ーバル」を選択すると Caché エクスプローラ右側の画面にグローバルのリストが表示され ます。その中から「^User.ZIPTBLI」を確認しましょう。 今回の例では, 「^User.ZIPTBLI」を確認できればインデックスの再構築は正常に終了した と判断できます。(本来は「^User.ZIPTBLI」の内容を確認する必要があります。) 5-50 5.3.3 インデックスの再構築をする(CachéSQL マネージャ) Caché キューブをクリックして CachéSQL マネージャを 起動します。 CachéSQL マネージャが起動したらネームスペースを「YUBIN」に変更します。 CachéSQL マネージャの画面左側のウィンドウで次の手順で選択しましょう。 「YUBIN」→[SQLUser]→「テーブル」→「ZIPTBL」 「ZIPTBL」アイコン上で右クリックしてサブメニューを表示します。 サブメニューが表示されたら「インデックスの再構築」を選択しましょう。 ** CachéSQL マネージャの利用方法の詳細については,「5.2.1 タを検索する」でご確認下さい。 5-51 SQL コマンドでデー CachéSQL マネージャは処理開始の確認メッセージを表示しますので,内容を確認し適切 なボタンをクリックしてください。 上記画面で[はい]ボタンをクリックすると,CachéSQL マネージャはインデックスの再 構築を開始します。 インデックスの再構築が終了すると,CachéSQL マネージャ画面上に終了メッセージが表 示されます。 インデックスの再構築を実施した結果の確認方法は「5.3.2 インデックスの再構築をする (Caché ターミナル)」でご確認下さい。 5-52 6 VisualBasic プログラムの例 お願い: 本書は第 1 章から第 6 章へ順番に内容を確認していただくように構成しています。従って 途中の章からプログラムを作成しても上手く動作しない可能性があります。ご了承くださ い。もし,この章からプログラム作成を始める場合には,第 2 章から第 5 章を参考に郵便 番号データベースの定義とデータ格納を事前に実施して下さい。 VisualBasic を使用して郵便番号データを Caché の郵便番号データベース(User.ZIPTBL) に格納するプログラムを作成します。データ格納プログ ラムが完成したら,作成した User.ZIPTBL のデータを参照する処理を追加します。この時,User.ZIPTBL クラスにデータ 参照用のクエリを追加します。 郵便番号データを次のような内容で処理します。 No. 処理 1 処理 2 処理 3 処理内容 使用する郵便番号データファイルは「01hokkai.csv(北海道)」とします。 ただし,利用者が郵便番号データファイルを選択できるようにしておきます。 VisualBasic プログラムが起動されたら,Caché に接続するダイアログの表示 を行い利用者が接続先を選択できるようにします。 VisualBasic プログラムで郵便番号データを 1 件ずつ読みこんで,User.ZIPTBL クラスにデータを格納します。 (注意事項) 郵便番号データは,各項目はカンマ(,)で区切られています。 また,各項目値はダブルクオーテーションで囲まれています。 VisualBasic プログラムでは読みこんだ郵便番号データをカンマで区切り,ダ ブルクオーテーションを取り除く処理を行う必要があります。 郵便番号データの格納処理が完成したら次の内容の処理を追加します。 No. 処理 4 処理 5 処理 6 処理内容 User.ZIPTBL クラスに新郵便番号(7 桁)を指定してデータを検索するクエリ (LookUpZip7)を定義します。 VisualBasic プ ロ グ ラ ム か ら , 新 郵 便 番 号 ( 7 桁 ) を 指 定 し て ク エ リ (LookUpZip7)を呼び出します。 都道府県名(漢字),市区町村名(漢字)町域名(漢字)データを取り出して, 画面上に表示します。 User.ZIPTBL クラスに新郵便番号(7 桁)プロパティを使用したインデックス (Zip7IDX)を定義し,インデックスの再構築を実施します。 なお,本書では VisualBasic バージョン 6 を使用しています。 それでは,郵便番号データ格納処理を上記の処理順序に従って作成してみましょう。 6-1 6.1 郵便番号データファイルの指定(選択) 処理 1 使用する郵便番号データファイルは「01hokkai.csv(北海道)」とします。 ただし,利用者が郵便番号データファイルを選択できるようにしておきます。 本章を始める前に,本章のプログラムで使用する郵便番号データファイルを「C:¥YUBIN」 に格納してください。(格納先は C:¥YUBIN 以外でも問題ありません。) 郵便番号データは本書に添付されている CD-ROM からコピーできます。 もし,最新の郵便番号データを利用したい場合には,下記の日本郵政公社のホームページ からダウンロードすることができます。 日本郵政公社のホームページアドレス http://www.post.yusei.go.jp/zipcode/download.html 6-2 6.1.1 VisualBasic の起動 VisualBasic を起動します。(VisualBasic の起動方法は,お使いになるコンピュータにより 異なります。スタートボタンをから VisualBasic を起動して下さい。) 本書では VisualBasic バージョン 6 を使用しています。 6-3 6.1.2 新しいプロジェクトの追加 「新しいプロジェクト」画面が表示されます。 「新規作成」タグの「標準 EXE」を選択して[開く]ボタンをクリックします。 通常使用するプログラムはこの「標準 EXE」を選択して作成します。VisualBasic では, 標準 EXE の他にもいろいろなプログラムの作成方法が提供されています。本書ではそれぞ れについて詳細な説明を記載しませんので,必要に応じて VisualBasic の専門書,解説書等 にて確認して下さい。 6-4 VisualBasic でプログラムを作成するための画面が表示されます。この画面の表示内容はお 使いのコンピュータと異なるかもしれません。画面の表示内容は自由に変更できるためで す。例えば,プロパティウィンドウを表示しないようにすることができます。 この画面に名前をつけましょう。名前は,frmYUBIN とします。 VisualBasic の画面右下(上記の画面例の場合)に「プ ロパティ−Form1」と書かれた部分(プロパティウィン ドウといいます)があります。 このプロパティウィンドウの「(オブジェクト名)」を 「frmYUBIN」と入力して[Enter]キーを押下します。 プロパティウィンドウの見出しが 「プロパティ−frmYUBIN」に変更されます。 また,見出しの下に 「frmYUBIN Form」と表示されます。 6-5 VisualBasic の画面右上(上記の画面例の場合)に 「プロジェクト−Project1」と書かれた部分(プロジェ クトエクスプローラ)があります。 この中の「フォーム」の下に 「frmYUBIN(frmYUBIN)」 が追加されたことが確認できます。 以上でこの画面の名前は frmYUBIN と命名されまし た。 ここで一旦このプログラム(VisualBasic では,プロジェクトといいます)を保存しましょ う。 VisualBasic のメニュ バーから「ファイル」→「名前を付けてプロジェクトの保存」を選 択します。(メニュ アイコンから「プロジェクトの上書き保存」 アイコンをクリックすることもできます。) VisualBasic はプロジェクトとプロジェクトに含まれる各モジュール(フォーム,等)を保 存する場所とその名称の問い合わせをします。 本書では,フォームモジュールを「frmYUBIN.frm」という名前で C ドライブの「YUBIN」 フォルダ(C:¥YUBIN)に格納することとします。 お使いのコンピュータの状況に応じてフォームモジュール名,格納先フォルダを変更して 下さい。 画面上の内容を確認後[保存]ボタンをクリックします。 6-6 [保存ボタン]をクリックすると,次にプロジェクトを保存する場所とその名称の問い合 わせがされます。 本書では,プロジェクト名を「YUBIN.vbp」という名前で,C ドライブの「YUBIN」フォ ルダ(C:¥YUBIN)に格納することとします。 お使いのコンピュータの状況に応じてフォームモジュール名,格納先フォルダを変更して 下さい。 画面上の内容を確認後[保存]ボタンをクリックします。 以上でプロジェクトとフォームの保存が完了しました。 6-7 6.1.3 画面を構成する 画面 frmYUBIN 上に郵便番号ファイル名を指定する場所と,利用者が郵便番号ファイルを 自由に選択できるように選択ボタンを追加します。 郵便番号ファイル名を指定する場所は,VisualBasic が提供する TextBox コンポーネントを使用します。 画面左側に表示されているツールボックスの TextBox アイコンをクリック します。 TextBox アイコンは少しくぼんだような表示 になります。この状態が TextBox コンポーネントを使用できるようになったことを表しています。 この状態のまま,frmYUBIN の上で適当な位置にクリックして TextBox の始点を決め,マ ウスのボタンを押したままの状態で TextBox の終点位置までマウスポインターを移動させ マウスのボタンを離します。これで画面上に TextBox が1つ作成されます。 TextBox を画面上に作成することができましたが,これではいろいろな指定値(各プロパ ティの値)が VisualBasic の既定値の状態です。 この TextBox のプロパティウィンドウに必要な値を入力します。 6-8 変更点 (1) オブジェクト名を,txtFileID とします。 (2) Text プロパティを「C:¥YUBIN¥01hokkai.csv」に変更しましょう。(現在は「Text1」と 表示されています。) 以上の設定内容が正常に動作するかを確認してみましょう。 正常に動作すれば画面上に TextBox が表示され,その中に「C:¥YUBIN¥01hokkai.csv」と 表示されるはずです。 6-9 ※ プログラムを自動的に保存する ※ VisualBasic では,プログラムを動作させる前に,プログラムの内容を保存することが望ま しいとされています。そこで,プログラム実行前にプログラマが毎回プログラム保存作業 をするかわりに VisualBasic のオプションを設定することで,自動的に保存作業を行うこと ができます。 VisualBasic のメニュから「ツール」→「オプション」を選択します。 オプション設定画面の「環境」タ グをクリックして, 「プログラムの起 動時:」のオプション項目を指定す ることができます。 プログラム起動時に必ずプログラ ムを保存する場合は「変更点を保存」 を選択します。 本書では,プログラム実行時に利 用者に保存の確認をすることとしま すので「確認後に保存」を選択しま す。 もう 1 箇所のオプションを確認します。 編集タグの「変数の宣言を強制す る」がチェックされているかを確認 して下さい。 このオプションは,VisualBasic プ ログラムを作成していく上で変数に 関する不用意なバグ(プログラム障 害)の発生を回避するという意味で 非常に重要です。 6-10 ※ プログラムの実行方法 ※ VisualBasic プログラムの実行には,3 通りの方法があります。いずれかの方法でプログラ ムを実行して下さい。 (1) メニュ バーの「実行」→「開始」を選択する方法 (2) メニュアイコンの「開始」アイコンをクリックする方法 (3) ファンクションキー「F5」を押下する方法 上述の「プログラムの起動時:」のオプ ション項目「確認後に保存」に設定すると 右図の「変更点保存の確認」画面が表示さ れます。(ただしプログラムを変更した場 合のみ表示されます。) 本書では,[はい]ボタンをクリックし て変更点を保存後,プログラムを実行しま す。 画面上のボタンとその解説は下記のとおりです。 ボタン [はい] ボタン [いいえ] ボタン 「キャンセル」 ボタン 解説 変更点を保存した後にプログラムを実行する場合に使 用します。 変更点を保存したくない場合に使用します。 プログラムの実行を中止する場合に使用します。 VisualBasic のプログラムが正常に動実行され画面が表示されましたか? 6-11 ※ プログラムの終了方法 ※ VisualBasic プログラムの終了には,3 通りの方法があります。いずれかの方法でプログラ ムを終了して下さい。 このプログラムの終了は,3 通りの方法があります。 (1) メニュバーの「実行」→「終了」を選択する方法 (2) メニュアイコンの「終了」ボタンをクリックする方法 (3) プログラムコードで終了する方法 これであなたも VisualBasic プログラマの仲間入りです。 本書はこれから先も詳細な解説を進めてゆきますが,解説の重複は極力避けています。 もし,VisualBasic のプログラム作成そのものに疑問を持たれたり,より探求することを望 まれる場合は VisualBasic の専門書,解説書を活用することをおすすめします。 6-12 6.1.4 ファイル選択処理の追加 利用者が郵便番号データファイルを選択できるようにプログラムコードを追加してみま しょう。 目標は下記の画面をすることです。 (表示内容は若干異なる可能性があります。) 郵便番号データファイルを選択できるようにするために,コモンダイアログを使用します。 画面上に[検索]ボタンを追加し, [検索]ボタンがクリックされたら郵便番号データファ イル選択用のダイアログボックスが表示されるようにします。 既定値の状態の VisualBasic プロジェクトでは,コモンダイアログが使用できる状態にな っていません。(表示中のツールボックスにコモンダイアログコンポ ーネントのアイコンが表示されていません。) コモンダイアログコンポーネントをツールボックスに追加する方法は 2 通りあります。 (1) メニュから「プロジェクト」→「コンポーネント」を選択する方法。 (2) ツールボックス上で右クリックして,「コンポーネント」を選択する方法。 いずれかの方法を実行するとコンポーネント追加(削除)のダイアログが表示されます。 6-13 コモンダイアログコンポーネントは,「Microsoft Common Dialog Control 6.0(SP3)」(Visual Basic バージョン 6 の場合)で登録されていますので,これを探してチェックボックスに[レ] を付け,[OK]ボタンをクリックします。(SP3 の部分は,お使いの環境によって異なりま す。) [OK]ボタンをクリックすると,VisualBasic のツールボックスに コモンダイアログコンポーネントのアイコンが表示されます。 このコモンダイアログコンポーネントのアイコンをツールボックス上でクリックしてお き,画面上の適当な位置に配置します。(TextBox を画面上に作成したのと同じ要領です。 なお,画面上に配置したコモンダイアログボックスコンポーネントは,VisualBasic プログ ラム実行時には画面上に表示されません。) コモンダイアログコンポーネントは,画面上にコモンダイアログコンポーネントを配置し ただけでは動作することができません。VisualBasic のプログラムでコモンダイアログコン ポーネントを利用するためのコードを記述する必要があります。 そこで画面上に[検索]ボタンを作成し,検索ボタンのクリックイベントにコモンダイア ログコンポーネントを利用するコードを記述します。 ツールボックスのコマンドボタンコンポーネントのアイコンを クリックして,画面上の適当な位置に配置します。 6-14 このコマンドボタンのプロパティウィンドウで,コマンドボタンの名称と画面上の見出し を編集しましょう。 No. 1 2 項目 コマンドボタンの名称 画面上の見出し プロパティ名 (オブジェクト名) Caption No.1 No.2 以上の設定を実施すると次のような画面になります。 6-15 設定値 cmdKensaku 検索 検索ボタンをクリックした時にファイル選択用のダイアログを表示するように, [検索] ボタンの「Click イベント」に下記のコードを追加しましょう。(添付の CD-ROM から本書 を MS-WORD 等で読み込んで使用する場合には,必要なコードをコピーして VisualBasic の コード画面に貼り付けることができます。) Private Sub cmdKensaku_Click() With frmYUBIN ' CancelError プロパティを真 (True) に設定します。 .CommonDialog1.CancelError = True On Error GoTo ErrHandler ' Flags プロパティを設定します。 .CommonDialog1.Flags = cdlOFNHideReadOnly ' リスト ボックスに表示されるフィルタを設定します。 .CommonDialog1.Filter = "郵便番号データファイル (*.csv)|*.csv|" & _ "テキスト ファイル (*.txt)|*.txt|" & _ "すべてのファイル (*.*)|*.*" ' "テキスト ファイル" を既定のフィルタとして指定します。 .CommonDialog1.FilterIndex = 1 .CommonDialog1.InitDir = "C:¥YUBIN" .CommonDialog1.FileName = "01hokkai.csv" ' [ファイルを開く] ダイアログ ボックスを表示します。 .CommonDialog1.ShowOpen ' ユーザーが選択したファイル名を表示します。 MsgBox .CommonDialog1.FileName .txtFileID.Text = .CommonDialog1.FileName '選択されたファイル名を画面上に表示する End With Exit Sub ErrHandler: ' ユーザーが [キャンセル] をクリックしました。 Exit Sub End Sub 注意事項: (1) 各行の先頭にシングル・コーテーションマーク“’”が付いている行はコメント行です。 プログラムの実行には影響を与えません。 (2) 各行の最後がアンダーバー“_”で終わっている行は継続行です。次の行と連結され て実行されます。 6-16 コモンダイアログコンポーネントを使用する部分のプログラムコードに関する詳細な解 説は記載しませんので,必要に応じて VisualBasic のヘルプ等で確認して下さい。キーワー ドとして「CommonDialog (コモン ダイアログ コントロール)」の「コモン ダイアログ (CommonDialog) コントロール ([ファイルを開く] ダイアログ ボックスおよび [ファイル 名を付けて保存] ダイアログ ボックス)」を指定して下さい。 後で使用することになりますので,画面上に[処理開始]ボタンとデータ表示エリアを追 加しておきましょう。 部品 [処理開始] ボタン データ表示エリア 説明 コンポーネント (オブジェクト名) Caption コンポーネント (オブジェクト名) Caption CommandButton cmdStart 処理開始 Label lblYubin (なし) 以上の設定を実施すると次のような画面になります。 6-17 6.2 Caché への接続 処理 2 VisualBasic プログラムが起動されたら,Caché に接続するダイアログの表示を行い利用者 が接続先を選択できるようにします。 VisualBasic プログラムが Caché に接続してデータアクセスを行うために,Caché への接続 ダイアログを表示する処理を追加します。 Caché への接続ダイアログを表示する処理を追加する前に,VisualBasic プロジェクトにラ イブラリファイル「Caché Object」の参照設定をする必要があります。 VisualBasic メニュで「プロジェクト」→「参照設定」を選択すると,参照設定ダイアログ が表示されます。参照可能なライブラリファイル一覧の「CacheObject」を選択してチェッ ク([レ])を付けます。(ご利用のコンピュータに Caché がセットアップされていないと 「CacheObject」は表示されません。) [OK]ボタンをクリックして VisualBasic 画面に戻ります。 (VisualBasic 画面に表示内容 の変化はありません。) 6-18 ※ 重要 ; CacheObject.Factory の宣言 ※ Caché Object のライブラリファイル参照を設定したら,frmYubin のプログラムコードの先 頭に下記のコードを追加して下さい。 Private Cache As CacheObject.Factory frmYubin が処理を開始したら Caché への接続ダイアログを表示したいので,frmYubin の Form_Load イベントに下記のコードを追加します。 Private Sub Form_Load() Dim ok As Boolean Dim connect As String connect = "" ' CacheObject.Factory クラスのインスタンスを生成します Set Cache = CreateObject("CacheObject.Factory") ' Cache との接続が確立されているかを確認する If Not Cache.IsConnected() Then ' 接続ダイアログを表示して接続先アドレスを取得する connect = Cache.ConnectDlg ' 接続処理を実施する ok = Cache.connect(connect) ' 接続処理結果を画面上にセットする lblYubin.Caption = connect & vbCrLf & "結果:" & ok End If End Sub 6-19 上記のコードが実行されると次のような画面が表示されます。 「YUBIN」を選択して, [OK]ボタンをクリックします。 Caché への接続処理が正常終了すると,画面上に「結果:True」のメッセージが表示され ます。 6-20 Caché への接続処理は,Caché の接続ダイアログを表示して実施することができますが, 実際の業務プログラムでは利用者に Caché の接続ダイアログを見せる必要はない場合がほ とんどです。 Caché の接続ダイアログを表示せずに Caché Object に接続するには,下記のようにプログ ラム中で記述することで対応することができます。 ok = Cache.connect(“cn_iptcp:127.0.0.1[1972]:YUBIN”) 指定すべき内容は下記の通りです。 (「.」,「:」, 「[] ,「」」を省略することはできません。) 値 cn_iptcp 127.0.0.1 1972 YUBIN 内容 固定文字列です。 接続先 Caché サーバの TCP/IP アドレスを指定します。 接続先 Caché サーバのポート番号です。通常 1972 固定です。 接続先 Caché サーバのネームスペースを指定します。 Form_Load イベントのコードは下記のように変更することができます。(1 つの例です。) Private Sub Form_Load() Dim ok As Boolean Dim connect As String connect = "" ' CacheObject.Factory クラスのインスタンスを生成します Set Cache = CreateObject("CacheObject.Factory") ' Cache との接続が確立されているかを確認する If Not Cache.IsConnected() Then ' '' ' ' '' ' ' ' ' 最初の接続処理のコード 接続ダイアログを表示して接続先アドレスを取得する connect = Cache.ConnectDlg 接続処理を実施する ok = Cache.connect(connect) 接続ダイアログを表示しない場合のコード ok = Cache.connect("cn_iptcp:127.0.0.1[1972]:YUBIN") 接続処理結果を画面上にセットする lblYubin.Caption = connect & vbCrLf & "結果:" & ok 6-21 End If End Sub 変更後のプログラムを実行すると,Caché 接続用ダイアログの表示は省略され,下記の画 面が表示されます。画面上の「結果」を表示している部分が変化していることが確認でき ます。 6-22 6.3 郵便番号データの格納 処理 3 VisualBasic プログラムで郵便番号データを 1 件ずつ読みこんで,User.ZIPTBL クラスにデ ータを格納します。 (注意事項) 郵便番号データは,各項目はカンマ(,)で区切られています。 また,各項目値はダブルクオーテーションで囲まれています。 VisualBasic プログラムでは読みこんだ郵便番号データをカンマで区切り,ダブルクオーテ ーションを取り除く処理を行う必要があります。 画面上で指定された郵便番号ファイルを読み込みその内容を画面に表示する処理を作成 しましょう。 (郵便番号データベース(User.ZIPTBL)へのデータ格納処理は,郵便番号ファ イルを読み込んでその内容を画面に表示する処理が正常に動作することが確認できた後で 追加します。 ) 6-23 6.3.1 郵便番号データの読みこみ 郵便番号データを読み込む処理プログラムを作成します。 郵便番号データを読み込むには,次の 3 つの処理が必要となります。 (1) 郵便番号データファイルのファイルオープン処理 (2) 全データを読み込む処理 (3) 郵便番号データファイルのファイルクローズ処理 郵便番号データのようにファイルを取り扱う場合には,いつどんなエラーが発生しても良 いようにエラー処理を組み込んでおく必要があります。(ラベル File_Error 以下の部分がエ ラー処理です。) この 3 つの処理を画面上の[処理開始]ボタンのクリックイベントに追加しましょう。 Private Sub cmdStart_Click() ' 何らかのエラーが発生したら,File_Error ラベルにジャンプします On Error GoTo File_Error ' ' 処理に先立って,マウスポインターを砂時計マークに変更します 処理開始時点で設定されているマウスポインターの種類を退避しておきます Dim Mouse_Pointer Mouse_Pointer = Screen.MousePointer Screen.MousePointer = vbHourglass ' ファイル番号 Dim fnum As Long ' 読み込んだデータ Dim InputData As String ' 使用可能なファイル番号を取得する fnum = FreeFile ' ' 読み込み専用にシーケンシャル(順次読み込み)モードで ファイルを取り扱うことを宣言します Open frmYUBIN.txtFileID.Text For Input As #fnum ' 処理対象ファイルを全件読み込むまで処理を繰り返します Do While Not EOF(fnum) ' データを 1 件読み込みます 6-24 Line Input #fnum, InputData ' 読み込んだデータを確認のために画面上に表示します frmYUBIN.lblYubin.Caption = InputData ' 画面上にセットしたデータを確認できるように間を取ります DoEvents ' 処理の繰り返し元に戻ります Loop ' 読み込みに使用したファイルを閉じます Close #fnum ' マウスポインターを元に戻します Screen.MousePointer = Mouse_Pointer ' 処理終了のメッセージを画面上に表示します frmYUBIN.lblYubin.Caption = "*** 終了しました ***" ' ' ' ' 処理開始ボタンがクリックされて正常に処理が終了した場合は, このモジュール(プログラムの一部)から脱出します。 もし,この「Exit Sub」が無いと,常に File_Error の処理が実行され エラー(実際にはエラーではありませんが)メッセージが表示されます Exit Sub File_Error: ' マウスポインターを元に戻します Screen.MousePointer = Mouse_Pointer ' エラーメッセージを表示します MsgBox (Err.Number & vbCrLf & Err.Description) End Sub 下記はプログラムの解説です。 On Error Go To File_Error 何らかのエラーが発生したら,Go To で指定したラベルに制御を移すことを指 定しています。郵便番号データファイルの取り扱いに関するエラーが発生した場 合の対応を定義しています。 Dim Mouse_Pointer 6-25 Mouse_Pointer = Screen.MousePointer Screen.MousePointer = vbHourglass 処理に先立って,マウスポインターを砂時計マークに変更します。 処理開始時点で設定されているマウスポインターの種類を Mouse_Pointer に退 避しておきます。 fnum = FreeFile 郵便番号データを扱う場合のファイル番号を Windows システムから取得する命 令です。郵便番号データのようなファイルを取り扱う場合には,ファイル番号を 使用する必要があります。複数のファイルを同時に扱う場合には,ファイル番号 が重複することを避ける必要があります。そのような場合に,この FreeFile 命令 を使用することでファイル番号の重複を回避できます。 Open frmYUBIN.txtFileID.Text For Input As #fnum 画面上で指定された郵便番号データファイルをシーケンシャルリード(先頭か ら順番に 1 件ずつ読みこむ)する方法でファイルをオープンすることを宣言して います。 Do While Not EOF(fnum) fnum で指定されているファイル(この場合は郵便番号データ)を「ファイル終 端に達していない間」処理を続ける,という制御を行っています。つまり,指定 された郵便番号データを全件処理するまで繰り返す,という内容になります。 Line Input #fnum, InputData fnum で指定されているファイルの内容を 1 件読みこみ InputData というプログ ラム領域に格納する,という内容です。 frmYUBIN.lblYubin.Caption = InputData InputData に読みこんだデータを画面上に表示する,という内容です。この命令 の後に「DoEvents」という命令があります。この DoEvents 命令を外すと,画面上 の表示内容が切り替わらずに処理が終了してしまいます。つまり,最初の 1 件し かデータが存在しないかのように表示されてしまいます。そこで,この DoEvents 命令を使用して,画面表示が完了するまでのタイミングを取ることをします。 DoEvents 画面上にセットしたデータを確認できるように間を取ります。これは上記の命 令で画面上にファイルから読み込んだデータを表示した場合に,コンピュータの 処理速度が高速であると,DoEvents 命令を使用して一瞬間を取らないと画面上に セットした値が確認できる状態になりません。 Loop 処理の繰り返し元に戻ります。 6-26 Close #fnum fnum で指定されているファイルをクローズします。 Screen.MousePointer = Mouse_Pointer 実施すべき処理が終了したのでマウスポインターを元に戻します。 frmYUBIN.lblYubin.Caption = "*** 終了しました ***" 処理終了のメッセージを画面上に表示します。 Exit Sub 処理開始ボタンがクリックされて正常に処理が終了した場合は,このモジュー ル(プログラムの一部)から脱出します。 もし,この「Exit Sub」が無いと,後続行である File_Error の処理が実行されエ ラーメッセージ(実際にはエラーではありません)が表示されます。 MsgBox (Err.Number & vbCrLf & Err.Description) On Error の原因となったエラーのエラー番号とエラー内容をメッセージボック スを使用して表示する,という内容です。vbCrLf は,メッセージボックス内で改 行することを示しています。 上記のコードを追加してプログラム を実行します。 画面上郵便データファイルの位置を 確認後, [処理開始]ボタンをクリック すると指定された郵便番号データファ イルの内容を読み込んで画面上に表示 します。 指定した郵便番号データファイルに 含まれるすべてのデータを読み終わる と,画面上に「*** 終了しました ***」 と表示されます。 このようにプログラムは正常に動作しましたか? もし正常に動作しなかった場合には追加したコードを確認して下さい。 次に読み込んだデータを郵便番号データベース(User.ZIPTBL)に格納します。 6-27 6.3.2 郵便番号データの編集 読みこんだ郵便番号データはカンマで区切って分解する 必要があります。 そこで文字列を分解するための小さなプログラムをプ ロジェクトに追加します。この小さなプログラムは添付の CD-ROM に格納されている M.BAS に格納されています。こ の M.BAS を VisualBasic プログラムを格納しているフォルダ (C:¥YUBIN)にコピーして下さい。 VisualBasic のメニュで「プロジェクト」→「標準モジュ ールの追加」を選択します。 「標準モジュールの追加」画面が表示された[既存のファイル]タブをクリックします。 [ファイルの場所]で M.Bas をコピーしたフォルダを指定します。 (本書では,C:¥YUBIN フ ォルダとしています。) 「M.Bas」を選択後,画面上の[開く]ボタンをクリックします。 6-28 下記のように VisualBasic のプロジェクトウインドウで M.BAS が標準モジュールに追加されたことが確認できま す。 M.Bas にある piece 関数を使用して指定したデータをカ ンマで区切り,その結果データの前後にあるダブルクオー テーションを取り除く小さなプログラム(サブルーチン) を作成します。 このようなサブルーチンを作成する理由は,読み込んだ 1 件のデータに対して 15 項目分, 同じ処理を行う必要があるので共通化した方が生産性の向上を図ることができるからです。 frmYubin のコードの最後にサブルーチンを追加しましょう。 Private Function GetData(InputData As String, Pos As Long) As String Dim wk As String Dim knm As String Dim dc As String ' カンマの設定 knm = "," ' ダブル・コーテーションマークの設定 dc = """" ' 指定された位置のデータを取り出す wk = piece(InputData, knm, Pos, Pos) ' 左端にダブル・コーテーションマークがある場合には削除する If Left(wk, 1) = dc Then wk = Mid(wk, 2, Len(wk)) End If ' 右端にダブル・コーテーションマークがある場合には削除する 6-29 If Right(wk, 1) = dc Then wk = Mid(wk, 1, Len(wk) - 1) End If ' 編集結果を戻り値にセットする GetData = wk End Function 下記はプログラムの解説です。 Dim wk As String Dim knm As String Dim dc As String 指定された文字列を編集するための作業領域を確保します。 knm = "," 文字列編集に使用するカンマの設定を行います。 dc = """" 文字列編集に使用するダブル・コーテーションマークの設定を行います。 wk = piece(InputData, knm, Pos, Pos) M.BAS の piece モジュールを使用して,指定された位置のデータを取り出しま す。 If Left(wk, 1) = dc Then wk = Mid(wk, 2, Len(wk)) End If 取り出したデータの左端にダブル・コーテーションマークがある場合には削除 します。 If Right(wk, 1) = dc Then wk = Mid(wk, 1, Len(wk) - 1) End If 取り出したデータの右端にダブル・コーテーションマークがある場合には削除 します。 GetData = wk 編集結果を戻り値にセットします。 GetData サブルーチンの動作確認は,郵便番号データの格納処理で実施します。 6-30 6.3.3 郵便番号データの格納 郵便番号データベース(User.ZIPTBL)のインスタンス領域の生成と,読みこんだデータ を郵便番号データベース(User.ZIPTBL)に格納する処理を[処理開始]ボタンのクリック イベントに追加します。 インスタンス領域の設定 ' ' 読み込んだデータ Dim InputData As String ↑↑↑ 下記のコードをこの間に追加します。 ↓↓↓ 使用可能なファイル番号を取得する fnum = FreeFile ZIPTBL クラスのインスタンス Dim iZT As Object ' 読みこんだデータを郵便番号データベース(ZIPTBL クラス)に格納する処理 ' データを 1 件読み込みます Line Input #fnum, InputData ' 読み込んだデータを確認のために画面上に表示します frmYUBIN.lblYubin.Caption = InputData ↑↑↑ 下記のコードをこの間に追加します。 ↓↓↓ 画面上にセットしたデータを確認できるように間を取ります DoEvents ' ' -----ZIPTBL へのデータの格納を行います----- ' ZIPTBL クラスのインスタンスを生成します Set iZT = Cache.New("User.ZIPTBL") ' ZIPTBL クラスの各プロパティにデータをセットします iZT.JisCode = GetData(InputData, 1) iZT.Zip5 = GetData(InputData, 2) 6-31 iZT.Zip7 = GetData(InputData, 3) iZT.PrefKN = GetData(InputData, 4) iZT.CityKN = GetData(InputData, 5) iZT.TownKN = GetData(InputData, 6) iZT.PrefKG = GetData(InputData, 7) iZT.CityKG = GetData(InputData, 8) iZT.TownKG = GetData(InputData, 9) iZT.Code1 = GetData(InputData, 10) iZT.Code2 = GetData(InputData, 11) iZT.Code3 = GetData(InputData, 12) iZT.Code4 = GetData(InputData, 13) iZT.Code5 = GetData(InputData, 14) iZT.Code6 = GetData(InputData, 15) ' ZIPTBL クラスのインスタンスをデータベースに格納します(Cache) iZT.sys_save ' ZIPTBL クラスのインスタンスを解放します(Cache) iZT.sys_close ' ZIPTBL クラスのインスタンスを解放します(VisualBasic) Set iZT = Nothing ' -----ZIPTBL へのデータの格納が終了しました----- 下記はプログラムの解説です。 Set iZT = Cache.New("User.ZIPTBL") User.ZIPTBL クラスのインスタンスを生成し,iZT に代入する,という内容です。 郵便番号データを追加する処理を行うので,Cache に続くコマンドは New を使用 します。Caché ObjectScript では,%New コマンドを使用していましたが, VisualBasic の中では New と記述します。 また,iZT は Object として定義していますので,Set 命令が必要になります。 iZT.JisCode = GetData(InputData, 1) 郵便番号データを読み込んでカンマで区切り,前後のダブル・コーテーション マークを取り除いて User.ZIPTBL のプロパティに値をセットする,という内容で す。(以下,Code6 まで同様です。) 6-32 iZT.sys_save User.ZIPTBL クラスのインスタンスにセットした値をデータベースに格納する, という内容です。Caché ObjectScript では,%Save()としていましたが,VisualBasic の中では sys_save と記述します。 iZT.sys_close User.ZIPTBL クラスの Caché インスタンスを解放する,という内容です。Caché ObjectScript では,%Close()としていましたが,VisualBasic の中では sys_close と記 述します。 Set iZT = Nothing User.ZIPTBL クラスの VisualBasic インスタンスを解放する,という内容です。 ※ 既存データの削除 * 以上のコードを追加してプログラムを実行する前に,下記の手順で既存のデータを削除し ます。 プログラムを実行すると User.ZIPTBL にデータが格納されますが,前述の手順に従って Caché ターミナルから入力したデータに追加される形になります。本書では,プログラムの 実行に先立って,User.ZIPTBL のデータを削除することとします。 6-33 Caché エクスプローラを起動し,ネームスペース「YUBIN」を選択します。 「グローバル」 を選択すると,画面右側に,ネームスペース「YUBIN」に存在するすべてのグローバル変 数が一覧表示されます。その中に User.ZIPTBL に関係する 2 つのデータ(User.ZIPTBLD, User.ZIPTBLI)がありますので,このグローバルの上で右クリックして「削除」を選択しま す。 Caché エクスプローラ画面の[削除]アイコンをクリックすることでも同様 に削除処理をすることができます。 「Caché − 削除の確認」画面が表示されますので,適切なボタンをクリックして下さい。 本書では[すべてはい]ボタンをクリックして選択されている 2 つグローバルを同時に削 除します。 6-34 既存のグローバルを削除したら,郵便番号データファイルの内容を User.ZIPTBL に格納す る処理を追加したプログラムを実行して下さい。 ※ 参考 ; 処理時間 ※ 本書作成に使用しているコンピュータで北海道の郵便番号データ(01hokkai.csv,8,248 件) を処理した場合の処理時間は約 60 秒でした。 CPU は Pentium4 2.4GHz,実メモリ 1GB というコンピュータです。 実行結果を Caché エクスプローラで確認しましょう。 Caché エクスプローラを起動し,ネームスペース「YUBIN」のグローバルを選択します。 「^User.ZIPTBLD」の内容は下記のとおりです。 「^User.ZIPTBLI」の内容は下記のとおりです。 6-35 確認画面のような結果になりましたか? もし,うまく処理されていないようでしたら今まで作成したプログラムコードを良く見直 してください。 プログラムは小さなミスにも(たった 1 文字の入力ミスでも!)その通りに動作してしま います。 これで郵便番号データを郵便番号データベース(User.ZIPTBL)に格納することができま した。 さっそく画面上から新郵便番号(7 桁)を指定して郵便番号データを検索してみましょう。 そのためには Caché スタジオを使用してクエリを作成しなければなりません。 6-36 6.4 クエリの追加 処理 4 User.ZIPTBL クラスに新郵便番号(7 桁)を指定してデータを検索するクエリ(LookUpZip7) を定義します。 処理 3 で作成した郵便番号データベース(User.ZIPTBL)のデータを検索するためのクエ リを作成します。 Caché スタジオを起動して,YUBIN に接続しましょう。(手順は,画面のタスクバーの Caché キューブをクリック→スタジオ→「YUBIN」を選択して[OK]ボタンをクリック, です。) User.ZIPTB クラスを選択しダブル クリックすると,すでに作成されて いるクエリ 「LookUp1」を確認することができます。 6-37 クラスクエリ LookUp1 を定義した時を思い出しながら,新しいクエリ(LookUpZip7)を 定義してみましょう。 LookUpZip7 クエリの内容は次の通りとします。 No. 1 2 項目 クエリ名 クエリの説明 3 4 クエリパラメータ クエリに含めるカラム 5 条件 6 照合順 値(内容) LookUpZip7 新郵便番号(7 桁)を指定して,ID(OID)と住所 情報(都道府県名・漢字,市区町村名・漢字,町域名・ 漢字)を取得する。 ZIP7 %ID OID(オブジェクト識別子) PrefKG 都道府県名(漢字) CityKG 市区町村名(漢字) TownKG 町域名(漢字) フィールド名 Zip7 条件 = 表現式 :ZIP7 ―――(指定しません) 以下でクラスクエリ LookUpZip7 クエリの作成手順を確認します。 (詳細な解説は「5.2.2 ク エリを作成する」でご確認下さい。 ) 6-38 Caché スタジオ画面のメニュアイコンの「新規クエリ」アイコンを クリックします。 (他の方法は「5.2.2 クエリを作成する」でご確認下さい。) Caché クエリウィザードが表示されます。 クエリ名,実装方法,クエリの説明を入力します。 画面の内容を確認後[次へ]ボタンをクリックします。 パラメータの[追加]ボタンをクリックして,クエリのパラメータを設定 します。 画面の内容を確認後[次へ]ボタンをクリックします。 6-39 クエリに含めるカラムを設定します。(画面右側のカラム順序が異なるとクエリ実行結果 に影響が出ます。) 画面の内容を確認後[次へ]ボタンをクリックします。 クエリの条件を設定します。 画面の内容を確認後[次へ]ボタンをクリックします。 6-40 クエリの照合順を設定します。 画面の内容を確認後[完了]ボタンをクリックします。 クエリウィザードで設定した内容が Caché スタジオのエディタ ウィンドウに表示されま す。 クエリを追加した User.ZIPTBL クラスをコンパイルして問題がないことを確認します。 6-41 作成した LookUpZip7 クエリが正常に動作するかを,Caché ターミナル(Caché ObjectScript を使用します)で確認してみましょう。 Caché ターミナルを起動してネームスペースを「YUBIN」に変更しましょう。 Caché の%ResultSet クラスの RunQuery メソッドを使用して動作確認をしましょう。 RunQuery メソッドに指定するパラメータは次の通りです。 項目 クラス名 クエリ名 パラメータ 値・説明 User.ZIPTBL LookUpZip7 “0640942” 結果は下記のとおりです。 41:北海道:サツポロシチユウオウク:伏見: ※ User.ZIPTBL のコンパイルをしていないと… ※ クエリを追加した後でコンパイルすることを忘れたままクエリのテストを実施すると,下 記のようなメッセージが表示されます。 ERROR #5660: Query 'User.ZIPTBL:LookUpZip7' does not exist Caché ターミナルで操作した結果は,下記のようになります。 6-42 なぜ,作成したクエリを Caché ターミナルで動作確認をするのか? このように思われるかもしれません。 作成したクエリ(メソッド)は,本来は VisualBasic プログラムから使用されます。 (これ までに解説してきましたように Caché Object Script からも使用できます。 ) そこで,Caché ターミナルを使用してクエリの動作を確認し問題がないことが確認できた クエリ(メソッド)を VisualBasic プログラムから呼び出せば生産性の向上と品質の確保を 図ることができると考えらるためです。 Caché ターミナルで Caché Object Script を対話的にテストできて,作成したクエリの動作 確認を行えるのは,Caché の魅力の 1 つです。 6-43 6.5 VisualBasic でのクエリ実行 処理 5 VisualBasic プログラムから,新郵便番号(7 桁)を指定してクエリ(LookUpZip7)を呼び 出します。 都道府県名(漢字),市区町村名(漢字)町域名(漢字)データを取り出して,画面上に 表示します。 Caché ターミナルでクエリの動作が確認できたら,VisualBasic プログラムにクエリの呼び 出し処理を追加しましょう。 まず,画面上に「新郵便番号(7 桁)」を入力するための TextBox と検索処理を実行する CommandButton,そして,検索結果を表示する Label を配置しましょう。 項目 新郵便番号 (7 桁) 検索実行 ボタン 検索結果表示 エリア コンポーネント TextBox オブジェクト名 txtYubin7 Caption/Text “” CommandButton cmdSearch “郵便番号検索” Label lblKekka “” 下記のような画面を作成しましょう。 6-44 画面上に追加した[郵便番号検索]ボタンに,LookUpZip7 クエリを呼び出して郵便番号 データを取得する処理を追加します。 Private Sub cmdSearch_Click() ' 何らかのエラーが発生したら「Obj_Err」へジャンプする On Error GoTo Obj_Err ' result は,LookUpZip7 クエリのインスタンスとして使用する Dim result As CacheObject.ResultSet ' PostData は,郵便番号データ(ZIPTBL)のインスタンスとして使用する Dim PostData As Object ' Poid は,検索した郵便番号データ(ZIPTBL)の OID を格納する Dim Poid As String ' 検索クエリ「LookUpZip7」のインスタンスを生成する Set result = Cache.ResultSet("User.ZIPTBL", "LookUpZip7") ' 検索クエリ「LookUpZip7」に引数を指定して実行する result.Execute frmYUBIN.txtYubin7.Text ' 検索結果を 1 件取得する result.Next ' 検索結果に含まれる「ID」カラムのデータを取得する Poid = result.GetDataByName("ID") ' 検索クエリのインスタンスを解放する (Cache) result.Close ' 検索クエリのインスタンスを解放する(VisualBasic) Set result = Nothing ' ' 検索クエリ「LookUpZip7」で取得した OID を使用して, ZIPTBL のデータを取得しインスタンスを生成する Set PostData = Cache.OpenId("User.ZIPTBL", Poid) ' ZIPTBL の内容を画面上に表示する frmYUBIN.lblKekka.Caption = _ Poid & vbCrLf & _ PostData.PrefKG & vbCrLf & _ 6-45 PostData.CityKG & vbCrLf & _ PostData.TownKG ' ZIPTBL のインスタンスを解放する(Cache) PostData.sys_close ' ZIPTBL のインスタンスを解放する(VisualBasic) Set PostData = Nothing ' このモジュールを終了する Exit Sub Obj_Err: ' 発生しているエラーの内容を画面上に表示する MsgBox (Err.Number & vbCrLf & Err.Description) End Sub 下記はプログラムの解説です。 On Error GoTo Obj_Err この行は,プログラム中で何らかのエラーが発生した場合の対応です。 今回のように画面上から値を指定してデータを検索する処理の場合,指定され た値に該当するデータが存在しない場合に Caché からはエラーとして通知されま す。例えば,このプログラムでありえない新郵便番号(7 桁)を指定した場合に は,下記のようなエラーが通知されます。 6-46 左記のメッセージでは実際には利用者は理解できないでしょうから, 「指定され た新郵便番号(7 桁)に該当するデータは確認できませんでした。」といった表現 に変更する必要があります。 Dim result As CacheObject.ResultSet Dim PostData As Object Dim Poid As String この 3 行の命令は,Caché と連動して処理を実行する場合に必要となる作業領域 を確保します。 result は,LookUpZip7 クエリのインスタンスとして使用する作業領域です。 Caché ターミナル上で Caché Object Script を使用して動作確認を行う場合には, result のような作業領域は必要ありませんでしたが,VisualBasic との連携を行う場 合には必ず必要な作業項目となります。なお,このプログラムでは Dim として指 定しましたが,Public(あるいはその他の指定)であっても問題はありません。 CacheObject.ResultSet の指定は,Caché Object ライブラリで提供されているクエ リ実行用クラスの指定を行っているものです。VisualBasic プログラムでクエリを 使用する場合に必須となります。 PostData は,郵便番号データベース(User.ZIPTBL)のインスタンスとして使用 する作業領域です。本書では User.ZIPTBL を VisualBasic プログラムで取り扱う場 合には,オブジェクトとして取り扱います。従って,Dim 宣言したときの型指定 を Object とする必要があります。また,このように型指定を Object とした場合に は,値を代入する場合に Set 命令を使用しなければなりません。(VisualBasic 6 の プログラミング規則です。) Poid は,検索した郵便番号データベース(User.ZIPTBL)の OID を格納する作業 領域です。 Set result = Cache.ResultSet("User.ZIPTBL", "LookUpZip7") result.Execute frmYUBIN.txtYubin7.Text この 2 行は,Caché ターミナル上で指定したクエリ実行コマンドと同等のもので す。Caché Object Script では, do##class(%ResultSet).RunQuery(“User.ZIPTBL”,”LookUpZip7”,”1234567”) とコマンド入力をしました。 VisualBasic では,クラスとクエリの指定を行い,その後でクエリパラメータを 指定してクエリを実行する,という手順になります。 6-47 result.Next この行は,指定したクエリの検索結果を 1 件取得するための命令です。今回は, 新郵便番号(7 桁)に該当するデータの重複はないものとしていますので,検索 結果がなくなるまで繰り返す,という処理は実行していません。しかし,クエリ の内容によっては,検索結果がなくなるまで処理を繰り返す必要もあるでしょう。 その場合には,次のようにプログラムを変更する必要があります。 While result.Next (実際の処理部分) Wend Poid = result.GetDataByName("ID") この行は,result.Next 命令で取得したカラムデータの ID という名称のデータを 抽出し,Poid に代入します。この GetDataByName で指定できるカラムは, User.ZIPTBL に含まれるすべてのカラム(プロパティ)ではなく,LookUpZip7 ク エリを作成したときに指定したカラムに限定されます。従って,クエリを実行し てデータの値を取得したい場合には,その対象となるカラムをクエリに含めなけ ればなりません。後からカラムを追加する場合には,クエリの内容を変更してコ ンパイルします。 Set PostData = Cache.OpenId("User.ZIPTBL", Poid) この行は,LookUpZip7 クエリを実行して抽出した ID(OID)を使用して, User.ZIPTBL クラスのデータを取得する処理です。取得した User.ZIPTBL クラスデ ータのインスタンスを VisualBasic の中で利用できるようになります。 この OpenId というクラスメソッドは,アクセス対象となるクラス名と,データ の ID(OID)を使用してインスタンスを生成します。 Caché ターミナルの中で,%New(VisualBasic では,New)コマンドを使用して インスタンスの生成をする例を解説しました。この New コマンドと OpenId コマ ンドの違いは,New コマンドが新規データとしてインスタンスを生成するのに対 して,OpenId コマンドは,OID を指定して既存のデータのインスタンスを生成す る,という点です。 result.Close Set result = Nothing この 2 行は,検索クエリのインスタンスの解放を実施します。 Caché と VisualBasic プログラムは,別の場所(コンピュータ内部の別のメモリ 空間)で動作しています。従って,Caché に対するインスタンス解放命令と, VisualBasic に対するインスタンス解放命令を別々に発行する必要があります。 result.Close は,Caché でのインスタンス解放命令です。 Set result = Nothing は,VisualBasic でのインスタンス解放命令です。 6-48 frmYUBIN.lblKekka.Caption = _ Poid & vbCrLf & _ PostData.PrefKG & vbCrLf & _ PostData.CityKG & vbCrLf & _ PostData.TownKG この行では,生成した ZIPTBL クラスのインスタンスから必要なデータ項目を 抽出して,その内容を画面上にセットしています。 インスタンスデータへのアクセスは, 「インスタンス名.プロパティ名」という 形式の表記規則に従って実行することができます。 PostData.sys_close Set PostData = Nothing この 2 行は,インスタンスの解放を実施しています。 Caché と VisualBasic プログラムは,別の場所(コンピュータ内部の別のメモリ 空間)で動作しています。従って,Caché に対するインスタンス解放命令と, VisualBasic に対するインスタンス解放命令を別々に発行する必要があります。 PostData.sys_close は,Caché でのインスタンス解放命令です。 Set PostData = Nothing は,VisualBasic でのインスタンス解放命令です。 Exit Sub この行は,正常に User.ZIPTBL クラスのデータをアクセスできたときに,エラ ー処理を実行しないようにするために,処理中の cmdSearch_Click を脱出する処理 を実行します。もし,この Exit Sub 命令がないと,正常にデータアクセス処理が されたときでも,後続行が実行されエラーメッセージ(内容は「正常である」と なります)が表示されることになります。 MsgBox (Err.Number & vbCrLf & Err.Description) この行で,発生しているエラーメッセージを表示して,利用者にエラーの内容 を通知することができます。 Caché が編集するメッセージでは,利用者に分かりにくい場合がありますので, 必要に応じてエラーメッセージ内容を変更する必要があります。例えば,指定さ れた新郵便番号(7 桁)に該当するデータが確認できない場合には下記のように 変更する必要があるかもしれません。 MsgBox (Err.Number & vbCrLf & _ "指定された郵便番号(7 桁)に該当するデータは確認できませんでした。") 6-49 さて,[郵便番号検索]ボタンに追加した処理は正常に動作しましたか? 画面上で指定した新郵便番号(7 桁)に該当するデータが存在する場合には,次のような 画面が表示されます。 また,画面上で指定した新郵便番号(7 桁)に該当するデータが存在しない場合には,次 のような画面が表示されるでしょう。 6-50 6.6 インデックスの設定 処理 6 User.ZIPTBL クラスに新郵便番号(7 桁)プロパティを使用したインデックス(Zip7IDX) を定義し,インデックスの再構築を実施します。 処理 1∼5 までで一通りのプログラム作成について解説しました。これでプログラムとし ては正常に動作しますので,特に問題点はないと思われます。 しかし,実際の業務システムで扱うデータ量は,今回のサンプルデータよりもずっと多く なるはずです。データ量が多くなれば,データを検索したり抽出したりする処理が遅くな ることが予想されます。 そこで,今まで作成してきた郵便番号データベース(User.ZIPTBL)に「新郵便番号(7 桁)」プロパティを使用したインデックス(索引)を設定して処理速度の高速化を図ります。 Caché スタジオを起動し,ネームスペース「YUBIN」に接続しましょう。 (手順は,画面 のタスクバーの Caché キューブをクリック→Caché スタジオ→「YUBIN」を選択して[OK] ボタンをクリック,です。) Caché スタジオの画面が表示されたら,User.ZIPTBL クラスをダブルクリックしてエディ タ ウィンドウにクラス定義情報を表示します。 エディタ ウィンドウに表示されている中からインデックスに関するコードを確認してみ ましょう。 現時点では,下記のコードが確認できます。 Index PrefKGINDX1 On PrefKG; 6-51 ※ コードの並び順に関する注意とインスペクタウィンドウ ※ Caché スタジオを利用してプロパティ,インデックス,メソッド,クエリを追加すること ができますが,これらは特定のルールに従って表示されるわけではありません。 インデックスを設定する場合,その時点で設定されているインデックスを確認したい時が あります。 そのような場合には Caché スタジオのインスペクタウィンドウを利用すると便利です。 インスペクタウィンドウの左側のリスト ボックスを表示するとクラスに含まれる項目 が表示されます。今回はインデックスの確認を しますので「Index」を選択します。 イン スペクタウィンドウにはその時点で設 定されているインデックスが一覧表示されま す。 設定 されているインデックスの詳細な内容 を確認したい場合には, 確認したいインデック スをダブル クリックします。 6-52 Caché スタジオで新郵便番号(7 桁)を利用するインデックスを設定しましょう。(イン デックス設定に関する詳細な解説は,「5.3.1 インデックスを設定する」でご確認下さい。) 本章で定義するインデックスの内容は下記のとおりです。 項目 インデックスの名前 インデックスの説明 インデックスのタイプ インデックスの実装 プロパティ 照合 照合パラメータ 値・内容 ZIP7IDX1 新郵便番号(7 桁)のインデックス 「通常:1つ以上のプロパティのインデックスを維持 するために使用される」を選択します。 「標準インデックス」を選択します。 ZIP7 (設定しません) (設定しません) Caché スタジオのメニュアイコンの[新規インデックス]アイコンを クリックします。 「新規インデックスウィザード」ようこそ画面が表示されます。 インデックスの名前と説明を入力します。 画面上の値を確認後[次へ]ボタンをクリックします。 6-53 クエリのタイプを設定します。 画面の内容を確認後[次へ]ボタンをクリックします。 クエリのプロパティリストを設定します。 画面の内容を確認後[次へ]ボタンをクリックします。 6-54 クエリのインデックスデータを設定します。 画面の内容を確認後[完了]ボタンをクリックします。 Caché スタジオのエディタ ウィンドウに設定したインデックスの内容が表示されます。 画面上の内容を確認後,コンパイルを実施します。 6-55 以上で新しいインデックスに設定ができました。 ZIP7IDX1 インデックスを使用した VisualBasic プログラムの動作確認を行います。 すでに郵便番号データベース(ZIPTBL クラス)に格納されたデータがありますので,こ のデータを削除して,もう一度郵便番号データベースを作り直しましょう。(インデックス の再構築を実施する方法は「5.3.2 インデックスの再構築をする(Caché ターミナル)」 , 「5.3.3 インデックスの再構築をする(CachéSQL マネージャ)」でご確認下さい。) Caché のエクスプローラを起動(手順は,画面のタスクバーの Caché キューブをクリック →「エクスプローラ」を選択,です)して,ネームスペース「YUBIN」の「グローバル」 アイコンをクリックして下さい。画面右側に,グローバル一覧表が表示されます。 グローバル一覧表の「^User.ZIPTBLD」と「^User.ZUPTBLI」をさがして選択(クリック) して下さい。グローバルを選択した時点で,グローバル削除ボタンが使用可能な 状態になりますので,グローバル削除ボタンをクリックします。 6-56 では,もう一度 VisualBasic プログラムを実行しましょう。 郵便番号データベースに取り込むデータファイルを確認して[処理開始]ボタンをクリッ クしましょう。 指定した郵便番号データ(初期値は,北海道の郵便番号データを指定しています)を郵便 番号データベース(User.ZIPTBL)に格納し,同時に新郵便番号(7 桁)のインデックスを 作成します。 郵便番号データ格納処理が終了したら,新郵便番号(7 桁)を入力して[郵便番号検索] ボタンをクリックしてみましょう。 インデックスを設定する前と比較して,体感的に「速くなった」と感じられるのではない でしょうか? このようにしてインデックスをうまく利用することで,システム全体のパフォーマンスを 向上することができます。 6-57 [Memo] 6-58 7 MS-ACCESS からの ODBC 接続 お願い: 本書は第 1 章から第 7 章へ順番に内容を確認していただくように構成しています。従って 途中の章からプログラムを作成しても上手く動作しない可能性があります。ご了承くださ い。もし,この章からはじめる場合には,第 2 章から第 6 章を参考に郵便番号データベー ス(User.ZIPTBL)の定義とデータ格納を事前に実施して下さい。 作成した郵便番号データベースに対して,MS-ACCESS データ参照を行います。 MS-ACCESS から Caché に ODBC 接続するためには,次のような手順となります。 (1) DSN を設定する → 7.1 項でご確認下さい (2) MS-ACCESS から Caché に接続する → 7.2 項でご確認下さい 下記に詳細を解説します。 7-1 7.1 DSN を設定する ODBC データソースの定義を行う必要があります。 以下の手順で ODBC データソースを追加します。 (1) Windows の[スタート]ボタンから[マイ コンピュータ]を選択して表示される「マ イ コンピュータ」画面の「コントロール パネル」をクリックします。 (2) 「コントロールパネル」画面の「管理ツール」アイコンをダブルクリックします。 7-2 (3) 「管理ツール」画面の「データソース(ODBC)」アイコンをダブルクリックします。 (4) 「ODBC データソース アドミニストレータ」画面が表示されたら,画面上の[シス テム DSN]タブを選択します。 Caché がセットアップされているコンピュータには,Caché に接続するための定義が 2 つ追加されています。( 「CACHE Samples」,「CACHE User」) 画面上の[追加]ボタンをクリックします。 7-3 (5) 「データソースの新規作成」画面に表示されます。 データソースのドライバリストから「Intersystems ODBC」を選択し[完了]ボタンをクリ ックします。 (6) 「InterSystems Cache ODBC Data Source Setup」画面が表示されます。 7-4 この画面上で指定する内容は次の通りです。 項目 DataSource Name Description Host (IP Address) Port Caché Namespace Login User Name Password ODBC Log Static Cursors 値 CACHE YUBIN (設定しま せん) 127.0.0.1 備考 自由に設定できます。 DSN の説明。(オプション) DSN の IP アドレス。 “127.0.0.1” のように、ドットで区切られた 10 進法の 数字、あるいは 4 個の数字で表します。 1972 DSN に接続するポート。 Caché への接続ポートのデフォルトは 1972 です。 YUBIN DSN のネームスペース接続するネームスペースを指定 して下さい。 _system DSN にログインするためのユーザ名。 デフォルトは、“_SYSTEM” で、大文字と小文字を区別 しません (オプション)。 sys UID エントリにより指定されたアカウントのパスワー ド。 SYSTEM のユーザ名に対するパスワードは “sys” で、 大文字と小文字を区別しません (オプション)。 (設定しま チェックが付いている場合は、ODBC クライアント・ド せん) ライバの動作のログ・ファイルを作成します。 このログは、問題が発生したときに利用します。 これをオンにすると ODBC の動作速度が著し く低下 するため、通常の運用時にはチェックを付けません。 UNIX でクライアント・ドライバのロギングを有効にす るには、ODBCTRACE 変数を使用します。 ドライバ・マネージャのロギングを実行する には、 Windows では 有効にし、UNIX では 初期化ファイル を 構成します。 (設定しま チェックが付いている場合は、Caché ODBC ドライバの せん) スタティック・カーソル・サポートを有効にします。 チェックが付いていない場合は、ODBC カーソル・ラ イブラリのカーソル・サポートを使用します。 通常、ODBC カーソル・ライブラリを使用する特別な 理由がない限りは、チェックを付けません。 7-5 項目 Disable Query Timeout Unicode SQL Types 値 備考 (設定しま チ ェ ッ ク が 付 い て い る 場 合 は 、 ODBC ド ラ イ バ が せん) ODBC クエリ・タイムアウトの設定値を無視します。 ODBC クエリ・タイムアウト設定は、特定の動作が完 了するまでにクライアントが待機する時間を指定しま す。 動作が指定された時間内に完了しなかった場合、自動的 にキャンセルされます。 ODBC API により、このタイムアウト値をプログラムに よって設定することもできますが、ODBC アプリケーシ ョンによっては、この値は固定されています。 ご使用の ODBC アプリケーションでタイムア ウト値 を設定できず、そのタイムアウト値が小さすぎる場合は、 クエリ・タイムアウトを無効にするオプションにより、 タイムアウト値を無効にします。 (設定しま チェックが付いている場合、文字列データの Unicode せん) SQL タイプ (“SQL_WVARCHAR (-9) SQLType”) のレポ ート機能をオンにします。 これにより、Microsoft Office 2000 および Visual Basic アプリケーションはマルチバイトのデータを保持するた めに、適切なサイズのバッファを割り当てます。 中国語、ヘブライ語、日本語、韓国語などのロケールで、 マルチバイトの文字セットを使用する場合にのみ、この 機能が関係します。 シングル・バイトの文字セットのデータのみを使用する 場合は、ここにチェックを付けないでください。 このチェックボックスにチェックが付いている場合、 SQLBindParameter を使用した際に、アプリケーションが Microsoft ドライバ・マネージャから “SQL データ型が範 囲を越えています” というエラーが発生する可能性があ ります。 ※ 参考 ; Windows でドライバ・マネージャのロギングを有効にする方法 ※ Windows でドライバ・マネージャのロギングを有効にするには、[ODBC データ・ソース・ アドミニストレータ] ダイアログで、[トレース] パネルの [トレースの開始] ボタンをクリ ックします。このダイアログは、Windows のバージョンによって [コントロール・パネル] の [管理ツール] サブパネル、または [ODBC データ・ソース] からアクセスできます。 [ログ・ ファイルのパス] フィールドで指定されたファイルは、トレース・ファイルの位置を確認し ます。 UNIX でドライバ・マネージャのロギングを有効にするには、初期化ファイル の Trace 7-6 エントリを使用します。クライアント・ドライバのロギングを有効にする場合、Windows では [ODBC Data Source Setup] の [ODBC Log] チェックボックスを使用し、UNIX では CACHEODBCTRACE 環境変数を使用します。 7-7 「InterSystem Caché ODBC Data Source Setup」で指定した内容に誤りがないかを確認する ために[Test Connect]ボタンをクリックします。 設定した内容に問題がなければ, 「Connectivity test completed succesfully!」と表示されます。 もし,設定した内容に誤りがあると,「Connectivity test failed!」と表示されます。設定し た各項目の値を確認する必要があります。 7-8 「InterSystem Caché ODBC Data Source Setup」画面で接続テストが正常に実行できたこと を確認し,画面上の[OK]ボタンをクリックすると,ODBC データソースアドミニストレ ータ画面に戻り,作成したシステムデータソース「CACHE YUBIN」が追加されていること を確認できます。 画面上の内容を確認後[OK]ボタンをクリックします。 なお,「InterSystem Caché ODBC Data Source Setup」で設定した内容に誤りがあっても, ODBC データソースアドミニストレータ画面に戻ったときに設定したシステムデータソー スは表示されます。この場合,プログラムから Caché に ODBC 接続したタイミングでエラ ーが発生します。 7-9 7.2 MS-ACCESS から Caché に接続する ODBC 接続の例として MS-ACCESS から ODBC を経由して Caché に接続するテストを実 施します。 ご利用のコンピュータで MS-ACCESS を起動して下さい。 (本書では,MS-ACCESS2002 を使用しています。) (1) 「Microsoft Access」画面が表示されます。 MS-ACCESS を起動すると,新しいデータベースの作成をするか,既存のデータベースを 開くのかを問い合わせてきます。 本章では,「空のデータベース」を選択して,新規に作成します。 画面上内容を確認後[OK]ボタンをクリックします。 7-10 (2) 「データベースの新規作成」画面が表示されます。 新規に作成するデータベースの種類と名称を問い合わせてきます。 本章では,My Documents に「CACHE_YUBIN1」という名称で作成します。 画面上の内容を確認後[作成]ボタンをクリックします。 (3) 「CACHE_YUBIN1:データベース」画面が表示されます。 CACHE_YUBIN1.MDB が作成され,初期画面が表示されます。 テーブルの追加を行いますので,[新規作成]ボタンをクリックします。 7-11 (4) 「テーブルの新規作成」画面が表示されます。 ODBC 接続の場合には「テーブルのリンク」を選択します。 画面上の内容を確認後[OK]ボタンをクリックします。 (5) 「リンク」画面が表示されます。 「ファイルの種類」で「ODBC Database()」を選択します。 画面上の内容を確認後[リンク]ボタンをクリックします。 7-12 (6) 「データソースの選択」画面が表示されます。 [コンピュータ データソース]の選択リストから「CACHE YUBIN」を選択します。 画面上の内容を確認後[OK]ボタンをクリックします。 (7) 「テーブルのリンク」画面が表示されます。 「テーブル」タブに表示されるテーブル リストから「SQLUser.ZIPTBL」を選択します。 画面上の内容を確認後[OK]ボタンをクリックします。 7-13 (8) MS-ACCESS の「CACHE_YUBIN1:データベース」画面が表示されます。 上記の手順で追加した「SQLUser_ZIPTBL」をダブル クリックします。 「SQLUser_ZIPTBL:テーブル」の内容が表示されます。 7-14 以上の手順で MS-ACCESS から ODBC 経由で Caché に接続することができます。 MS-ACCESS での実際のプログラム作成方法,詳細な解説については,MS-ACCESS の専 門書等にて確認してください。 7-15 [Memo] 7-16 本書に関するお問い合わせ,ご意見等は弊社までお知らせ下さい。 改版履歴 初版 2003 年 10 月 14 日 本書に記載されている会社名,商品名,製品名などはすべて, 一般に会社の商標または登録商標です。 ───────────────────── Speed + Object + Relational + Transaction ポストリレーショナルデータベース CACHÉ Most Valuable Business for you 有限会社 エムブィビィ e-mail [email protected] URL http://www.mvb.jp TEL 0568-94-3088 FAX 0568-94-3101 ─────────────────────