} I言語VER7システム開発の入門編 7/9 (ひらがな項目の追加)


(★注意:VER7.25以前は最新にバージョンアップして下さい。COPY=@...の新機能を使用しました。2010年9月3日改定)
(7)ひらがな項目の追加。
☆せっかくですので一番難しい事をしてみます,市実表は「市」を主キーとしていましたが, 新しく追加するひらがなの「し」を主キーにしてみます。

◎(7.1)「システム 開発 メニュー」で'25'を入力し「テスト データ辞書 更新」に行き, [Enter]で検索します。
'←','↓','↓','2','ZZZYAA_し','JA','','TEST','し','NCHAR','J', '24'(初期長さ1,ひらがなの最大文字数不明に付き漢字の2倍としました),'↓',[Enter]で作成します。

◎(7.2)「システム 開発 メニュー」に戻って'26'を入力し「テスト テーブル 更新」を起動します。
[Enter]で検索後,'←','↓','0'で「ZZZYAA_市実表」を選択します。

◎(7.3)主キーとするため'←'で先頭の「ZZZYAA_市」の場所で'2','ZZZYAA_し'を選択,'↓'で[Enter]します。

◎(7.4)「(1)オブジェクト名 'dbo.ZZZYAA_市実表' およびインデックス名 'ZZZYAA_市実表0' に」とエラーになります。
これは新たに作成した「ZZZYAA_し」を主キーとしようとしましたが,新項目のため全て空白となっており, 結果同じ文字が重複してあるため,インデックスが作れませんでした。

◎(7.5)'←',[Enter]で再表示させると,テーブル上のデータ名としては登録されています, つまり,インデックスだけが作れない状態です。
そこで,この時点でインデックスが作れるように「ZZZYAA_し」に正しい値を入れる事にします。

◎(7.6)「システム 開発 メニュー」に戻て'21'を入力し「テスト 全 プログラム 更新」行き。
ZZZZ300121のプログラムを選択します。そこで,先頭の行を'0'で選択します。
上記の画面に変わるので、OPTIONで'CANCEL'を選んで[Enter]で検索します。

◎(7.7)検索した最後の行を'0'で選択します。

◎(7.8)200から1000までCANCELするか確認の画面が出るので,'YES',[Enter]で実行します。

◎(7.9)プログラムの画面に戻り全ての行が削除されているのが分かります。
ここで,再度'TABLE 1'で市実表からプログラムを作ります。
(註:TABLEの次の1はテーブル数で,こうするとテーブル数を入力する 画面を表示しないで先に行きます)

◎(7.10)出来たプログラムです。
削除データの順序番号を使っていないので1200から始まっています。
削除データが最後にまとめて見えます。
尚,削除データーを本当に削除したいときは,操作で'DISCARD'とすれば全て消えます。
また,順序の番号をきれいに振りなおしたい場合は,操作で'RENUMBER'とすれば振りなおします。

◎(7.12)テーブル作成でエラーとなったため,主キーが存在しないテーブルとなりDATA=の次の{}内に「K」の有る
データが一つも存在しません,これでは,更新キー無ですので更新処理が正しく動きません。
そこで,前回更新キーで有った「ZZZYAA_市」を再度更新キーとするため2000の
「2000 DATA={}?_T?.?&.DATA&~~AA_市?」を
「2000 DATA={K}?_T?.?&.DATA&~~AA_市?」に変更します。(Kで更新キー化)
さらに、ZZZYAA_都道府県は今回は修正しないので2200の
「2200 DATA={,&X2}?_T?.?&.DATA&~~AA_都道府県?」を
「2200 *DATA={,&X2}?_T?.?&.DATA&~~AA_都道府県?」に変更します。(*でコメント化)
これで,プログラム上は「~~AA_市」が更新キーで,「~~AA_し」が更新対象となりました。
今回は更に「~~AA_し」にはひらがな以外を入力した場合はエラーとします。
(脱線:ひらがな以外エラー等、入力できる文字を細かく設定できる機能があれば、簡単になると考えますが、どのような文法で実現するのか等決めていません。今回の方法は、入力時点では入力出来、次に行く時エラーとなり、違和感はありますが、逆に単に入力出来ない方が理由が分かりにくい事も考えられますので、未だ悩んでいます。今回はプログラムを作って実現します)
1800以下に次のプログラムを作る事で実現できます。
1810 =SET{W0COUNT=1};
W0COUNTに1を転送します。
1820 =BACK:IF{W0COUNT>_DATA@COUNT}EXIT{};
W0COUNTが入力データ長を超えた場合は全てひらがななのでEXIT{};で次の項目の入力に行きます。
1830 =IF{_DATA[W0COUNT;1]<'あ',>'ん'}
_DATA[W0COUNT;1]で入力データのW0COUNT番目から1文字分が'あ'より小さいか又は'ん'より大きい時すぐ次の命令を実行し以外の時は「;」(セミコロン)までスキップします。
(IF内の[,]は「又は」(OR)の意味になります、比較の左辺がない場合は1つ前の左辺と同じと見なします、尚、IF{...}IF{...}とした場合は他の言語とは異なり単に「かつ」(AND)の意味になります。)
1840 = ERROR{'?_DATA[W0COUNT;1]?'はひらがなではありません?_Q?};
ERRORで最初に見つかったひらがな以外の文字をエラー表示し再入力となります。
1850 =COMPUTE{W0COUNT+=1};BACK{BACK};
W0COUNTに1を加えて、直近の「BACK:」に戻ります。

◎(7.13)'3'修正でためしに'いいダ'と入れると、2行目にエラーが表示されて、再入力となりました。

◎(7.14)'3'修正で全てのデータを修正します。

◎(7.15)正しくインデックスを付けるため、「テスト テーブル 更新」に戻って[Enter]で検索、'←','↓’,で'0'で、ZZZYAA_市実表を選択します。
'←','3'(修正),'↓'で最後に行き[Enter]で今度はエラーにならないで修正OKと出ました。

◎(7.16)~~AA_市も唯一無二ですので、一応重複登録出来ないユニークインデックスを設定します。
インデックスは1から9まで9個を主キーとは別に設定できます、ユニークキーの設定は0から指定します、重複を認めるインデックスは1から指定します。
'↓','3'(修正),[Tab],'0'(1、ユニークインデックスなので0を設定)'↓',[Enter]で修正します。
(インデックスは大量のデータを検索する場合の検索効率を上げるための物ですが、ユニークインデックスでは重複が有るとエラーになります)

◎(7.17)「テスト 全 プログラム 更新」に戻ってZZZZ300121の「市 更新処理」を本来のプログラムに改造します。
1400と1500の*を取り、1800にKを付け、2000のKを取り、2200の*を取ります。'TEST'で実行します。

◎(7.18)ここで試しに'2'(作成)で「~~AA_し」に重複データの「いいだ」と入れてみます、「?情報有り」をI言語が表示して再入力されます。

◎(7.19)次に'2'(作成)で「~~AA_し」は重複なしの「いいやま」、「~~AA_市」には重複データの「飯田」と入れて作成してみます。
今度はI言語では入力できましたが、作成時点でデータベースが重複エラーを返しました。
コメントが「?異常発生」では、操作している人がびっくりしますので、プログラムで対応します。

◎(7.20)「テスト 全 プログラム 更新」に戻ってZZZZ300121の「市 更新処理」をに重複チェックを追加しました。

◎(7.21)テスト続行で今度は「飯田」入力時点でエラー表示しました。
プログラムを説明します。
2010 =SQL_SET{}{SELECT ~~AA_し FROM ?_TABLE? X1 WHERE
SQL_SETはSQLを発行し受信データを1件のみ受取り、受け取った場合は「;」までスキップします。
次の{}は本来は受信データの転送先を指定します、今回はデータがあるか無いかの判定ですので受信データはどこにも転送しません。
「SELECT ~~AA_し FROM ?_TABLE? X1 WHERE」はSELECTのSQL文の先頭です。
2020 = ?_VE&X1.~~AA_市?}EXIT{};
「?_VE&X1.~~AA_市?」は先頭がアンダーバーなのでシステム提供データ名ですが、途中に&がある場合は以降のデータ名を元に比較文字列を組み立てます。
 VはValueの意味で値と比較します、EはEqualの意味で一致比較をします、今回は「X1.ZZZYAA_市=N'飯田'」の文字列となります。
通常は「AND Z_CANCEL=' '」が必要ですが、削除データと重複した場合もエラーとなるので今回は指定しません。
EXIT{};で受信データが無い、つまり、重複がない場合は次の入力に行きます。
2030 =ERROR{?&.TITLE&~~AA_市?が重複しています};
受信データが有った場合はエラーとなります。
?&.TITLE&~~AA_市?はこのデータ名の言語に合わせたタイトルに変換します。
これで、ひらがな項目の追加は完了です。
次へ(8/9,承認機能の追加)
All Rights Reserved, Copyright (C) 2009-2010 Nobumichi Harasawa.