★Xbaseユーザー必見、インデックスの自動修復A @のインデックスファイル修復機能を少し進歩させたものをお届けしよう。これは現在オープンしているデータベースとそのインデックスについて修復する機能である。基本的に@と同じロジックなので説明は書略するが、実行すると現在選択されているデータベースのインデックスを調べて、破損していれば修復するか?をウィンドを開いて知らせ、判断できるようになっている。 ダウンロード(参照)は次をクリック。PR_NDX.PRG |
|||||||||||||||||||||||||
★Xbaseユーザー必見、インデックスの自動修復@ Xbaseは今や過去のものと見られがちだが、扱いやすいデータベースとしてユーザーは根強く多い。Xbaseのデータベース自体は眼鏡であるが、システム稼動中に電源が落とされて、突然にシステムダウンするとインデックスファイルが破損してしまう事が時々ある。その辺がクライアントサーバ型システムと比較しての弱点であったが、システムを再起動した時点で破損したインデックスを調べだし、修復する機能があったらと思い簡単なプログラムを作って見た。理屈は簡単である。以下にその仕組みを示す。サンプルプログラムは長いのでソースコードをダウンロードできるよう用意した。 ☆データベースを開きGOTO TOP、GOTO BOTTOM、GOTO RECC()/2、のインデックスキーの内容を変数に入れる。 ☆次にその変数でインデックスを利用して検索する。 ☆検索されたレコードのフィールドと変数を比較して、違えばREINDEXする。 ※以上の作業を開いているデータベースとインデックスについて自動的に調べるために可能な限り変数を利用した。 ※配列と変数の宣言、DECLAREとPUBLICは割愛している。 ダウンロード(参照)は次をクリック。SC_PRNDX.PRG |
|||||||||||||||||||||||||
|
★Windows2000は早いか? |
|||||||||||||||||||||||||
| ★ACCESS2000で高速検索(1999.10.16) ACCESS2000はフィールドの文字列の部分検索には不適当のようだと考えていたが、解決策を発見した。ここに17001003256005というコードがある。このコードは次のような意味を持っている。最初の二桁の17は会社コード、次の三桁001は店コード、次の六桁の003256は顧客コード(店別の)、最後の三桁は販売コード(客別)となる。ここで顧客を特定するとその顧客の販売履歴が表示されるという機能が欲しいのである。ACCESS2000のJetSQLにはSELECT文の拡張機能として次のような機能が用意されている。 ******************************** SELECT TOP 25 出席番号, 名前 FROM 生徒 WHERE 卒業年度 = 1994 ORDER BY 5 段階評価の平均 DESC; ************************************* SELECTに続くTOP 25は検索結果の表示範囲を25件に絞り込む機能である。ここでは上位を絞るようになっているが、LIST BOX等に表示する件数が仕様をオーバーする事を意図して用意されているものだと思う。先に述べたコードを部分文字列で高速に絞り込むには最初にその文字列にINDEXを設定する。そして以下のようにクエリに等符号を追加して検索してみよう。 *************************************(クエリ1) クエリに等符号を追加したもの SELECT * FROM XTRAN WHERE KCODE>='13001000661001'; ************************************* 以上のクエリでは13001000661001以上のデータが全てヒットし瞬時に処理は終了する。 この性質を利用して範囲を決めて絞り込むとどうなるかをテストしたクエリが以下である。 *************************************(クエリ2) SELECT * FROM XTRAN WHERE (((XTRAN.KCODE)>='13001000661' And (XTRAN.KCODE)<'13001000662')); ************************************* クエリ2では文字列の先頭から11文字目までを一つの区切りとして661から662までを対象として検索できるのではないかと考えたものである。この結果は見事思い通りとなり、次の画面のように13001000661001から13001000661004までがヒットしリストされた。 ![]() *************************************(クエリ3) SELECT * FROM XTRAN WHERE KCODE>='13001000661001' And KCODE<='13001000661999'; クエリ3は式のスタイルこそ省略されているが、クエリ2と基本的には同じである。検索キーについては実際にヒットさせる範囲を明確に表現してみた。 *************************************(クエリ4) SELECT * FROM XTRAN WHERE KCODE>='13001000661*' and KCODE<'13001000662*'; ************************************* クエリ4の結果もクエリ2とクエリ3と同じだった。 *************************************(クエリ5) SELECT * FROM XTRAN WHERE KCODE>='??001000661*' and KCODE<'??001000662*'; ************************************* クエリ5は全くヒットしない。検索コードにはワイルドカードは使えないようだ。 更に少し実験を続けよう。JetSQL特有のTOP 数値式という拡張機能をクエリ5では動かしてみた。このクエリにはちょっと癖があり、アスタリスクの位置に注意が必要だった。検索の結果は画面11のようになる。 *************************************(クエリ6) SELECT TOP 10 * FROM XTRAN WHERE KCODE>='13001000661'; ************************************* 結果は10件目までのヒットに制限される。 |
|||||||||||||||||||||||||
|
★ベンチマークレポート(その1)
|
|||||||||||||||||||||||||
|
★データベースの基本的な使い方と考え方 |