簡単DBアプリ作成−サンプルデータベース
さて、簡単なデータベース接続アプリケーションを作成してみましょう。
まず、サンプルデータベースを用意します。これはローカルにインストールしてあるFirebird-2.1.3を使いました。
●データベース
Firebirdのインストールディレクトリにあるaliases.confに以下の内容を追加します
yakitori = c:\database\yakitori.21.fdb CREATE DATABASE 'yakitori' PAGE_SIZE=16384 DEFAULT CHARACTER SET UTF8;
●テーブル
CREATE TABLE menu( id INTEGER NOT NULL PRIMARY KEY, product VARCHAR(100), price INTEGER, seasoning CHAR(1) DEFAULT 'S' NOT NULL, start_date TIMESTAMP, enabled SMALLINT DEFAULT 1 NOT NULL, last_update TIMESTAMP DEFAULT 'NOW' );
●ジェネレータ
CREATE GENERATOR gen_menu_id;
●トリガー
SET TERM ^ ;CREATE TRIGGER trg_bi_menu FOR menu ACTIVE BEFORE INSERT OR UPDATE POSITION 0 AS BEGIN if (INSERTING AND (NEW.id IS NULL)) THEN NEW.id = GEN_ID(gen_menu_id,1); if (UPDATING AND (NEW.last_update = OLD.last_update)) THEN NEW.last_update = CURRENT_TIMESTAMP; END^ SET TERM ; ^
●サンプルデータ
INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'もも', 126, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'もも', 126, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'もも', 126, 'H', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '砂肝', 147, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '砂肝', 147, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '皮', 126, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '皮', 126, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '三角', 147, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( '三角', 147, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'つくね', 157, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'つくね', 157, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'つくね', 157, 'H', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'ねぎま', 157, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'ねぎま', 157, 'T', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'ねぎま', 157, 'H', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'ささみ', 147, 'S', '2009/7/1'); INSERT INTO menu (product, price, seasoning, start_date) VALUES ( 'ささみ', 147, 'T', '2009/7/1');
簡単DBアプリ作成−メインフォーム
まず、新しくメインメニューから新しいアプリケーションを作成します。フォームが1つできるので、そこにボタンを3つとDataSourceの各コンポーネントを配置します。また、DBGridを1つ配置しましょう。それぞれのプロパティを以下のように変更します。
●メインフォーム
- Caption = Simple DB App
- DocType = dtXHTML_1_0_Strict
- Encoding = Unicode(UTF-8)
- Name = form_main
●DataSource
- DataSet = dm_main.qry(データモジュールの設定が完了してから指定して下さい)
- Name = ds
●DBGrid
- DataSource = ds
- ReadOnly = true
●Button1
- Caption = Connect
●Button2
- Caption = Add new
●Button3
- Caption = Modify
簡単DBアプリ作成−データモジュール
次に、メインメニューから[ファイル]−[新規作成]−[データモジュール]を実行して、データモジュールを追加します。
データモジュールは、フォームと違ってWebブラウザには表示されませんが、非ビジュアルコンポーネントを配置することができるコンテナになるものです。名前のとおり、データベース関連のコンポーネントやメソッドはここへ追加していった方が使い易いでしょう。
Delphi for Windowsとは違い、フォームを相互に参照する場合には、そのままだとインクルードした方のフォームも表示されてしまいます。これを回避する方法もあるのですが、はっきりいって面倒なのでフォームを相互に参照するのはできるだけ避けて、データモジュールをうまく使いましょう。
fom_mainの方からは、メインメニューの[ファイル]−[ユニットを使う]でデータモジュールを参照するようにします。
さて、このデータモジュールにIBDatabaseを1つ、IBQueryを3つ追加して、各コンポーネントを以下のように設定します。
●データモジュール
- Name = dm_main
●IBDatabase
- Charset = utf8
- DatabaseName = yakitori
- Host = localhost
- Name = db
- UserName = sysdba (有効なFirebirdユーザー名)
- UserPassword = ******** (有効なパスワード)
●IBQuery1
- Database = db
- LimitCount = -1
- LimitStart = -1
- Name = qry
- SQL = select
id,
product,
price,
case seasoning
when 'S' then '塩'
when 'T' then 'たれ'
when 'H' then 'ハーブ'
end seasoning,
start_date
from menu
●IBQuery2
- Database = db
- LimitCount = -1
- LimitStart = -1
- Name = qry_insert
- SQL = insert into menu
(product, price, seasoning, start_date)
values
(?, ?, ?, ?)
●IBQuery3
- Database = db
- LimitCount = -1
- LimitStart = -1
- Name = qry_update
- SQL = update menu
set
product = ?,
price = ?,
seasoning = ?,
start_date = ?
where
id = ?
簡単DBアプリ作成−コーディング
ここまでの準備ができたら、Button1をダブルクリックしてform_mainにボタンのイベントハンドラを追加して、ここに以下のコードを追加します。
データモジュールの各コンポーネントおよびメソッドには、[ユニットを使う]でdm_mainをrequire_once()した上で、各イベントハンドラ内で利用するたびに、global宣言してアクセスします。
function Button1Click($sender, $params) { global $dm_main; if($dm_main->db->Connected == false) { $dm_main->db->Open(); $dm_main->qry->open(); $this->Button1->Caption = 'DisConnect'; } else { $dm_main->qry->close(); $dm_main->db->Close(); $this->Button1->Caption = 'Connect'; } }
とりあえずこれだけで、データベースに接続してDBGridに内容を表示したり、切断したりできるようになりました。
2/3 |
Index | |
データベースコンポーネントの使い方 | |
Page1 データベースコンポーネント ネイティブか、それとも汎用か、それが問題だ! InterBaseコンポーネントの機能追加 |
|
Page2 簡単DBアプリ作成−サンプルデータベース 簡単DBアプリ作成−メインフォーム 簡単DBアプリ作成−データモジュール 簡単DBアプリ作成−コーディング |
|
Page3 簡単DBアプリ作成−レコードの追加(1) 簡単DBアプリ作成−レコードの追加(2) 簡単DBアプリ作成−レコードの追加(3) |
Delphi for PHPを使い倒す! |
Coding Edgeお勧め記事 |
いまさらアルゴリズムを学ぶ意味 コーディングに役立つ! アルゴリズムの基本(1) コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう |
|
Zope 3の魅力に迫る Zope 3とは何ぞや?(1) Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか? |
|
貧弱環境プログラミングのススメ 柴田 淳のコーディング天国 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く? |
|
Haskellプログラミングの楽しみ方 のんびりHaskell(1) 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう |
|
ちょっと変わったLisp入門 Gaucheでメタプログラミング(1) Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|