DataBase

DataBase

InterNet

Strings

QuickReport

Menu

Links

Return Return

 

データベース処理の流れ

データベース処理には大きく分類すると次の4つある。

  1. テーブルの作成
  2. 入力処理
  3. 更新処理
  4. 削除処理
  5. 検索(閲覧)処理

その他

  1. 2つ以上のテーブルを結合する方法
  2. 他のテーブルを参照する項目を作る方法
  3. TTableとTQueryの違い
  4. SQL文の例題と解説
  5. データセットのイベント解説
  6. 計算項目について


1.テーブル作成Page TOP

言語ドライバの設定

Paradoxの場合次の2種類のどちらかだろう。

  1. Paradox 'ascii' ascii 英語 / 437
  2. Paradox 'japan' japan 日本語 / 932

デフォルトは 'japan'だが、サンプルデータベースは'ascii'になっている。

InterBaseの場合

Windows95で日本語を使うならシフトJISコードを使うべきだろう。

テーブルの作成時にデフォルトキャラクタセットをオプションで次のように指定する。

DEFAULT CHARACTER SET SJIS_0208

UNICODEを使う場合

DEFAULT CHARACTER SET UNICODE_FSS

データディクショナリの使い方

ディクショナリに登録できるプロパティ

Alignment DisplayWidth
DisplayFormat EditFormat
MaxValue MinValue
ReadOnly Required
Visible CustomConstraint
ErrorString  



2.入力処理Page TOP

入力データの検証

データを入力した時にデータが入力規則に沿っているかどうかを確かめる必要がある。

入力データの検証にはTFieldコンポーネントのOnValidateイベントを使う。

<例題> CompanyにCで始まるデータだけを受け入れる場合。

	procedure TForm1.Table1CompanyValidate(Sender: TField);
	begin
		if CompareText(Copy(Sender.Text,1,1),'C') <> 0 then
			raise Exception.Create('無効なデータです。');
	end;
	

<解説> OnValidate イベントハンドラで、入力データを受け付けないようにするには,例外を生成する。入力データはSender.Textで受け取る。


3.更新処理Page TOP

データを更新するには、まずデータを検索する必要がある。

検索処理を参照せよ。

TQueryでの更新

TQueryコンポーネントを使うとデータを更新できないときがある。SQL文で2つ以上のテーブルを使用した場合はデータを更新できない。

その他にも次の語句をSQL文で使用すると更新できないデータセットになってしまう。

  • order
  • join

キャッシュアップデートを使うと、更新できる。

キャッシュアップデートはTUpdateSQLコンポーネントを使って実現する。

TUpdateSQLにDeleteSQL, InsertSQL, ModifySQLを設定する。

TUpdateSQLをダブルクリックするとSQL文自動生成のダイアログボックスが出てきるのでそれを使ってSQL文の雛形を作成する。

一括更新

TQueryのSQL文で更新クエリーを指定すればデータの一括更新を実現できる。

<例題> Customer.DBのTaxRateをエディットボックスに入力した数値分増減する。

Query1のSQL文

UPDATE Customer.DB SET TaxRate = TaxRate + :UpDown

*ParamsプロパティでUpDownをFloat型にする。

次のコードを実行する。

Query1.ParamByName('UpDown').asFloat:=strToFloat(Edit1.Text);
Query1.ExecSQL;


4.削除処理Page TOP



5.検索(閲覧)処理Page TOP

TTableを使う場合

Indexを使う

SetRange

FindKey

GotoKey

Indexを使わない

Filter

Locate

LookUp

FindKey, GotoKeyは互換性のために残っているだけである。新しいアプリケーションではLocateとLookUpを使うべきだ。Locate可能な限り速い方法を使って一致するレコードの位置を突き止める。

<例題1> SetRangeを使って、顧客テーブルの顧客番号が
Edit1.TextからEdit2.Textまでの データを絞り込む。

	with Table1 do
	begin
		SetRangeStart; { 最初のキーを設定する }
		FieldByName('CustNo').AsFloat :=
		StrToFloat(Edit1.Text);
		SetRangeEnd; { 最後のキーを設定する }
		FieldByName('CustNo').AsFloat :=
		StrToFloat(Edit2.Text);
		ApplyRange;{ 範囲の設定をデータセットに適用する }
	end;
			

<解説> SetRangeはインデックス項目にしか使えない。

<例題2> Locateを使って会社名がEdit1.Textと先頭部分一致するデータを取り出す。

if not Table1.Locate('CompanyName',Edit1.Text,
 [loCaseInsensitive,loPartialKey]) then
    MessageDlg('該当するデータがありません。',mtInformation,[mbOK],0);

<解説> Locateメソッドは一致するデータが見つかるとTrueを返す。

<例題3> Locateを使って、StateとCityが
エディットボックスの内容と一致するデータを検索する。

if not Table1.Locate('State;City',VarArrayOf([Edit1.Text, Edit2.Text]),
[loCaseInsensitive, loPartialKey]) then
ShowMessage('該当するデータはありません。');

<解説> Locateで2つ以上の項目で検索する時は
検索項目を 'State;City'にし、検索値をバリアント型の配列にする。

<例題4> FindKeyを使って、顧客テーブルの顧客番号(CustNo)が
エディットボックスの内容と一致するデータを検索する。

if not Table1.FindKey([Edit1.Text]) then
MessageDlg('該当するデータがありません。',mtInformation,[mbOK],0);

<解説> 顧客番号(CustNo)はインデックスになっている。FindKeyはインデックスのある項目しか検索できない。


その他

2つ以上のテーブルを結合する方法Page TOP



他のテーブルを参照する項目を作る方法Page TOP



TTableとTQueryの違いPage TOP

処理

TTable

TQuery

並べ替え

IndexFieldNamesまたはIndexNameを使う。

インデックスを使用して並べ替えを行うのでテーブルにインデックスを作成する必要がある。
SQL文の中で
Order Byを使う。


但し、SQL文の中で
Order Byを使うと更新が不可能なデータセットになる。

検索

Filterプロパティを使う。
SetRangeを使う。但しインデックス項目にしか使えない。
Locate,FindKey
 

データ更新

   
     
データセットのイベント解説Page TOP

イベントの使用目的別解説

1.初期値の設定

使用するイベント OnNewRecord
順序 BeforeInsert, OnNewRecord, AfterInsert
ソース(DB.PAS) TDataSet.Insert(5336),
TDataSet.Append(5353),
TDataSet.BeginInsertAppend(5421)
TDataSet.EndInsertAppend(5429)

(例)

2.入力データの検証

使用するイベント OnValidate
順序  
ソース(DB.PAS)  

計算項目についてPage TOP

制作/著作 (C) 1998 好本宜充