![]() |
||
R3Dは従来のプログラミングの考え方とその考え方に違いがあります。その「考え方の違いについてはここ」をご覧下さい。
それでは、次の目次に沿って具体例を示しながら説明していきましょう。 また「説明で利用するデータベースの定義についてはここ」をご覧下さい。 |
||
![]() |
||||
導出定義文 テーブル=受注明細
|
||||
![]() |
|||||
導出定義文 テーブル=受注明細
|
|||||
![]() |
||||
導出定義文 テーブル=受注明細
|
||||
![]() |
|||||
次の例は、マスターテーブルからコード値を与えて名称,単価を得る例です。 導出定義文 テーブル=受注明細
*2 次に、商品コード「A003」を格納します。 *3 行番号3に、A003が商品マスターから「商品名」「単価」が自動的に持って来られ、合計が計算されたところを見ます。 |
|||||
![]() |
|||||
導出定義文 テーブル=受注明細
*2 商品コードが「A002」を持つ受注明細データの全てが変ったことを確認します。 |
|||||
![]() |
||||
B読出しのみの関数(非同期関数)
その場合、初期にデータを格納するときには、マスターからデータを引いてセットしますが、セットした後は、マスターの内容が変更されても、連動して内容が変更されないように定義することもできます。その定義は、R3D関数名の前に"get"をつけることによって可能となります。以下に例を示します。 導出定義文 テーブル=受注明細
こうすることによって、たとえ商品の単価が変動しても、過去の伝票の内容は変更されません。もちろん、新規に受注明細データを登録する場合には、その時点での商品マスターに登録されている単価が自動的に持って来られます。
|
||||
![]() |
||||
C条件文を使う
導出定義文 テーブル=受注明細
例えば、新規に伝票を入力する際、商品コードを指定すれば自動的に商品名が商品マスターから読み出して持って来られますが、その商品名を自由に書き換えたいときなどに指定します。もし、このif文の指定がない場合は、商品マスターと同期がとられますので、商品名が変更されても、その時点で商品マスターから登録されている商品名が再度持って来られその変更に上書きされてしまいます。逆に、常にマスターの値と同期を取って同じとしたい場合は、if文は不要です。 |
||||
![]() |
|||||
導出定義文 テーブル=受注マスター
*2 追加された行です。 *3 上位のテーブルの受注番号100に、受注明細の合計額の集計値が自動的に1703になっています。 |
|||||
![]() |
|||||
E請求書データの自動作成
関係定義文 データベース=販売データベース
導出定義文 テーブル=請求書マスター
2007年9月20付の請求書を作成します。 その場合、売上日が、8月21日〜9月20日までの売上額が請求額となります。
*2 10番の顧客に対して過去も含めて請求書を印字しました。 2007-09-20の締日の請求書を見ますと、自動的に売上日が2007年8月21日から2007年9月20日までの売上データが集計されて14,933円になっています。getsumではありませんので、もし、後から受注明細の売上データの更新があれば、自動的にここの今月請求額も更新されます。 |
|||||
![]() |
|||||
3.異なるデータベース間の演算 他データベースに存在するマスターテーブルの内容を持って来て、データの同期を取ります。以下はその一例です。人事データベースと販売データベースがあり、人事データベースの内容を販売データベースで同期して利用するときの例です。 関係定義文 データベース=販売データベース
導出定義文 テーブル=社員テーブル
*2 大元の人事データベースの「井上花子」さんの名前を、「山田花子」さんに変更しました。 *3 そうすると、販売データベース内の社員テーブルの「井上花子」さんが「山田花子」さんに変更されました。 この場合は、val関数を使っていますので、双方のデータの内容は同期が取られます。すなわち、人事データベースの社員マスターの社員名が変更されますと、販売データベースの販売員マスターの社員名も自動的に更新されます。 また、販売データベースの販売員マスターの社員名を変更したとしても、人事データベースの社員マスターの社員名に戻されますので、データの一貫性が保たれることになります。 |
|||||
![]() |
|||
A他データベースとの非同期関数
導出定義文 テーブル=社員テーブル
この場合は、社員テーブルの社員名は自由に変更できます。 |
|||
![]() |
|||||||
異なるサーバ上にあるデータを参照したり同期して更新するためには、
|
|||||||
![]() |
||||
マスターファイルのコード番号付は、大変重要ではありますが面倒な作業でもあります。そのために、一般のDBMSでは、identity機能が用意されており自動的に番号を作成してくれますが、これはあくまでも数値となります。
自動的にコードがふられるところを見ます。
*2 インスタントラーメンが、A005番で登録されたところの表示です。 |
||||
![]() |
||||||||||||||||||||||||||||||||||||||||||
次のテーブルを販売管理データベースに追加します。 商品マスター履歴
関係定義文 データベース=販売データベース
「to テーブル名」のあとにhistory句を指定することによって、「to
テーブル名」で指定されたテーブルに変更が加えられたならば、常に左辺の=の前のテーブルがInsertされるようにすることができます。この場合主キーは、例えばidentityを指定することによって、自動的に採番されるようにしておけば便利でしょう。例では、商品マスターに新たなデータがinsertされたときは「登録」を、商品マスターの任意のデータがupdateされたときは「更新」を、また、商品マスターのデータがdeleteされたときは「削除」を履歴ステータスに代入するように、導出定義文に
if 文を使って記述しています。
次に、商品マスター履歴が格納されるところを見ます。
*2 今在庫が何個になったかを見ます。68個になっています。 *3 商品コードA002の在庫履歴を、古いもの順に出します。70個が68個になったことがよく分かります。 |
||||||||||||||||||||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
関係定義文 データベース=販売データベース
「when not found」句を指定することによって、where以下の条件が見つからないときは、自分自身をinsertすることができます。また、その際、売上日に日付が入っているときだけ実行されるように、売上日がnullでないときの条件を付加することもできます。
導出定義文 テーブル=月統計
導出定義文 テーブル=日統計
統計データが作成されるところを見ます。
*2 10月3日に売上が追加されました。294円でした。 *3 再度、10月の統計データを見ます。10月3日のデータが増えています。 *4 さらに月統計も自動的に集計されているところを見ます。年統計は省略されていますが、月データが年で自動的に集計されます。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||
しかしながら、R3Dでは、各フィールド毎に手続文でのチェックロジックを定義することができますので、データベース内にデータの正当性ロジックを埋め込むことができます。以下はその例です。 導出定義文 テーブル=社員マスター
性別は、1が男 2が女 とします。 |
||||
![]() |
|||||
ストアードプロシージャの例 (導出定義文内では、Select文を使えないのでストアードプロシージャ内でselect検索する)
導出定義文 テーブル=社員マスター
|
|||||
![]() |
||
10.EXCELとの連携(R3D Sheet:リリースを開始しました)
BookやSheetにまたがってデータを集計したり、連鎖的にデータの更新ができるところが重宝されています。しかしながら、大量のデータが扱えないことと、複数の作業者で共有して使用することができないという最大の難点を持っています。R3Dは、EXCELの様に連鎖的なデータの更新を可能とし、しかも、多数の作業者にてデータの共有を可能とするデータベースの特徴をも合わせ持っています。 そこで、R3Dで連鎖的に更新されたデータベース内のデータをEXCELに渡し、EXCEL上でそれらのデータの取扱を行うインターフェースを用意しています。 そのインターフェイスのことをR3D Sheetと言い、DLL形式のR3DS関数を利用することによって、Excel上でリアルタイム(DBに対する直接更新や更新後での即時読み出し)でのデータベースの利用を可能とします。 ![]() |
||
![]() |
||
これらは、R3Dによって水面下で自動的になされますので、どのデータの変更が、どのデータの変更を引き起こすかという事を把握しておく事が必要となります。この事をデータの依存関係の把握と言いますが、何らかのツールがなければむつかしいものです。R3Dでは以下の様な画面を用意して、この項目は、どの項目の変更によって連鎖的に変更されるかを知る事ができます。 ![]() 表中「関連」がつけられたデータベース名,テーブル名,フィールド名が、影響を与える元となるデータを示しています。なお、()で囲まれたフィールド名は、getが付けられた関数によってデータの読み出しのみが行われ、その内容の変更は、連鎖的に変更されない事を意味しています。 |
||
![]() |